静态 RAG 假定一次查询足以取得证据, 固定流水线适合多数直接问答. 当问题需要分解、多跳组合、跨源验证或根据中间结果继续搜索时, 控制流成为主要对象. 高级方法的差异不只在模型名称, 更在何时检索、如何修改查询、怎样判断停止以及训练信号作用于哪个动作.
控制流的共同状态
一次迭代包含当前问题、已有证据、待解决子目标、检索动作和停止判断. 每轮新增证据都应保留来源和版本. 循环必须限制轮数、token、延迟与工具范围, 并检测重复查询.
查询改写可以补全实体、生成假设答案或拆成子问题. 改写提高表达能力, 也可能漂移. 原始问题与每次改写需要并存, 候选注明由哪条查询产生.
自适应检索
路由器判断是否需要检索、选择哪类索引或工具. 多跳控制器根据中间证据生成下一步查询. Self-RAG 一类方法把检索与自我评议动作纳入生成过程, 试图让模型学习何时取得材料以及如何检查输出.
自适应方法改变的是检索控制策略, 没有取消证据链的版本、权限和评测要求. 更多轮次会放大错误与成本, 因而必须与固定流水线比较.
面向检索的训练
检索器训练需要问题—正例和有区分力的负例. 生成器训练则让模型在有用、无用、冲突或缺失证据下采取正确动作. RAFT 通过领域文档与干扰文档构造训练样本, 强化从上下文抽取并组织答案的能力.
训练数据要避免把测试答案、未来版本或越权文档带入模型. 离线构造的引用和推理步骤也需验证, 否则模型会学习合成错误.
复杂度门槛
只有当误差分析显示单次召回无法覆盖、查询需要显式分解或模型不会正确使用证据时, 才引入循环或训练. 评测同时报告质量、轮数、成本、延迟和失败恢复.
查询改写、多跳与自适应检索讨论推理时控制, 检索器与生成器训练讨论学习信号和数据构造.
检索器已经找到正确文档, 回答仍可能错. 模型可能忽略限定条件, 混合两个版本, 使用参数记忆补出证据中没有的数字, 或者给一条相关但不支持结论的引用. 因此生成阶段不能只要求「根据上下文回答」. 输入需要成为可定位的证据包, 输出需要拆成可核验命题, 无法得到充分支持时还要进入拒答或澄清分支.
设最终证据集合为 , 回答为 , 将回答拆成原子命题 . 引用映射 指向支持该命题的证据. 生成质量至少包含三层: 回答是否完成用户任务, 每个事实命题是否被证据蕴含, 重要命题是否都有引用. 「有引用」只说明输出包含链接, 不能推出引用正确或覆盖完整.
证据化生成
证据包包含请求内 ID、来源身份、版本、位置、有效时间和正文. 请求内 ID 让模型输出稳定引用标记, 服务端再将标记解析为真实链接. 由服务端提供位置可以避免模型编造页码和 URL. 输入前还应做确定性检查: 权限是否有效, 文档是否仍在当前快照, 内容是否超过长度限制, 同一来源是否重复.
上下文顺序和格式会影响模型使用证据. 对长文档, 可以先抽取与查询有关的最小支持区间, 再保留邻接条件;对表格与结构化查询, 要保留字段、单位、时间和查询快照. 自动摘要只能作为派生表示, 关键结论仍应回到原始证据. 若多个当前来源冲突, 输入应保留来源差异, 输出说明冲突并降低确定性.
引用与拒答
引用有效性检查标记能否解析到当前证据;引用正确性检查证据是否支持相邻命题;引用覆盖检查重要外部事实是否都有支持. 可以构造命题—证据矩阵 , 其中 表示证据 支持命题 . 加权覆盖率为:
表示命题重要性. 数字、结论和行动建议可以赋更高权重. 支持关系可以由人工、NLI 或 LLM judge 判断, 自动评估器自身也要在人工样本上校准.
拒答至少区分证据不存在、证据不足、来源冲突、权限不足和请求不清. 单一相似度阈值无法承担这些原因, 因为稠密相似度不是正确概率. 评测集同时包含可答与不可答问题, 阈值通过风险—覆盖曲线选择. 只在不可答集提高拒答率, 可能让系统对正常问题也过度保守.
自适应检索与训练
固定检索每次都取相同数量片段, 对纯写作和简单常识浪费成本, 对多跳问题又可能不够. Self-RAG 训练模型生成 reflection tokens, 控制是否检索并评价证据相关性、回答支持度和效用. 推理时这些信号参与路径选择. 它把检索调用变成模型决策, 同时增加训练数据构造和特殊 token 监督.
RAFT 在训练样本中提供问题、oracle 文档和干扰文档, 让模型学习识别有用证据并生成带依据的回答. 训练时见过检索噪声, 可以改善模型面对候选集合时的使用方式. 它不替代线上召回: oracle 从未进入候选时, 生成器没有依据可用. 训练集还要避免答案直接泄漏在模板位置.
检索器训练常用对比目标. 对查询 , 正文档 与负样本集合 , 一种损失为:
难负样本来自当前检索器高排但不支持答案的文档. 同实体不同版本、数值接近和否定相反比随机负样本更能训练决策边界. 在线反馈不能把点击直接当相关性, 位置偏差、界面和既有排序都会影响点击.
分层评测
语料层测解析成功率、索引新鲜度、删除残留和权限;检索层测 Recall@k、MRR、nDCG 与集合覆盖;上下文层测证据覆盖、冗余和 token;生成层测答案正确、命题支持、引用正确与拒答;系统层测延迟、成本、错误率和可用性. 每次变更先确定作用层, 再选择主指标和保护指标.
RAGAS 等框架提出 context relevance、faithfulness 和 answer relevance 等自动指标, 可以缩短迭代周期. 自动 judge 对提示、模型和领域敏感, 不能替代人工校准集. BEIR 适合测试检索器跨数据集泛化, 私有业务仍需自己的查询分布、权限和时效样本. KILT 把知识密集任务与来源 provenance 联合评测, 提供了答案与证据共同验收的思路.
线上运行
请求 trace 应保存查询及改写、语料与索引版本、各路候选、融合重排、最终上下文、模型与提示版本、输出、引用和拒答原因. 敏感正文可以保存受控快照引用而非明文. 一次错误发生后, trace 要能回答证据在哪一层消失或被误用.
发布采用硬门、回归门与预算门. 权限泄漏和删除残留是硬门;检索、引用与拒答不能低于回归阈值;P95/P99 延迟、token 和调用成本不能超过预算. 回滚对象包括语料快照、索引、embedding、重排器、生成模型、提示和缓存. 只回滚一个组件可能无法恢复旧行为.
间接提示注入是 RAG 特有的重要风险之一: 检索文档可能包含要求模型泄露信息或调用工具的指令. 外部文档作为数据处理, 不获得系统指令权限;生成与工具执行分离, 动作继续经过 schema、权限和审批. 语料投毒、排序操纵与恶意引用也需要独立测试.
阅读落点
证据化生成、自适应训练与评测 将命题支持、Self-RAG、RAFT 和分层发布连成完整闭环. 后续扩展时, 引用验证、拒答校准可以形成生成路线下的叶子;Self-RAG、CRAG、RAFT 等方法进入训练与控制路线;评测与运维保留独立路线. 三者共享证据身份和请求 trace, 但目标函数不同.
判断新方法位置时, 看它主要改变哪一个变量. 改检索时机属于控制策略, 改检索器损失属于检索训练, 改证据判别属于选择或 verifier, 改引用解码属于生成约束, 改线上反馈闭环属于自适应. 这种归类能容纳新论文, 不需要按新缩写继续增加顶级章节.
三条路线怎样衔接
生成与引用路线接收已经选好的证据包, 输出回答、命题与引用映射. 训练与自适应路线可以改变生成器怎样使用证据, 也可以让控制器决定是否继续检索. 评测与运维路线保存每一步状态, 为训练数据和发布判断提供反馈. 三条路线共享语料、索引和请求 trace 这些线上权威状态.
一次失败若来自证据缺失, 训练生成器并不能补回文档;若证据完整而回答误读, 扩大 top-k 反而可能增加噪声;若离线指标正常但线上长尾超时, 应检查调用路径与容量. 按层归因让反馈进入正确数据集, 避免所有错误都被送进一次微调.
自适应控制增加分支后, 每条路径都要可回放. 系统记录触发检索的信号、候选评价、继续或停止原因以及预算. 固定候选可比较控制器, 固定控制动作可比较检索器, 固定证据可比较生成器. 这种实验分解与静态 RAG 使用同一套对象.