LangChain:用于创建代理,实现与数据的互动。
Ollama:在笔记本电脑中使用 LLM 的强大功能,简化本地操作。
Milvus:向量数据库用于高效存储和检索数据。 Llama 3:由 Meta 推出的大语言模型,Llama 系列的最新版本。
索引流水线(Pipeline):用于从外部数据源中摄取数据并对其进行索引,随后加载、拆分并将数据存储在 Milvus 中。
检索和生成:将用户查询转换为 Embedding 向量,然后从 Milvus 中检索相关数据形成上下文,然后 LLM 上下文生成响应。
Docker 和 Docker-Compose
Milvus standalone
Ollama
通过命令 docker-compose up -d 启动 Milvus standalone 实例。该命令将以 Docker 分离(detached)模式启动您的 Milvus 实例,在后台安静运行。
通过命令 ollama pull <模型名称> (例如 ollama pull llama3)获取 LLM 模型。点击此处查看可用模型列表。该命令将下载模型的默认版本(通常是最新且最小的版本)。
通过命令 ollama run <模型名称> 要直接与模型进行交互。
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
使用 PyPDFLoader 导入 PDF 数据。
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data = loader.load()
切分数据
使用 RecursiveCharacterTextSplitter 将已加载数据切分为切片。
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
使用 Jina 的 Small English embeddings 将文本数据转换为 Embedding 向量并存储在 Milvus 中。
from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus
embeddings = JinaEmbeddings(jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
from langchain import hub
from langchain.chains import RetrievalQA
query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)
result = qa_chain({"query": query})
print(result)
Query: What is this document about?
The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications.{'query': 'What is this document about?', 'result': "The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications."}
欢迎了解 Milvus 及其 GitHub 代码仓库,并通过微信群交流分享 Milvus 使用经验!
Milvus standalone:
https://milvus.io/docs/install_standalone-docker-compose.md
Ollama 可用模型列表:
https://ollama.com/library
推荐阅读