随着 Llama、Mistral、Gemma 等开源大语言模型(LLM)的出现,我们越来越能感受到 LLM 的力量,而本地运行基于 LLM 的 RAG 应用的需求越来越强烈。在将应用推至生产环境前,我们往往都需要先本地运行和测试。
因此,本文将介绍如何使用 Ollama、Llama 3 和 Milvus 向量数据库在本地部署一个检索增强生成(RAG)应用。
本文将使用到的软件和工具包括:
LangChain:用于创建代理,实现与数据的互动。
Ollama:在笔记本电脑中使用 LLM 的强大功能,简化本地操作。
Milvus:向量数据库用于高效存储和检索数据。
Llama 3:由 Meta 推出的大语言模型,Llama 系列的最新版本。
01.
问答与检索增强生成(RAG)
本文中,我们将使用 RAG 技术搭建一个高级的问答机器人。
02.
什么是 RAG?
RAG,即检索增强生成,是一种通过整合外部数据源来增强大语言模型(LLM)的技术。一个典型的 RAG 应用包括:
索引流水线(Pipeline):用于从外部数据源中摄取数据并对其进行索引,随后加载、拆分并将数据存储在 Milvus 中。
检索和生成:将用户查询转换为 Embedding 向量,然后从 Milvus 中检索相关数据形成上下文,然后 LLM 上下文生成响应。
文本将提供实用的操作指导,向您展示如何使用本地 LLM 构建 RAG 应用。欢迎初学者跟随本指南开始构建自己的问答机器人!
03.
前提条件
开始前,请先确保您已安装:
Docker 和 Docker-Compose
Milvus standalone
Ollama
04.
设置 RAG 应用
现在开始设置 RAG 应用 :
通过命令 docker-compose up -d 启动 Milvus standalone 实例。该命令将以 Docker 分离(detached)模式启动您的 Milvus 实例,在后台安静运行。
通过命令 ollama pull <模型名称> (例如 ollama pull llama3)获取 LLM 模型。点击此处查看可用模型列表。该命令将下载模型的默认版本(通常是最新且最小的版本)。
通过命令 ollama run <模型名称> 要直接与模型进行交互。
05.
安装依赖
您还需要安装所需的依赖库。如果您直接使用 Github 上的代码,可以使用 Poetry,或者您也可以使用 pip 进行安装。
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
06.
搭建并运行 RAG 应用
如前文所述,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)
使用 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)
4. 使用 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|>"],
)
5. 使用 Langchain 搭建问答机器人。构建问答链来处理和响应用户查询。
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)
07.
运行 RAG 应用
通过命令 python rag_ollama.py 运行 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 搭建了一个复杂的问答机器人。我们搭建的不应用不仅可以高效处理大规模数据集,还能够在本地针对用户问题进行回答。
欢迎了解 Milvus 及其 GitHub 代码仓库,并通过微信群交流分享 Milvus 使用经验!
相关链接:
Milvus standalone:
https://milvus.io/docs/install_standalone-docker-compose.md
Ollama 可用模型列表:
https://ollama.com/library
推荐阅读
总结
### 文章总结本文详细介绍了如何在本地部署一个基于Llama 3、Ollama、Langchain和Milvus的检索增强生成(RAG)应用,重点是构建一个高级的问答机器人。文章通过一系列步骤指导用户从环境准备、依赖安装到具体代码实现,全面覆盖了使用这些技术和工具的全过程。
#### 核心内容概述:
1. **技术概述**:
- **LLM( 大型语言模型)**:随着Llama、Mistral、Gemma等 开源大语言模型的出现,LLM 的应用场景逐渐拓展。
- **RAG(检索增强生成)**:通过整合外部数据源来提升LLM的性能,包括数据索引、检索和上下文生成。
2. **工具及软件**:
- **LangChain**:构建数据代理,实现与数据的交互。
- **Ollama**:简化LLM在本地笔记本电脑的使用。
- **Milvus 向量数据库**:高效存储与检索大规模向量数据。
- **Llama 3**:由Meta推出的最新大语言模型,功能强大。
3. **步骤详解**:
- **前提条件**:安装Docker、Docker-Compose、Milvus及Ollama。
- **环境搭建**:
1. 启动 Milvus 实例。
2. 拉取并使用 Ollama 获取 Llama 3 模型。
- **安装依赖**:通过pip安装相关Python库。
4. **构建RAG应用**:
- **数据索引**:从数据源(如PDF)导入数据,通过文本切分和Embedding,将数据存入 Milvus。
- **LLM交互**:使用Ollama加载Llama 3模型,进行上下文生成。
- **代码实现**:搭建问答链,接收用户查询,从Milvus检索相关数据,通过LLM生成响应。
5. **运行**:在项目文件夹下,执行Python脚本运行RAG应用,并提供用户交互功能。
#### 结论:
本文成功展示了如何在本地环境中,通过Ollama、Llama 3、Langchain和Milvus构建一个功能强大的问答机器人,可用于处理和分析大规模数据集中的查询问题。该技术方案不仅提升了处理效率,还具备高度的可定制性和可扩展性。
#### 相关资源与推荐:
- Milvus standalone安装文档:[https://milvus.io/docs/install_standalone-docker-compose.md](https://milvus.io/docs/install_standalone-docker-compose.md)
- Ollama可用模型列表:[https://ollama.com/library](https://ollama.com/library)
#### 推荐阅读:
提供的文档链接以及GitHub代码仓库,进一步深入了解和使用这些技术和工具。