AI Agent与RAG:打造你的专属知识库

📅 2026-08-11 · 👤 合尘猫 · 📖 AI Agent实战系列

# AI Agent与RAG:打造你的专属知识库

> 大模型再聪明,也不知道你公司的内部文档、你的读书笔记、你的私有数据。RAG(检索增强生成)就是给AI装上一个"外挂大脑",让它能基于你的专属知识库回答问题。本文从原理到落地,手把手教你搭一个属于自己的RAG系统。

一、为什么需要RAG?

直接问大模型三个问题:

三个问题,大模型一个都答不上来——因为它没看过你的私有数据

微调(Fine-tuning)能解决一部分问题,但成本高、周期长、数据更新后还要重新训练。于是RAG成了更实用的方案:

RAG = 检索(Retrieval)+ 生成(Generation)

先把你的文档"喂"进一个向量数据库,用户提问时先检索出最相关的片段,再把这些片段连同问题一起丢给大模型,让它基于真实材料生成答案。

RAG vs 微调 vs 长上下文

方案成本数据更新适用场景
**RAG**实时私有知识库、FAQ、文档问答
**微调**需重训风格/格式对齐、领域专精

对90%的企业和个人用户来说,RAG是性价比最高的方案

---

二、RAG的核心原理:三步走

一个完整的RAG流程分三步:索引(Indexing)→ 检索(Retrieval)→ 生成(Generation)

第一步:索引——把文档变成向量

原始文档(PDF、Word、网页、Markdown)不能直接用来检索,需要先做两件事:

  1. **分块(Chunking)**:把长文档切成小段,通常每段300-800 token
  2. **向量化(Embedding)**:用Embedding模型把每段文本转成一个高维向量(比如1536维的浮点数数组)
  3. 向量化的本质是把语义编码成数学距离——语义相近的文本,在向量空间中距离也近。

    
    "苹果发布了新iPhone"  →  [0.12, -0.34, 0.56, ...] (1536维)
    "Apple launched new iPhone" → [0.11, -0.33, 0.55, ...] (距离很近!)
    

    第二步:检索——找到最相关的片段

    用户提问时,把问题也用同一个Embedding模型转成向量,然后在向量数据库里做相似度搜索(常用余弦相似度),返回Top-K个最相关的文档片段。

    
    用户问题:"合同里违约怎么赔?"
        ↓ Embedding
    问题向量
        ↓ 向量检索
    Top-5 相关片段:
      - 合同第7条:违约金为合同金额的20%...
      - 第12条补充说明:逾期超过30天...
      - ...
    

    第三步:生成——基于检索结果回答

    把检索到的片段作为"上下文",连同用户问题一起拼成Prompt,交给大模型生成最终答案。

    
    Prompt模板:
    ---
    基于以下已知信息回答用户问题。如果已知信息中没有相关内容,请明确说明。
    
    【已知信息】
    {检索到的片段1}
    {检索到的片段2}
    ...
    
    【用户问题】
    {原始问题}
    ---
    

    这样大模型就不会"胡编乱造",而是有据可依地回答。

    ---

    三、向量数据库选型:5大主流方案

    向量数据库是RAG系统的核心组件,负责存储和检索向量。以下是2025年最主流的5个选择:

**长上下文**实时单次对话内的大文档分析
数据库类型适用规模特点
**Chroma**嵌入式小型/原型Python原生,零配置,本地开发首选
**Milvus**独立部署中大型分布式架构,性能强,国产开源
**Pinecone**云托管任意规模全托管SaaS,开箱即用,按量计费
**Qdrant**独立部署中大型Rust实现,性能优异,过滤能力强
**FAISS**库(非DB)研究/中型Meta开源,纯算法库,需自己封装

新手推荐路径

  • **个人学习/原型验证**:Chroma(5分钟跑通)
  • **生产环境/中小团队**:Qdrant 或 Milvus
  • **已有PostgreSQL**:pgvector,少引入一个组件
  • **不想运维**:Pinecone 云托管

---

四、实战:30分钟搭一个本地RAG

下面用 LangChain + Chroma + OpenAI 搭一个能问答你本地PDF的RAG。

环境准备


pip install langchain langchain-openai langchain-chroma pypdf
export OPENAI_API_KEY="sk-xxx"

核心代码(不到30行)


from langchain_community.document_loaders import PyPDFLoader
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA

# 1. 加载PDF
loader = PyPDFLoader("my_document.pdf")
docs = loader.load()

# 2. 分块
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 3. 向量化并存入Chroma
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")

# 4. 构建QA链
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 4}),
    return_source_documents=True
)

# 5. 提问
result = qa.invoke({"query": "这份文档的核心结论是什么?"})
print(result["result"])

跑完这段代码,你就有了一个能基于自己PDF回答问题的AI助手。

---

五、RAG的5个常见坑与优化技巧

很多人跑通Demo后发现"实际效果很差",通常是以下问题:

1. 分块策略不合理

  • ❌ 按固定字符数切,把一段话切成两半
  • ✅ 按语义切(段落/标题/句子边界),保留上下文
  • 2. 检索质量差

  • **混合检索**:向量检索 + BM25关键词检索,取并集再重排
  • **重排序(Rerank)**:用Cohere Rerank、BGE Reranker对Top-K结果二次打分
  • **查询改写**:用LLM把用户模糊问题改写成更精准的检索Query
  • 3. 上下文塞太多/太少

  • Top-K不是越大越好,太多会引入噪声,太少会漏信息
  • 通常K=4~8是个不错的起点
  • 4. 没有元数据过滤

给每个chunk加上元数据(来源文件、章节、日期、作者),检索时先过滤再向量搜索,能大幅提升准确率。

5. 没有评估体系

RAGASLangSmith 建立评估指标:

  • **Faithfulness**:答案是否忠于检索到的内容(不瞎编)
  • **Answer Relevance**:答案是否切题
  • **Context Precision**:检索的内容是否真的相关

没有评估 = 盲调参数。

---

六、进阶:Agent + RAG = 知识型AI Agent

单纯的RAG是"一问一答",加上Agent能力后可以更强大:

  • **多轮对话**:Agent记住上下文,支持追问
  • **工具调用**:Agent可以调用搜索引擎、数据库、API,RAG只是其中一个工具
  • **自我反思**:Agent发现检索结果不够,会自动改写Query重新检索
  • **多知识库路由**:根据问题类型自动选择查哪个知识库

典型的架构:


用户问题
  ↓
Agent(推理 + 规划)
  ↓ 选择工具
[向量库A] [向量库B] [Web搜索] [SQL数据库]
  ↓
汇总结果 → 生成答案

这就是为什么业内说"RAG是Agent的标配组件"——没有RAG的Agent,就像一个没有记忆和知识库的顾问,只能靠通用常识说话。

---

七、总结:RAG的核心价值

  1. **让大模型"懂你"**——接入私有数据,回答专属问题
  2. **成本低、见效快**——不需要训练,几天就能上线
  3. **可解释、可追溯**——答案带引用来源,不是黑盒
  4. 4. 易更新——文档变了,重新向量化即可,无需重训模型

    RAG不是万能药,但在"让AI基于私有数据回答问题"这个场景下,它是目前工程上最成熟、ROI最高的方案。

    ---

    🎁 福利时间

    想要完整的RAG实战教程(含本地部署代码、向量数据库对比实验、生产环境优化清单)?

    👉 回复【RAG】,立即获取:

    • 📦 《RAG从入门到生产》完整代码仓库
    • 📊 5大向量数据库实测对比报告
    • ✅ 生产环境RAG优化Checklist
    • 🎥 30分钟视频教程(手把手搭建)

    ---

    🌟 想系统学习AI Agent开发?

    加入我的知识星球「合尘猫AI实战」,和500+开发者一起:

    • 📚 每周更新AI Agent/RAG/多模态实战案例
    • 💬 一对一答疑,帮你解决具体项目问题
    • 🔧 共享代码库、Prompt模板、部署脚本
    • 🎯 从入门到接单,完整学习路径

    扫码/搜索加入,新人限时优惠中!

    ---

    *上一篇:[多Agent协作框架对比](./04-multi-agent-frameworks.md) | 下一篇:[AI Agent的商业化落地](./08-monetization.md)*

    🎁 福利时间

    回复关键词 【RAG】 获取本文配套资料包

    加入知识星球,获取更多AI实战内容

    立即加入 →
**pgvector**PG插件已有PG的团队PostgreSQL扩展,事务一致性好