你问 AI:“公司的年假政策是什么?”
AI 自信满满地回答:“根据规定,员工入职满一年享有 10 天年假。” 听起来像真的,但你翻开员工手册一看,实际是 5 天。AI 编造了一个 听起来合理但完全错误 的答案。
这就是大模型的知识局限:它不知道你公司的内部文档,也不会告诉你 我不知道。
RAG(Retrieval-Augmented Generation,检索增强生成)解决的就是这个问题:让 AI 在回答之前先查阅资料,就像考试时允许你翻书。
本文要点
- 大模型为什么需要 RAG
- RAG 的完整工作流程
- 文档分块、向量化、检索的核心步骤
- 向量数据库选型
- 基础与进阶优化策略
- GraphRAG、Agentic RAG 等前沿方向
一、为什么需要 RAG
大模型有三大知识局限。
知识截止日期。 GPT-4 的训练数据截止于 2023 年。你问它 2025 年发生的事,它只能猜。
私有知识缺失。 企业内部文档、产品手册、个人笔记,这些信息从未出现在模型的训练数据中。
幻觉问题。 模型不会说 我不知道。当它没有足够信息时,会生成一个 听起来合理但实际错误 的答案。
RAG 的解决思路很简单:不是让模型 记住 所有知识,而是给它 查询 知识的能力。
你可以把它理解成开卷考试。闭卷考试靠记忆,容易记错。开卷考试可以翻书查阅,答案更准确、更可靠。
二、RAG 工作原理
RAG 分为两个阶段:离线构建知识库 和 在线查询回答。
离线阶段:把你的文档切块、转成向量、存入数据库。这一步只做一次(文档更新时增量更新)。
在线阶段:用户提问时,先把问题转成向量,在数据库中检索最相关的文档块,把它们和问题一起交给 LLM,让模型 根据参考资料回答。
三、关键步骤详解
3.1 文档分块
长文档需要切分成小块。分块质量直接决定 RAG 效果。
四种策略
| 策略 | 方式 | 优点 | 缺点 |
|---|---|---|---|
| 固定长度 | 每块 512/1024 token | 简单 | 可能切断语义 |
| 语义分块 | 按段落、章节切分 | 语义完整 | 块大小不均 |
| 滑动窗口 | 块之间有重叠 | 避免信息切断 | 存储量增加 |
| 递归分块 | 先按大单位,再按小单位 | 灵活 | 实现复杂 |
最佳实践:
- 块大小:512~1024 token
- 重叠:10%~20%
- 每块保留标题、来源等元数据
- 分块太大→噪音多;分块太小→语义不完整
3.2 向量化
向量化(Embedding)把文本转换成一串数字(向量),使得语义相似的文本,在向量空间中距离也近。
Embedding 模型选择
| 模型 | 维度 | 特点 | 适用场景 |
|---|---|---|---|
| OpenAI text-embedding-3-small | 1536 | 性价比高 | 通用 |
| OpenAI text-embedding-3-large | 3072 | 质量最高 | 高精度 |
| BGE-M3 | 1024 | 开源、多语言 | 中文、私有部署 |
| Cohere embed-v3 | 1024 | 长文本表现好 | RAG 专用 |
3.3 相似度检索
向量化之后,用余弦相似度找到最相关的文档块。
余弦相似度 = (A · B) / (|A| × |B|)值域:-1 到 1,越大越相似检索 Top-K 最相似的块(通常 K = 3~10),作为 LLM 的参考资料。
3.4 上下文构建与生成
把检索到的文档块和用户问题组合成 Prompt:
系统指令:根据以下参考信息回答问题。 如果参考信息中没有答案,请说 "根据现有信息无法回答"。
参考信息:[块 1 内容][块 2 内容]
问题:公司的年假政策是什么?关键技巧:明确指示模型 根据参考信息回答,并处理 不知道 的情况。
四、向量数据库选型
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Pinecone | 托管服务、零运维 | 快速原型、中小规模 |
| Chroma | 轻量、开源 | 本地开发、小规模 |
| Milvus | 高性能、分布式 | 大规模生产 |
| Weaviate | 语义搜索强 | 复杂查询 |
| Qdrant | Rust 实现、高效 | 性能敏感场景 |
选择建议: 本地实验用 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,利用知识图谱增强检索。
优势:
- 能理解实体之间的关系(“张三是 A 公司的 CEO”)
- 更好的多跳推理(“A 公司 CEO 的母校是哪里?”)
- 能回答 “X 和 Y 有什么关系” 这类问题
劣势: 构建图谱成本高,复杂度增加。适合实体关系密集的场景,如企业组织架构、医学知识库。
七、Agentic RAG:Agent 驱动的智能检索
传统 RAG 的检索策略是固定的:问题→向量化→检索→生成。Agentic RAG(2024-2025 年兴起)把检索过程交给 Agent(智能体)来控制。
Agent 可以自主决定:
- 是否需要检索(简单常识问题不需要)
- 检索什么(可能需要改写查询、拆分子问题)
- 检索结果够不够(不够就再查一轮)
- 如何组合多次检索的结果
适用于复杂问题,如 “对比 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 能不能真正 “动手做事”?
参考资料
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(Lewis et al., 2020)
- GraphRAG: Unlocking LLM discovery on narrative private data(Microsoft, 2024)
- Introducing Contextual Retrieval(Anthropic, 2024)
- LangChain RAG 文档
- LlamaIndex 文档
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






