首页AI 学习中心大模型基础
大模型基础进阶22 分钟

RAG 检索增强生成:原理 + 实战搭建本地知识库

深入讲解 RAG 检索增强生成原理,并手把手实战搭建支持私有文档问答的本地知识库。

📅 2026年7月8日👁 阅读❤️ 点赞
# RAG# 向量数据库# 知识库# LangChain

为什么需要 RAG

大语言模型存在两个固有局限:知识截止日期私有数据盲区。RAG(Retrieval-Augmented Generation)通过在推理时动态检索外部知识库,将相关文档片段注入 Prompt,让模型"看到"实时或私有数据后再作答。


RAG 工作原理

用户提问

[Query Embedding] → 将问题转为向量

[向量检索] → 在知识库中找 Top-K 相似文档

[Prompt 组装] → 将文档片段 + 原始问题拼入 Prompt

[LLM 生成] → 基于检索到的上下文回答

最终答案


核心组件

组件常用方案说明
文档加载LangChain Loaders支持 PDF/Word/Markdown/网页
文本切分RecursiveCharacterTextSplitter按语义边界切分,chunk_size 推荐 512
Embedding 模型text-embedding-3-small / BGE-M3本地可用 BGE 中文模型
向量数据库Chroma / Qdrant / FAISSChroma 适合本地,Qdrant 适合生产
LLMGPT-4o / DeepSeek / Ollama本地完全私有用 Ollama


实战:Python 搭建本地知识库

安装依赖

pip install langchain langchain-openai chromadb pypdf

文档加载与切分

from langchain.document_loaders import PyPDFLoader

from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader("company_docs.pdf")

docs = loader.load()

splitter = RecursiveCharacterTextSplitter(

chunk_size=512,

chunk_overlap=50, # 相邻 chunk 重叠,避免信息截断

separators=["\n\n", "\n", "。", "!", "?"]

)

chunks = splitter.split_documents(docs)

print(f"切分为 {len(chunks)} 个片段")

向量化并存入 Chroma

from langchain_openai import OpenAIEmbeddings

from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

vectordb = Chroma.from_documents(

documents=chunks,

embedding=embeddings,

persist_directory="./chroma_db"

)

vectordb.persist()

print("知识库构建完成")

检索增强问答

from langchain.chains import RetrievalQA

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o", temperature=0)

retriever = vectordb.as_retriever(search_kwargs={"k": 4})

qa_chain = RetrievalQA.from_chain_type(

llm=llm,

retriever=retriever,

return_source_documents=True

)

result = qa_chain.invoke("公司的年假政策是什么?")

print(result["result"])

来源文档

for doc in result["source_documents"]:

print(f"来源:{doc.metadata['source']} 第{doc.metadata['page']}页")


检索优化策略

策略方法效果
混合检索向量检索 + BM25 关键词检索提升召回率
重排序Cohere Rerank / BGE-Reranker提升精准度
HyDE先生成假设答案再检索处理抽象问题
查询扩展LLM 生成多个相关查询提升覆盖率


小结

RAG 的核心在于"先找后答"——通过高质量的文本切分和向量检索,确保 LLM 获得准确的上下文。生产环境中建议使用混合检索 + 重排序组合,并定期更新向量库以保持知识的时效性。

觉得这篇文章有帮助?点个赞支持一下 👇

点赞会记录在本地,不需要登录

相关教程

← 上一篇
Midjourney v7 风格参考(--sref)完全指南
下一篇 →
ComfyUI 工作流从零开始:5步生成你的第一张图
← 返回学习中心
AI Explorer · 实战教程