通过本地LLM搭建本地RAG

整体思路

  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模型

  • 安装ollama
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

通过本地LLM搭建本地RAG_第1张图片

第二步:通过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("当前项目情况总结"))

最终运行效果

通过本地LLM搭建本地RAG_第2张图片

你可能感兴趣的:(#,AI体系学习,人工智能)