LangChain 学习笔记 · Day 12 RAG Pipeline(检索 + LLM)

学习 RAG Pipeline 的完整流程,结合 Retriever + LLM 实现企业知识库问答 Demo
20 分钟阅读
LangChainPythonRAGRetrieverLLMChroma

🎯 学习目标

  1. 理解 RAG(Retrieval-Augmented Generation) 的完整流程\
  2. 掌握 Retriever + LLMChain 的组合方式\
  3. 实战:构建一个 企业知识库问答 Demo

🔹 1. 什么是 RAG Pipeline?

RAG = 检索 (Retriever) + 生成 (LLM)

流程图:

用户问题 → 向量化 → 相似度检索(Retriever) → 上下文 → LLM 回答
  • Retriever:从向量数据库(如 Chroma)里找到最相关的文档片段\
  • LLM:基于检索到的上下文生成答案\
  • Pipeline:把检索和生成组合成一个整体

👉 优点: - 减少幻觉:模型只会基于上下文回答\

  • 可溯源:答案能附带出处(metadata)\
  • 知识增强:接入企业私有知识库

🔹 2. Demo:企业知识库问答

代码示例

# file: day12_rag_pipeline.py
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import RetrievalQA

# 1) 初始化 LLM
llm = ChatOpenAI(model="kimi-k2-0711-preview", temperature=0.2)

# 2) 加载向量数据库
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
db = Chroma(persist_directory="./chroma_store", embedding_function=embeddings)

# 3) 构建 Retriever
retriever = db.as_retriever(search_kwargs={"k": 3})

# 4) 定义 Prompt
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是企业知识助手,只能基于上下文回答问题。若无法确定,请回答:根据提供的上下文无法确定。"),
    ("user", "问题:{question}\n\n上下文:{context}")
])

# 5) 构建 RAG Pipeline
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    chain_type_kwargs={"prompt": prompt}
)

if __name__ == "__main__":
    question = "公司年假政策是怎样的?"
    answer = qa.invoke({"query": question})
    print("Q:", question)
    print("A:", answer["result"])

输出示例

Q: 公司年假政策是怎样的?
A: 根据提供的上下文,员工在工作满一年后可享受 10 天带薪年假。【来源:员工手册·第3章】

🔹 3. 知识库支持多格式文件

为了实现"企业知识库",我们通常需要把 PDF / Word / Markdown / Excel 等文档统一加载进数据库:

  • .pdfPyPDFLoader\
  • .docxDocx2txtLoader\
  • .md / .txtTextLoader\
  • .xlsxpandas + DocumentUnstructuredExcelLoader

👉 这样能让员工通过自然语言直接问:"公司差旅报销标准是什么?" → LLM 自动检索规章制度 → 给出准确答案。


✅ 今日收获

  • RAG = Retriever + LLM 的结合,解决幻觉问题\
  • 学会用 RetrievalQA 快速搭建 RAG Pipeline\
  • Demo:实现一个 企业知识库问答助手(带引用)

⏭️ Day 13 展望

  • 学习如何融合 多数据源(PDF + 网页 + 数据库)\
  • Demo:构建一个 混合问答系统