Agent 开发学习站
Agent 开发›核心›核心

RAG:检索增强生成

核心核心

一句话定义

RAG(Retrieval-Augmented Generation)是在生成前先从外部知识库检索相关内容、把检索结果注入上下文再让模型作答的架构——用"查到的"替代"猜的",专治知识过期与私有数据幻觉。

为什么重要

kp-002 的两个先天缺陷——知识停在训练截止日、不知道私有数据——RAG 一并解决:模型不需要"知道"全部知识,只需要会"查"。它是企业落地最广的 LLM 架构(内部问答、文档助手、合规审查),也是 Agent 的标准器官:Agent 遇到"这个产品 2026 年的新保修政策是什么"时,正确动作是检索知识库(一个工具),而不是靠参数记忆作答。在 Agent 语境下,RAG 常常不是管线,而是"search_knowledge_base" 这个工具。

前置知识

kp-003(上下文注入的位置效应)、向量运算的基本直觉。

核心概念

标准管线(两阶段)

【离线:建索引】
文档 → 切块(chunk) → 嵌入(embedding) → 向量库
【在线:检索生成】
查询 → 嵌入 → 相似度检索 top-k → (重排 rerank)→ 注入上下文 → 生成

五个核心组件的设计要点

  1. 切块(Chunking):常用 256-1024 token,重叠 10-20% 防止语义被拦腰斩断;按结构切(标题/段落/条款)优于机械定长——检索质量的上限在切块就定了
  2. 嵌入(Embedding):文本 → 高维向量,语义相近 → 向量夹角小。嵌入模型决定"什么叫相关",选型后全部重嵌(换模型 = 换坐标系)
  3. 向量检索:近似最近邻(ANN)从百万向量中毫秒级取 top-k;常配元数据过滤(只搜 2026 年的文档、只搜某产品线)——过滤条件来自 Agent 的结构化输出(kp-005)
  4. 重排(Rerank):用交叉编码器对 top-50 精排出 top-5,检索准确率的性价比之王
  5. 注入:标注来源 + 放对位置(kp-003 的头尾效应)+ 引用编号让模型回答时能带出处(可信度与可审计性,kp-026)

Agent 中的两种用法

  • 作为工具(agentic RAG):Agent 自主决定何时查、查什么、查几轮——查询可以基于前一轮检索结果细化("先查保修政策,发现分地区,再查华东区细则")
  • 作为前置:每次请求固定检索注入(传统管线)——便宜可预测,适合 FAQ 型场景

原理与机制

为什么"检索了再答"能压幻觉?因为生成被条件化到了含有真实文档的上下文上:模型的分布从"参数记忆中关于保修政策的所有模糊印象"收缩为"对眼前这几段文本的阅读理解"。注意条件成立的前提——检索命中了正确的文档;检索失败时 RAG 反而更危险:模型会把不相关文档硬扯进答案(被迫营业),或依然靠记忆作答却带上假引用。

一个常被忽视的机制点:嵌入的"语义相似"≠"答案相关"。"退货政策"与"我想退钱"语义相近但表述迥异——这是检索 miss 的主因,解法是查询改写(让 Agent/小模型先把口语问题改写成检索友好表述)与混合检索(向量 + 关键词 BM25,抓专有名词与型号这类"字面匹配"更强的场景)。

直观类比

开卷考试 vs 闭卷考试:闭卷(纯模型)靠背,背过时的、没背过的都只能编;开卷(RAG)先翻书——但翻书能力决定一切:目录编得好(切块)、会翻到正确章节(检索)、翻到后再精读排序(重排)。最怕的是翻错页还硬抄(检索 miss 的被迫营业)。

实例与案例

企业知识库问答的失败与修复(真实常见链路):

症状根因修复
问"Q3 营销预算"返回 HR 文档全库无此文档;检索硬凑加"无相关结果"阈值的兜底提示:"知识库未覆盖,建议问财务系统"
型号"XR-500"搜不到嵌入对字母数字弱混合检索(BM25 补位)
答案拼接三份旧政策,互相矛盾未按版本过滤元数据过滤 effective_date <= today,取最新
回答不注出处注入时没给编号片段带 [1][2] 编号 + 提示要求引用

常见误区

  • 误区一:"RAG 已死,长上下文直接塞"。全量塞入的成本随库线性增长且迷失中间(kp-003);RAG 是"按需取最相关 0.1%",两者是互补不是替代(当代组合:文件结构给长上下文,细节走检索)。
  • 误区二:只调 top-k 不做重排。k 大注水、k 小漏检;rerank 是中间最优解。
  • 误区三:忽视切块质量。在烂索引上换十个检索模型都不如在好切块上用一个。
  • 误区四:检索结果无脑全量注入。top-20 每段 2K token = 40K 注水——重排后取 3-5 段、按相关度截断。

自测题

  1. RAG 压幻觉的机制前提是什么?该前提破坏时会发生什么?
  2. 为什么需要混合检索与重排?
  3. agentic RAG 与前置 RAG 的取舍?

(参考答案:1. 检索命中正确文档;miss 时模型被迫在不相关文本上编造或带假引用;2. 嵌入对字面/型号弱(BM25 补)、向量粗排召回高但排序糙(rerank 精排);3. Agent 自主多轮检索灵活但贵,前置固定注入便宜可预测。)

与其他知识点的关系

  • 记忆的检索端 → kp-015;注入位置 → kp-003
  • 查询改写用结构化输出 → kp-005;检索工具的设计 → kp-010

延伸阅读

  • Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP(2020,命名出处)
  • Anthropic, RAG 常见失败模式 官方指南(citation 与 contextual retrieval 章节)