RAG 检索增强生成
RAG 检索增强生成:构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答,以架构、轨迹与故障重放完成工程验收。
学习目标
- 能解释“RAG 检索增强生成”如何构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答
- 能区分RAG、embedding、chunk、召回、重排,并标出控制权、状态和副作用边界
- 能冻结输入与版本,沿以下证据定位首个分叉:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言
- 能注入“检索命中高相似但过期片段,生成器混入参数记忆并伪造了不存在的引用”,完成阻断、恢复、复位和同输入重放
来源、课程身份与适用边界
“RAG 检索增强生成”以Anthropic 公开全文《Building effective agents》建立工程总纲,并用RAG 原始论文核对本章机制。
这不是一本名为《AI Agent 开发实战》的官方出版物,也不存在官方十四章目录。平台把公开工程文章、官方开发文档和原始论文重组为 14 个工程单元;下列 112 个节点是站内课程地图。正文、代码、图表、实验与练习均为独立教学重写,模型、API、协议或安全边界变化时必须重新验证。
本单元的八个工程坐标
- RAG 检索增强生成:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 1 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 闭卷凭记忆瞎说,不如开卷先翻资料再答:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 2 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 为什么要 RAG:把「闭卷」改成「开卷」:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 3 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- Embedding 与向量:把「意思」变成一串数字:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 4 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- Chunk 切分:长文档先切小块,再各自向量化:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 5 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 检索 + 拼接生成:找到相关段落,拼进提示让模型照着答:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 6 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手一:拖一拖块大小和重叠,看文档怎么被切:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 7 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手二:换个查询,看检索按「意思」命中哪几个:这是“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的第 8 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
术语与运行合同
↡RAG:检索外部语料并将相关证据提供给生成模型的方法;在“RAG 检索增强生成”中按以下证据核对:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。、↡embedding:把文本映射为可比较的向量表示;在“RAG 检索增强生成”中按以下证据核对:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。、↡chunk:从原文切出的可索引片段;在“RAG 检索增强生成”中按以下证据核对:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。、↡召回:从索引取得候选相关片段的过程;在“RAG 检索增强生成”中按以下证据核对:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。、↡重排:用更精细模型或规则重新排序候选;在“RAG 检索增强生成”中按以下证据核对:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。。
本页不变量是:回答中的可验证事实必须由当前授权语料支持,引用能定位到稳定文档版本和片段。任何“成功”结论都要保存文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言;模型自评、最终措辞和单次 demo 都不能替代环境事实。
工程机制与反证实验
切块决定可检索单位
块过小丢上下文,过大稀释相关性并浪费 token;参数应按文档结构评测。
动手验证:改变块大小和重叠,比较证据完整率与冗余。
向量召回不是事实判定
相似度高的片段可能过期、越权或答非所问,需要过滤和重排。
动手验证:混入高相似旧版本,确认版本过滤先于生成。
检索和生成分开测
答案错可能来自没召回,也可能来自有证据却没使用,单一总分无法定位。
动手验证:分别计算 recall@k、引用精度和答案正确率。
引用必须可定位
展示文档名不够,应保存版本、片段和字符或段落范围。
动手验证:更新文档后验证旧回答仍能指向历史版本。
从架构到故障重放
1. 架构复杂度实验
在“RAG 检索增强生成”中切换简单基线、受控工作流和自主循环,先判断“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”是否真的需要更高自主性,再比较延迟、成本、可观测性与风险。
Architecture decision laboratory
RAG 检索增强生成
构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答
不变量:回答中的可验证事实必须由当前授权语料支持,引用能定位到稳定文档版本和片段
最小可运行切片
const queryVector = await embed(query);
const candidates = await index.search(queryVector, { tenantId, k: 20 });
const filtered = candidates.filter(isCurrentAndAuthorized);
const passages = await rerank(query, filtered, 5);
const answer = await generateGrounded(query, passages);
assertEveryClaimHasCitation(answer, passages);
return answer;切片只表达“构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答”的核心合同。生产实现还要补齐持久化、超时、密钥隔离、结构化日志、幂等和批量评测;如果不能重新取得文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言,代码跑通也不能证明机制正确。
练习与答案
练习
问题 1:最小证明。 怎样用正常、边界和单故障三类样本证明“回答中的可验证事实必须由当前授权语料支持,引用能定位到稳定文档版本和片段”?
问题 2:节点覆盖。 RAG 检索增强生成、闭卷凭记忆瞎说,不如开卷先翻资料再答、为什么要 RAG:把「闭卷」改成「开卷」、Embedding 与向量:把「意思」变成一串数字、Chunk 切分:长文档先切小块,再各自向量化、检索 + 拼接生成:找到相关段落,拼进提示让模型照着答、动手一:拖一拖块大小和重叠,看文档怎么被切、动手二:换个查询,看检索按「意思」命中哪几个如何从目录词变成工程证据?
问题 3:恢复验收。 怎样证明“检索命中高相似但过期片段,生成器混入参数记忆并伪造了不存在的引用”已经修复?
本章回顾
- “RAG 检索增强生成”解决的是构建解析、切块、索引、检索、重排、生成和引用闭环,并分开评估检索与回答。
- 核心不变量是回答中的可验证事实必须由当前授权语料支持,引用能定位到稳定文档版本和片段。
- 首要反例是检索命中高相似但过期片段,生成器混入参数记忆并伪造了不存在的引用。
- 最小证据包包含文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- RAG
检索外部语料并将相关证据提供给生成模型的方法。在“RAG 检索增强生成”中必须能按以下证据重新定位:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。
- embedding
把文本映射为可比较的向量表示。在“RAG 检索增强生成”中必须能按以下证据重新定位:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。
- chunk
从原文切出的可索引片段。在“RAG 检索增强生成”中必须能按以下证据重新定位:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。
- 召回
从索引取得候选相关片段的过程。在“RAG 检索增强生成”中必须能按以下证据重新定位:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。
- 重排
用更精细模型或规则重新排序候选。在“RAG 检索增强生成”中必须能按以下证据重新定位:文档版本、chunk_id、切块参数、查询、召回集、重排分数、引用、答案与事实断言。