微信扫码
与创始人交个朋友
我要投稿
指导如何结合Ollama、Llama 3和Milvus搭建高效的检索增强生成(RAG)系统,创建一个能解答特定问题的Q&A聊天机器人。
随着Llama、Mistral、Gemma等开源大型语言模型(LLMs)的兴起,本地运行LLMs的实用性和必要性日益凸显,尤其是与商业模型如GPT-3或GPT-4相比时,其成本效益展现出明显的优势。
本文指导读者如何结合Ollama、Llama 3和Milvus搭建高效的检索增强生成(RAG)系统,创建一个能解答特定问题的Q&A聊天机器人。
RAG,即检索增强生成,是一种通过融合额外的数据源来提升大型语言模型(LLMs)性能的技术。一个典型的RAG应用流程包括:
索引:这涉及从数据源中提取数据,并在Milvus中进行加载、分割和存储,形成索引。
检索与生成:在应用运行期间,RAG会处理用户的查询,从Milvus中的索引里检索出相关数据,然后利用这些数据,LLM生成一个更加精准的响应。
请先确认系统满足以下先决条件:
Docker与Docker-Compose - 请确保系统中已安装Docker及Docker-Compose工具。
Milvus独立版 - 使用Milvus的独立版本,它可以通过Docker Compose方便地进行管理。具体安装方法,请参考文档说明(https://milvus.io/docs/install_standalone-docker-compose.md)。
Ollama - 在系统上安装Ollama;访问其官方网站获取最新的安装指南。
安装完所有前提条件后,就可以设置 RAG 应用程序了:
使用命令docker-compose up -d
启动Milvus独立实例。
此命令以分离模式启动Milvus实例,在后台安静运行。
通过命令ollama pull <name_of_model>
获取LLM模型。
通过模型库查看可用模型列表。
例如:ollama pull llama3
此命令下载模型的默认版本(通常是最新和最小的版本)。
使用命令ollama run <name-of-model>
直接从命令行与模型聊天。
安装依赖项
要运行此应用程序,需要安装所需的库。可以直接使用pip
进行安装。
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
如前所述,RAG的主要组成部分之一是索引数据。
首先使用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)
获取嵌入并在Milvus中存储数据
接下来,使用Jina AI的Small English嵌入(https://huggingface.co/jinaai/jina-embeddings-v2-small-en)将文本数据转换为向量嵌入,并存储到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)
加载LLM
Ollama极大简化了在本地加载和运用大型语言模型(LLM)的过程。在本例中,将应用Meta公司开发的Llama 3模型进行操作。以下是如何加载:
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|>"],
)
使用Langchain构建QA链
最后,构建QA链以处理和响应用户查询:
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)
通过最后一个单元格中的 result
变量执行 RAG 应用程序。
问答交互示例:
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."}
这样就成功使用Ollama、Llama 3、Langchain和Milvus搭建了一个功能强大的本地大型语言模型(LLM)。。这一配置不仅让处理庞大的数据集变得轻松可行,同时也打造了一个反应迅速的本地问答系统。
LangChain为开发者提供了一套强大而灵活的工具,使其能够轻松构建和优化大模型应用。本书以简洁而实用的方式引导读者入门大模型应用开发,涵盖LangChain的核心概念、原理和高级特性,并为读者提供了在实际项目中应用LangChain的指导。 本书从实际的例子出发,细致解读LangChain框架的核心模块和源码,使抽象的概念变得具体。无论你是初学者还是有经验的开发者,都能从中受益,能够将LangChain的独特之处融入自己的编程实践中。阅读本书,一起探索LangChain编程的奇妙世界吧!
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-25
RAG的2024—随需而变,从狂热到理性(下)
2024-11-25
RAG的2024—随需而变,从狂热到理性(下)
2024-11-25
糟糕!LLM输出半截Json的答案,还有救吗!
2024-11-24
解读GraphRAG
2024-11-24
RAGChecker:显著超越RAGAS,一个精细化评估和诊断 RAG 系统的创新框架
2024-11-23
FastRAG半结构化RAG实现思路及OpenAI O1-long COT蒸馏路线思考
2024-11-23
检索增强生成(RAG):解密AI如何融合记忆与搜索
2024-11-23
如何提高RAG系统准确率?12大常见痛点及巧妙解!
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21