mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
2612 字
7 分钟
RAG:让 AI 拥有你的知识库
2025-08-22

你问 AI:“公司的年假政策是什么?”

AI 自信满满地回答:“根据规定,员工入职满一年享有 10 天年假。” 听起来像真的,但你翻开员工手册一看,实际是 5 天。AI 编造了一个 听起来合理但完全错误 的答案。

这就是大模型的知识局限:它不知道你公司的内部文档,也不会告诉你 我不知道。

RAG(Retrieval-Augmented Generation,检索增强生成)解决的就是这个问题:让 AI 在回答之前先查阅资料,就像考试时允许你翻书。

本文要点#

  • 大模型为什么需要 RAG
  • RAG 的完整工作流程
  • 文档分块、向量化、检索的核心步骤
  • 向量数据库选型
  • 基础与进阶优化策略
  • GraphRAG、Agentic RAG 等前沿方向

一、为什么需要 RAG#

大模型有三大知识局限。

知识截止日期。 GPT-4 的训练数据截止于 2023 年。你问它 2025 年发生的事,它只能猜。

私有知识缺失。 企业内部文档、产品手册、个人笔记,这些信息从未出现在模型的训练数据中。

幻觉问题。 模型不会说 我不知道。当它没有足够信息时,会生成一个 听起来合理但实际错误 的答案。

RAG 的解决思路很简单:不是让模型 记住 所有知识,而是给它 查询 知识的能力。

你可以把它理解成开卷考试。闭卷考试靠记忆,容易记错。开卷考试可以翻书查阅,答案更准确、更可靠。


二、RAG 工作原理#

RAG 分为两个阶段:离线构建知识库在线查询回答

flowchart LR subgraph offline [离线阶段] A[文档] --> B[分块] B --> C[向量化] C --> D[向量数据库] end subgraph online [在线阶段] E[用户问题] --> F[向量化] F --> G[相似度检索] D --> G G --> H[构建 Prompt] H --> I[LLM 生成] I --> J[回答] end

离线阶段:把你的文档切块、转成向量、存入数据库。这一步只做一次(文档更新时增量更新)。

在线阶段:用户提问时,先把问题转成向量,在数据库中检索最相关的文档块,把它们和问题一起交给 LLM,让模型 根据参考资料回答。


三、关键步骤详解#

3.1 文档分块#

长文档需要切分成小块。分块质量直接决定 RAG 效果。

四种策略

策略方式优点缺点
固定长度每块 512/1024 token简单可能切断语义
语义分块按段落、章节切分语义完整块大小不均
滑动窗口块之间有重叠避免信息切断存储量增加
递归分块先按大单位,再按小单位灵活实现复杂

最佳实践:

  • 块大小:512~1024 token
  • 重叠:10%~20%
  • 每块保留标题、来源等元数据
  • 分块太大→噪音多;分块太小→语义不完整

3.2 向量化#

向量化(Embedding)把文本转换成一串数字(向量),使得语义相似的文本,在向量空间中距离也近

flowchart TD N0[""猫是一种宠物""] N1["[0.2, 0.8, 0.1, ...]"] N0 --> N1 N2[""狗是常见的宠物""] N3["[0.25, 0.75, 0.12, ...] ← 距离近"] N2 --> N3 N4[""汽车是交通工具""] N5["[0.9, 0.1, 0.8, ...] ← 距离远"] N4 --> N5

Embedding 模型选择

模型维度特点适用场景
OpenAI text-embedding-3-small1536性价比高通用
OpenAI text-embedding-3-large3072质量最高高精度
BGE-M31024开源、多语言中文、私有部署
Cohere embed-v31024长文本表现好RAG 专用

3.3 相似度检索#

向量化之后,用余弦相似度找到最相关的文档块。

余弦相似度 = (A · B) / (|A| × |B|)
值域:-1 到 1,越大越相似

检索 Top-K 最相似的块(通常 K = 3~10),作为 LLM 的参考资料。

3.4 上下文构建与生成#

把检索到的文档块和用户问题组合成 Prompt:

系统指令:根据以下参考信息回答问题。
如果参考信息中没有答案,请说 "根据现有信息无法回答"。
参考信息:
[块 1 内容]
[块 2 内容]
问题:公司的年假政策是什么?

关键技巧:明确指示模型 根据参考信息回答,并处理 不知道 的情况。


四、向量数据库选型#

数据库特点适用场景
Pinecone托管服务、零运维快速原型、中小规模
Chroma轻量、开源本地开发、小规模
Milvus高性能、分布式大规模生产
Weaviate语义搜索强复杂查询
QdrantRust 实现、高效性能敏感场景

选择建议: 本地实验用 Chroma,生产环境中小规模用 Qdrant 或 Weaviate,大规模用 Milvus。如果不想运维,用 Pinecone 托管。


五、RAG 优化策略#

5.1 基础优化#

混合检索。 向量检索擅长语义匹配,但对精确关键词(如产品编号 SKU-12345)不够准。把向量检索和关键词检索结合,用 RRF(Reciprocal Rank Fusion)算法融合结果,召回率可提升 10%~30%。

重排序(Reranking)。 初检索拿到 Top-50 候选,再用更精细的模型(BGE-Reranker、Cohere Rerank)重新排序,取 Top-5。精度提升 15%~40%,代价是延迟增加。

改进分块。 实验不同块大小(256/512/1024),添加重叠,保留文档结构(标题层级)。

5.2 进阶优化#

Query 改写。 用户的问题往往不够精确。用 LLM 将模糊问题改写为精确查询:

用户原始问题:"这个怎么办?"
改写后:"产品 X 出现错误代码 Y 时如何修复?"

HyDE(假设文档嵌入)。 让 LLM 先生成一个 假设的答案,用这个答案的向量去检索,比直接用问题检索效果更好。解决了 问题与文档语义不匹配 的问题。

多路召回。 同时用关键词、向量、知识图谱等多种方式检索,合并结果。

自适应检索。 简单问题少检索,复杂问题多检索。让 Agent 判断需要多少上下文。


六、GraphRAG:知识图谱增强#

微软在 2024 年提出 GraphRAG,利用知识图谱增强检索。

flowchart TD N0["传统 RAG:文档"] N1["分块"] N0 --> N1 N1["分块"] N2["向量化"] N1 --> N2 N2["向量化"] N3["检索"] N2 --> N3 N4["GraphRAG:文档"] N5["提取实体和关系"] N4 --> N5 N5["提取实体和关系"] N6["构建知识图谱"] N5 --> N6 N6["构建知识图谱"] N7["图检索 + 向量检索"] N6 --> N7

优势:

  • 能理解实体之间的关系(“张三是 A 公司的 CEO”)
  • 更好的多跳推理(“A 公司 CEO 的母校是哪里?”)
  • 能回答 “X 和 Y 有什么关系” 这类问题

劣势: 构建图谱成本高,复杂度增加。适合实体关系密集的场景,如企业组织架构、医学知识库。


七、Agentic RAG:Agent 驱动的智能检索#

传统 RAG 的检索策略是固定的:问题→向量化→检索→生成。Agentic RAG(2024-2025 年兴起)把检索过程交给 Agent(智能体)来控制。

Agent 可以自主决定:

  • 是否需要检索(简单常识问题不需要)
  • 检索什么(可能需要改写查询、拆分子问题)
  • 检索结果够不够(不够就再查一轮)
  • 如何组合多次检索的结果
flowchart TD N0["传统 RAG:问题"] N1["固定流程"] N0 --> N1 N1["固定流程"] N2["答案"] N1 --> N2 N3["Agentic RAG:问题"] N4["Agent 规划"] N3 --> N4 N4["Agent 规划"] N5["多轮检索"] N4 --> N5 N5["多轮检索"] N6["验证"] N5 --> N6 N6["验证"] N2["答案"] N6 --> N2

适用于复杂问题,如 “对比 A 公司和 B 公司过去三年的营收增长”,需要多次检索和整合。


八、Contextual Retrieval#

Anthropic 在 2024 年提出 Contextual Retrieval(上下文检索),解决分块后丢失上下文的问题。

传统分块中,一个块可能写着 “该季度收入增长了 20%“,但你不知道说的是哪家公司、哪个季度。

Contextual Retrieval 的方法:在分块时用 LLM 为每个块生成上下文前缀:

原始块:
"该季度收入同比增长 20%,主要得益于新产品线的推出。"
加入上下文后:
"[文档:2024 年 Q3 财报,公司:XX 科技] 该季度收入同比增长 20%……"

配合 BM25 关键词检索和向量检索的混合方案,检索精度大幅提升。


九、多模态 RAG#

传统 RAG 只处理文本。多模态 RAG 扩展到图片、表格、PDF 等格式。

核心挑战: 图片和表格无法直接向量化。

解决方案:

  • 用多模态模型(GPT-4V、Gemini)描述图片内容,再向量化描述文本
  • 用表格解析工具提取结构化数据
  • 使用多模态 Embedding 模型(如 CLIP)直接为图文生成向量

适用于包含大量图表的技术文档、产品手册、研究报告。


图解#

9.1 RAG 优化层次#

┌─────────────────────────────────────────────┐
│ RAG 优化金字塔 │
├─────────────────────────────────────────────┤
│ │
│ Level 5:Agentic RAG │
│ └── Agent 驱动的自适应多轮检索 │
│ │
│ Level 4:GraphRAG │
│ └── 知识图谱增强,理解实体关系 │
│ │
│ Level 3:进阶优化 │
│ └── Query 改写、HyDE、多路召回 │
│ │
│ Level 2:基础优化 │
│ └── 混合检索、重排序、改进分块 │
│ │
│ Level 1:基础 RAG │
│ └── 分块 → 向量化 → 检索 → 生成 │
│ │
└─────────────────────────────────────────────┘

常见问题 FAQ#

Q1:RAG 和微调有什么区别?

A:RAG 是 给模型查资料,微调是 训练模型记住知识。RAG 适合频繁更新的知识,微调适合稳定的领域知识和风格。大多数场景优先用 RAG,不够再考虑微调。

Q2:向量数据库和传统数据库有什么不同?

A:传统数据库按精确条件查询(如 WHERE age > 18)。向量数据库按语义相似度查询(如 找和这段话意思接近的内容)。两者可以结合使用。

Q3:RAG 能完全解决幻觉问题吗?

A:不能完全解决,但能大幅缓解。模型仍然可能在总结检索结果时引入错误。关键场景需要加上来源引用,让用户验证。

Q4:文档更新了怎么办?

A:增量更新。新增文档向量化后加入数据库,删除的文档从数据库移除。多数向量数据库支持增量操作。

Q5:RAG 的延迟会不会很高?

A:检索通常在 50~200 毫秒,加上 LLM 生成时间,总延迟约 1~5 秒。通过缓存常见查询、优化检索索引可以进一步降低。


小结#

RAG 的核心思想是 “先查后答”,给 AI 查阅资料的能力,而不是让它凭记忆回答。

从基础的分块→向量化→检索→生成,到混合检索、重排序、GraphRAG、Agentic RAG,RAG 技术在不断进化。选择哪种方案,取决于你的数据规模、精度要求和预算。

记住一个原则:先用最简单的 RAG 跑通,再逐步优化。


下篇预告#

AI 查完资料能回答问题了,但如果用户说 “帮我查一下天气""帮我订个机票” 呢?AI 能不能真正 “动手做事”?


参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

RAG:让 AI 拥有你的知识库
https://blog.souloss.com/posts/machine-learning/llm-guide/rag/
作者
Souloss
发布于
2025-08-22
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时