通过本地LLM搭建本地RAG

#『AI先锋杯·14天征文挑战第一期』#

整体思路

  1. 通过ollama下载并搭建本地大预言模型LLM。
  2. 通过ollama搭建embedding模型。
  3. 通过langchain文件加载器加载本地内容文件(PDF文件)。
  4. 通过langchain调用embedding模型进行向量存储和RAG检索。
  5. 通过langchain prompts实现提示词工程。
  6. 通过langchain调用LLM模型实现RAG生成,完成对本地文件的分析。

准备环境

  • 服务器:CentOS Linux 7操作系统
  • 开发环境:Python 3.12.0 for Windows
  • 开发工具:VS Code

第一步:安装ollama,下载embedding模型和LLM模型

curl -fsSL https://ollama.com/install.sh | sh
  • 安装成功后运行并下载模型
systemctl start ollama
# 下载embedding模型
ollama pull nomic-embed-text:latest
# 下载deepseek模型
ollama pull deepseek-r1:1.5b
  • 查看下载模型
ollama list
  • 查看ollama服务状态
systemctl status ollama

第二步:通过pip下载langchain相关包进行编码

  • 下载langchain相关包
pip install langchain langchain_core langchain_community
  • 编码:文档加载与分割
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader("C:/Users/ethan/Desktop/IT每周汇报.pdf")
data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(data)
  • 编码:向量存储
from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaEmbeddings

vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=OllamaEmbeddings(base_url="http://192.168.66.128:11434",model="nomic-embed-text")
)
  • 编码:检索与生成
from langchain_core.prompts import ChatPromptTemplate
import asyncio

retriever = vectorstore.as_retriever()
llm = OllamaLLM(base_url="http://192.168.66.128:11434",model="deepseek-r1:1.5b")

async def rag_query(question):
    docs = retriever.invoke(question)
    async for chunk in llm.astream(f"基于以下上下文回答:{docs}\n\n问题:{question}"):
        print(chunk,end="",flush=True)

async def main(question):
    await rag_query(question)

asyncio.run(main("当前项目情况总结"))

最终运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TBM矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值