模型实际使用的是上下文包, 不是检索器的候选表. 片段顺序、来源标记、相邻内容、冲突版本和提示边界都会改变输出. 因此本章把证据集合 、回答命题与引用映射 放在同一条数据流中.
上下文包的结构
每段证据使用稳定标识, 附带标题、来源、版本、日期和位置. 指令与证据采用清晰边界, 并明确文档中的命令性文字只是材料. 相邻片段可扩展语义, 但要去除重复并遵守预算.
位置偏差使模型更容易使用开头或结尾材料. 排序应综合重要性和互补性, 并用不同顺序的重放实验检查结果是否过度依赖位置. 更长窗口不能替代选择, 因为噪声和冲突也会随之增加.
回答与引用
生成可以先规划需要回答的子问题, 再依据证据写出命题并附引用. 引用质量分为可解析性、蕴含关系与覆盖率. 链接能打开只说明可解析; 证据主题相近仍可能不支持具体数字或条件.
引用是回答命题与源位置之间的映射, 不是文末的相关资料列表. 重要命题都需要可定位支持, 同一引用也可以支持多个紧邻命题.
拒答与冲突
证据不足时, 模型应限制结论并说明缺失的信息类型. 多来源冲突时, 保留各自时间和适用范围, 不用语言流畅度代替裁决. 置信判断可结合检索覆盖、重排分数、验证模型和任务规则, 但需要校准.
本章的上下文编排与长上下文处理模型看到什么, 命题、引用与拒答处理输出怎样得到证据约束.
检索管线返回按相关性排序的候选, 生成模型接收的是一个受 token 预算限制的上下文. 两者之间还缺少集合选择: 哪些子问题已经有证据, 哪些候选只是重复, 是否需要从命中片段扩展到父段, 冲突版本怎样处理, 最终顺序是否让模型看见限定条件. 上下文构造决定候选中的信息以什么形态进入生成器.
把候选集合记为 , 最终证据集合记为 , 预算为 . 选择器 的输出不仅有正文, 还带来源身份、版本、位置和选择原因. 这使上下文可以独立回放, 也能判断正确证据是检索阶段未找到, 还是选择阶段被删掉.
集合目标
单个相关分数衡量候选与查询的关系, 集合目标还要衡量新增覆盖和冗余. 比较问题需要每个对象, 多跳问题需要每一跳, 政策问题需要主规则、例外和生效时间. 可以将查询分解为证据槽位, 选择片段后更新未覆盖集合.
重复切分不能只按向量相似度去重. 两个片段文字相近, 可能来自不同版本或不同权威来源;文字不同, 也可能重复支持同一命题. 来源区间、逻辑身份和支持功能一起参与去重, 才不会因滑窗数量占满上下文.
扩展与压缩
父子检索用小片段匹配, 再带回父段或邻接区间. 扩展补足标题和限定条件, 同时增加噪声. 表格需要表头、单位和相关行, 代码需要签名与必要依赖, 对话需要说话人和有效轮次. 不同数据类型使用不同扩展规则.
上下文压缩可以抽取句子或生成摘要. 抽取保留原文位置, 摘要减少 token 但可能丢失否定和条件. 派生内容保留回链, 关键命题继续引用原始证据. 压缩实验报告 token、覆盖和支持率, 不能只报告长度下降.
顺序与预算
证据预算只是总上下文的一部分, 还要给指令、历史、工具结果和输出留空间. 以片段条数限制会因长度差异导致实际 token 漂移, 因此选择器直接在 token 预算下工作. 超预算时记录被移除候选和原因.
长上下文存在位置利用差异. 顺序策略要在目标模型上比较, 包括相关性顺序、槽位分组和关键证据两端放置. 更长窗口扩大容量, 不会自动消除无关内容干扰. 减少重复、明确证据边界和任务槽位通常比盲目填满窗口可靠.
与相邻路线的接口
证据选择与上下文构造 展开集合目标、父子扩展、压缩和长上下文状态管理. 上游检索管线提供候选、来源身份和分数, 下游生成路线接收证据包并建立命题—引用映射. 三段分别使用 Recall、集合覆盖和命题支持率验收.
后续加入 GraphRAG 社区摘要、多模态证据或层级检索时, 若主要改变候选怎样组成最终上下文, 就进入这条路线. 改变候选产生方式的工作仍留在检索管线, 改变回答约束的工作进入生成与引用.
证据槽位怎样建立
精确事实可以用实体、属性、取值和时间四个槽位;比较问题为每个对象复制同一组属性;流程问题包含适用范围、步骤、例外和生效版本;多跳问题记录中间实体与连接关系. 槽位来自任务 schema 或查询分解, 选择器用它计算新增覆盖. 查询分解由模型产生时, 原查询仍保留用于验证, 防止分解漏掉否定和限定词.
槽位不必都由文本填充. 时间和权限可来自元数据, 数值聚合可来自数据库, 文本片段负责解释规则. 最终证据集合保留不同来源类型, 生成器看到的是统一证据包. 结构化结果带查询和快照, 使数值能够复算.
证据集合标签也按槽位构造. 标注者不仅选相关片段, 还指出片段支持哪个条件. 这样可以区分「候选都相关但少一项」和「已有完整证据却排序较低」. 对没有唯一最小集合的问题, 允许记录多个等价集合.
图与层级语料
GraphRAG 一类方法先从文档抽取实体关系并形成社区摘要, 查询可以在局部实体和全局主题之间选择. 图节点、边与摘要都是派生证据, 必须回链到原始文本. 抽取错误会改变图结构, 所以实体合并、关系置信和摘要版本进入 trace.
层级检索先定位文档或章节, 再在局部搜索片段. 它减少全库竞争, 也可能因第一层路由错误彻底漏掉证据. 评测分别报告文档级和片段级召回. 父节点得分高不代表所有子节点相关, 展开策略需要自己的预算.
图、层级和父子检索都改变上下文形成过程, 共同目标仍是预算内证据覆盖. 只有把中间选择保存下来, 才能判断收益来自更好路由还是更长摘要.
冲突、重复与来源多样性
同一事实被多个转载来源重复, 不应被视作独立证据. 逻辑来源和引用链可以帮助聚类, 选择器优先保留原始或权威来源. 不同机构独立发布的一致内容则能增加来源多样性, 但多样性本身不证明真实.
冲突可能来自版本差异、适用范围不同或真实争议. 选择器先用元数据消除过期与不适用版本, 剩余冲突共同进入上下文. 生成器说明各来源条件, 不擅自合并数值. 高风险请求可以转人工复核.
重复率、来源覆盖和冲突保留率都可以独立测量. 只优化相似度常会让同一来源的近重复占满窗口, 表面相关却缺少完整视角.
验收接口
上下文选择每次输出证据集合、槽位覆盖、token 统计和删选原因. 回归集固定候选, 使选择器能够独立比较. 端到端实验再接生成器, 检查更完整证据是否真正提高命题支持.
上线监控关注上下文为空、关键槽位缺失、重复率突增、压缩失败和实际输入截断. 这些事件与检索少于 、生成拒答分开记录. 一个请求可能同时命中多个事件, trace 保留因果顺序.
回滚对象包括槽位 schema、去重规则、扩展范围、压缩模型、顺序和 tokenizer 预算. 任何一项变化都可能改变模型输入, 因而需要与回答版本一起保存.
参考文献
- Liu et al., Lost in the Middle, 2024.
- Xu et al., RECOMP, 2023.
- Edge et al., From Local to Global: A Graph RAG Approach, 2024.
选择器的离线回放固定候选与预算, 线上影子运行再加入真实长度、权限和缓存. 两阶段结果一致后再切换流量. 对关键查询保留证据集合快照, 新版本若少掉必需槽位则阻止发布.
这组快照也用于事故复现和版本回滚后的差异检查.
检索结束后, 系统已经拥有候选, 生成器却仍可能忽略证据、混用版本或补出来源中不存在的细节. 这一阶段处理一组带身份和位置的证据包. 生成器需要在有限上下文中完成任务, 同时维持回答命题与来源之间的支持关系. 回答正确、依据充分和引用完整是三个可以分别失败的条件.
设证据集合为 , 回答拆成命题 . 支持关系 表示证据 是否支持命题 . 引用系统要把每个外部事实命题连接到一个或多个证据, 还要保留证据的稳定身份、版本和原文位置. 只有 URL 而没有版本与位置, 无法复现回答时模型究竟看到了什么.
证据包与上下文协议
证据包至少含请求内 ID、逻辑来源 ID、版本、标题、位置、正文、有效时间和必要结构字段. 请求内 ID 由服务端分配, 模型只输出该 ID, 随后由确定性代码解析为真实链接. 这样可以避免模型编造链接或页码. 表格证据还需保留字段名、单位和主键, 数据库结果需要查询与快照.
上下文协议要区分指令和数据. 被检索文档即使包含「忽略此前要求」, 也只是一段证据内容, 不获得系统指令权限. 文档引用可以讨论这句话, 却不能据此调用工具或泄露其他上下文. 工具执行继续通过 schema、权限和审批控制.
支持关系与引用质量
引用有效性检查标记能否解析;引用正确性判断所指证据是否支持相邻命题;引用覆盖判断重要命题是否都获得支持. 可以按命题重要性 计算覆盖:
数字、结论和行动建议通常权重更高. 一个证据可能只支持命题的一部分, 多跳命题则需要证据集合共同成立. 自动 judge 要在人工校准集上测一致性, 因为文本蕴含、常识补全和来源真实性容易被混为一项.
拒答与澄清
拒答原因包括语料没有证据、召回未覆盖、证据不完整、当前来源冲突、调用者无权访问和问题缺少参数. 每种原因对应不同后续动作. 语料缺失需要补数据, 检索遗漏需要重查, 权限不足不能暴露文档存在性, 问题含糊则请求澄清.
阈值在可答与不可答混合数据上选择. 评测同时报告正确拒答、错误拒答、无据硬答和可答覆盖. 单一 embedding 相似度不是正确概率, 无法独立决定是否回答. 高风险任务还可以要求关键命题由两类独立来源支持.
具体页面
证据包、引用与拒答 从上下文构造进入逐命题验证, 给出可复算支持矩阵、拒答混淆矩阵和上线检查. 这条路线与检索章的上下文选择相接: 前者决定模型看见哪组证据, 本路线判断模型怎样使用并引用它们.
后续若加入受约束解码、引用 token、NLI verifier 或长文本引用方法, 都应放在这条路线下. 分类依据是它们改变回答和来源之间的映射, 而不是采用了哪一种基础模型.
生成前的确定性检查
证据进入模型前, 服务端检查来源仍属于当前快照、调用者权限有效、引用位置可解析、内容长度和数据类型符合协议. 这些判断不需要语言模型. 检查失败的证据从集合移除并记录原因, 若剩余覆盖不足则回到补检索或拒答.
结构化结果还要验证查询、字段类型和单位. 对时间敏感文档, 请求时间与生效区间共同决定可用性. 对 OCR 内容, 低置信区域可以要求原页复核. 确定性检查缩小生成模型需要承担的判断范围.
证据包使用稳定边界和请求内 ID, 不把检索分数写成来源正文的一部分. 模型可以知道来源标题和时间, 但不能把排序分数解释成事实概率. 同一文档的多个片段保留共同身份, 引用展示时可合并相邻区间.
回答约束的三个层次
第一层是内容约束:外部事实只能来自证据, 推导要标明条件. 第二层是结构约束:回答中的引用 ID 必须来自输入集合, 输出符合可解析 schema. 第三层是决策约束:证据不足、冲突或越权时进入对应拒答. 三层分别由 prompt、受约束输出和服务端验证承担.
生成后的 verifier 将回答拆成命题, 检查支持关系. 若只有局部问题, 可以删除无支持句或降低措辞;若关键结论缺证据, 触发补检索;若引用 ID 无效, 直接拒绝发布. 修复动作也记录进 trace, 避免只保存最终文本.
流式生成会使验证更复杂. 可以先生成结构化草稿并验证后再流式展示, 或按句缓存直到引用通过. 高风险系统不应把尚未验证的事实 token 直接发送给用户. 低风险场景可选择事后标记, 但要明确风险.
引用粒度与阅读体验
句级引用容易阅读, 复合句内部可能包含多个来源. 命题级映射更准确, 展示层可以合并相邻标记. 长段落只放一个引用会使覆盖难以判断, 每句话都堆多个标记则影响阅读. 生成协议负责精确映射, 界面负责适度合并.
引用打开后应定位支持区间. 用户核验需要看到标题、版本、上下文和原始排版, 不能只显示切分后的孤立字符串. 来源更新后, 当前版本与回答时版本同时标识, 让读者理解差异.
无公开链接的内部来源仍可使用受控引用 ID. 点击时再次执行权限判断, 不能因为答案中出现过就永久获得访问. 若权限后来撤销, 引用不再展示正文, 审计记录按保留策略处理.
拒答策略的比较口径
可答集合上测错误拒答, 不可答集合上测无据回答与正确拒答. 冲突、权限和含糊问题单独切片, 因为它们需要不同响应. 一个阈值在总平均上最优, 可能在高风险切片上不可接受.
部分回答允许系统覆盖已证实槽位, 同时保留未知项. 评测既看已答命题精确率, 也看任务槽位覆盖. 这种协议适合比较和调查问题, 比整句拒答提供更多可用信息.
拒答文案不泄露隐藏文档存在, 也不把内部相似度展示成置信概率. 可以说明当前可访问材料不足, 并请求时间、实体或范围等必要参数. 澄清后形成新查询, 原请求和补充条件一起进入 trace.
生成路线的回归 生成路线的回归采用固定证据包, 分别比较 prompt、结构化输出、引用解码和 verifier. 这样可以排除检索变化, 判断约束是否真的减少无依据内容. 错误按遗漏证据、误读限定、混合来源、参数记忆补全、引用错位和过度拒答切片.
参考文献
- Lewis et al., RAG, 2020.
- Petroni et al., KILT, 2021.
- Gao et al., Enabling Large Language Models to Generate Text with Citations, 2023.
- Asai et al., Self-RAG, 2023.