引言
在AI技术的迅速发展中,本地运行的大型语言模型(LLM)越来越受到关注。通过本地部署LLM,你可以避免依赖云服务而产生的潜在隐私问题,同时也能在网络可访问性有限的地区正常运行。本文将介绍如何在本地构建一个检索增强生成(Retrieval-Augmented Generation, RAG)应用,涵盖从设置环境到实现应用的完整步骤。我们将使用LangChain工具包与Ollama提供的模型实现这一目标。
主要内容
构建环境设置
首先,我们需要设置Ollama来获取所需的模型。可以参考其GitHub仓库获取安装细节。以下是简要步骤:
-
下载并运行Ollama的桌面应用。
-
从命令行拉取模型,例如:
ollama pull llama3.1:8b # 通用模型 ollama pull nomic-embed-text # 文本嵌入模型 -
确保应用运行于
localhost:11434。
接着,安装一些必要的Python包:
# 文档加载、检索方法和文本分割
%pip install -qU langchain langchain_community
# 使用Chroma进行本地向量存储
%pip install -qU langchain_chroma
# 使用Ollama进行本地推理和嵌入
%pip install -qU langchain_ollama
文档加载与分割
接下来,加载并分割一个示例文档:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
向量存储初始化
我们使用nomic-embed-text模型进行嵌入,并将其存储在Chroma中:
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
local_embeddings = OllamaEmbeddings(model="nomic-embed-text") # 使用API代理服务提高访问稳定性
vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)
本地模型测试
设置并测试模型:
from langchain_ollama import ChatOllama
model = ChatOllama(model="llama3.1:8b") # 使用API代理服务提高访问稳定性
response_message = model.invoke(
"Simulate a rap battle between Stephen Colbert and John Oliver"
)
print(response_message.content)
代码示例:创建本地RAG链
我们可以通过链式操作将文档检索和主题总结结合起来:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"Summarize the main themes in these retrieved docs: {docs}"
)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
chain = {"docs": format_docs} | prompt | model | StrOutputParser()
question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)
chain.invoke(docs)
常见问题和解决方案
问题1:模型下载缓慢或失败
解决方案:检查你的网络连接,考虑使用API代理服务来提高访问稳定性,尤其是在某些地区网络受到限制的情况下。
问题2:检索时结果不准确
解决方案:调整向量存储的参数设置(例如,嵌入模型或分片大小),并确保输入文档质量。
总结和进一步学习资源
本文介绍了如何构建一个本地的RAG应用,涉及从环境设置到应用实现的完整流程。您可以探索以下资源以深入学习:
- LangChain官方网站
- 视频教程:构建LLaMA 3的本地RAG代理
- RAG的概念指南
- 如何在本地运行模型
参考资料
- LangChain官方文档
- Ollama模型指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---