Browse this library

Chinese source article

1.1.1 · 证据支持与任务决策

从命题支持与错误代价推导澄清、回答和拒答选择, 用制度问答检查权限与版本条件.

View original Markdown ↗

1. 从自然语言要求到可计算契约

任务说明常写成“准确回答并给出来源”, 其中“准确”和“来源”都缺少可执行边界. 可计算契约把它拆成集合、谓词和代价: 哪些文档属于可访问集合, 哪些命题要求证据, 哪种证据构成支持, 各类错误代价多大. 这一步不会消除判断, 但能把判断留在数据与评测中, 而不是藏在提示词里.

契约还要说明系统的开放世界假设. 在封闭语料任务中, 授权快照外的信息一律不作为答案依据; 在开放网络任务中, 系统可以继续搜索, 但要规定允许域名、抓取时间和来源质量. 两类任务使用同一个“搜索不到”文案, 内部含义完全不同.

1.1. 支持关系和损失函数

设回答被拆为命题集合 P(y)={p1,…,pm}P(y)={p_1,\ldots,p_m}, 证据映射为 A(pi)⊆EA(p_i)\subseteq E. 定义 s(pi,A(pi))∈{0,1}s(p_i,A(p_i))\in{0,1} 表示引用集合是否支持命题. 对重要性权重 wiw_i, 加权支持覆盖为 ∑iwisi/∑iwi\sum_i w_i s_i/\sum_i w_i. 这个指标把核心结论和背景描述区分开, 也能直接定位未支持命题.

例子中, 回答包含四个命题: 当前额度、适用人群、生效日期和办理入口, 权重分别为 3、3、2、1. 前三个都有引用, 但适用人群的引用只说“所有正式员工”, 回答却写成“所有员工与外包人员”. 支持标签为 1、0、1、1, 加权覆盖为 (3+0+2+1)/9=2/3(3+0+2+1)/9=2/3. 单看四个命题中三个带引用会得到 75%, 无法暴露高权重条件被错误扩展.

任务损失可以写成 L=λaLanswer+λsLsupport+λrLrefusalL=\lambda_aL_{answer}+\lambda_sL_{support}+\lambda_rL_{refusal}, 权限和删除不放进加权项, 而作为可行域约束. 原因在于加权允许一个维度的收益抵消另一维度损失. 如果越权错误能被更高答案准确率抵消, 优化目标本身就违反访问控制.

支持判定存在标注不确定性. 对复杂政策, 两位标注者可能对一段文字是否充分支持结论意见不同. 数据集应保留分歧并制定裁决规则, 例如要求条款同时覆盖主体、动作和条件. 自动评审器在这套人工口径上校准, 而不是自行定义“看起来相关”.

1.2. 一个端到端契约样例

考虑内部制度问答“上海办公室的外包人员今年可以报销多少居家办公设备费用”. 输入包含地点、雇佣类型和当前年份; 允许来源是人事制度与当地补充条款; 输出要求给出金额、币种、适用条件、生效版本和逐命题引用. 若没有同时覆盖地点与雇佣类型的条款, 系统应拒绝给出金额.

语料中有三份材料: 全国正式员工政策写 800 元, 上海补充条款写 1000 元, 外包管理办法明确设备由供应商承担. 主题相似度可能把前两份排得更高, 但任务契约要求先解析雇佣类型. 正确答案应引用外包管理办法, 说明个人报销额度不适用; 把 1000 元作为答案属于条件错误, 即使地点和年份匹配.

这个样例的召回验收要求外包管理办法进入 top-10, 排序验收要求它进入最终上下文, 生成验收要求“不适用”命题得到对应条款支持. 对抗样本把“外包”换成“正式员工”, 此时上海补充条款成为目标. 一对最小变化样本能检查系统是否真正使用条件, 还是只抓取地点与金额.

故障动作也可复算. 如果上海补充条款已更新但索引快照超过时效上限, 正式员工问题应提示当前版本尚未同步; 外包问题仍可在外包办法有效且独立的条件下回答. 降级按所需证据决定, 不应因为任一来源陈旧就关闭整个系统.

契约样例最终形成测试夹具: 固定用户身份、查询时间、语料版本、参考证据组、可接受答案要点和失败动作. 新的切分器、检索器或模型都在同一夹具上重放. 组件可以持续变化, 任务语义和风险边界保持稳定.

契约还要覆盖查询含糊时的行为. 用户问“额度是多少”却没有给出地区、身份或费用类型, 系统可以从会话中取得已确认字段, 其余字段必须请求补充或返回按条件分列的结果. 任意选择一个最常见地区会提高回答率, 同时制造无法察觉的条件错误. 是否允许追问、允许使用哪些会话字段以及字段多久失效, 都属于任务规则.

来源质量可以写成分级规则, 不宜压缩成一个与相关性相加的分数. 官方现行制度能够支持最终结论, 经审核的内部指南可以帮助解释, 用户论坛只能提供搜索线索. 当低等级来源与高等级来源冲突时, 系统保留差异但不让前者覆盖后者. 对缺少权威来源的开放问题, 输出应明确材料层级并限制结论范围.

多语言任务还涉及版本对齐. 同一政策的中文原文与英文译文发布时间可能不同, 译文也可能省略附件. 契约要规定哪种语言版本具有解释优先级, 是否允许跨语言召回, 引用展示原文还是译文. embedding 能找到跨语言近邻, 无法自行决定法律或业务上的优先版本.

任务发生变化时需要新契约版本. 从“内部知识问答”扩展到“代表用户提交申请”, 增加了动作权限、参数确认和幂等要求, 不能沿用原问答验收表. 契约版本与运行记录绑定, 历史结果仍按当时规则解释, 新规则则使用新的回归样本和发布门槛.

这些约束看似增加前期工作, 实际上减少了无效模型实验. 当失败能够归到字段缺失、来源层级、版本选择或动作权限时, 修复位置是明确的. 只有在任务输入与边界已经稳定、错误仍落在语义匹配或证据使用时, 更换检索模型和训练生成器才成为有针对性的方案.

契约评审可以从最小变化样本开始. 每次只替换地区、日期、身份、否定词或实体中的一个字段, 检查答案和证据是否随条件改变. 如果“正式员工”改成“外包人员”后金额保持不变, 系统可能忽略身份; 如果“去年”改成“今年”后引用版本不变, 时间语义可能没有进入过滤. 这种成对样本数量不大, 却能直接检验关键条件是否真正参与计算.

最终交付的契约由自然语言说明、字段 schema、证据组、代价矩阵和回归样本共同组成. 自然语言供产品与领域人员审阅, schema 约束运行输入, 证据组支撑离线指标, 代价矩阵决定拒答和发布门槛, 回归样本验证具体边界. 五部分相互对应, 可以避免规则只存在于某段提示或某位维护者的经验中.

任务边界与损失

从回答形式反推证据要求

精确事实问题需要直接包含实体、属性、取值与时间的证据; 流程和政策问题还要包含适用范围、例外与生效版本; 比较问题需要各比较对象采用一致口径; 多跳问题要求证据集合能够连接中间实体; 聚合问题则要求完整集合和确定性运算. 这些问题都可以出现在同一个产品里, 但相关性的定义不同.

损失函数也不只是一项答案正确率. 可以把请求损失写成:

L=λaLanswer+λeLevidence+λrLrefusal+λcLcost,L=\lambda_aL_{\text{answer}}+\lambda_eL_{\text{evidence}}+\lambda_rL_{\text{refusal}}+\lambda_cL_{\text{cost}},

其中 LanswerL_{\text{answer}} 衡量答案错误, LevidenceL_{\text{evidence}} 衡量证据遗漏或错误引用, LrefusalL_{\text{refusal}} 区分该答而拒与无据硬答, LcostL_{\text{cost}} 表示延迟和资源. 权限泄漏、已删除内容残留等事件不适合塞进加权和, 应直接作为发布硬门. 权重来自业务损失, 不能从论文排行榜复制.

RAG、参数更新与受控查询

RAG 适合外部知识频繁变化、需要撤回、需要引用或带访问控制的场景. 微调更适合改变格式、行为和任务策略. 微调可以让模型熟悉领域语言, 却不能天然提供逐条来源与可删除知识; RAG 可以更新语料, 却不会自动让模型学会复杂的新任务. 两者可以组合, 组合前仍要分别建立基线.

SQL、图查询和业务 API 负责确定性过滤、聚合、联接与事务状态. 它们返回的结果可以作为 RAG 的结构化证据, 但不应先序列化成大量文本再用相似度猜答案. 规则系统适合权限、合规与可执行动作审批. 生成模型负责解释和组织结果, 不接管这些确定性约束.

语料快照如何成立

身份、版本与位置

逻辑文档身份与内容版本身份要分开. document_id 表示同一份制度或手册, version_id 表示某次具体内容, chunk_id 标记该版本中的检索单元. 每个片段还应携带来源位置、内容哈希、权限、有效时间、解析器版本和切分器版本. 文档更新后可以沿用 document_id, 但 version_id 和受影响片段必须变化.

稳定身份使删除和更正能够传播到派生数据. 一次删除至少影响原文存储、稀疏索引、向量索引、重排缓存、上下文缓存与可回放 trace. 如果系统只从主库删文档, 向量索引仍可能继续返回旧片段. 删除延迟应有单独的服务目标, 并通过带唯一短语的探针验证, 不能只看后台任务显示成功.

切分改变了检索问题

切分不是把长文按固定 token 数截断. 片段要同时满足可区分、证据完整、可定位、更新局部和权限一致. 定义与限制条件, 表头与数据行, 条款与例外若被拆散, 任一片段都不足以支持答案. 把多个权限域合进同一片段则会使授权过滤失去明确边界.

结构优先切分通常先尊重标题、段落、列表、代码块、表格或记录边界, 超长单元再递归拆分. 滑窗能缓解边界遗漏, 代价是存储膨胀和重复召回. 父子检索用小片段匹配, 再扩展到带上下文的父段;扩展范围必须评测, 因为更长上下文也会引入无关条件. 结构化记录应保留主键和字段, 不必先拼成长文本.

把契约编译成执行计划

契约落到运行时可分为四步. 第一步解析问题中的实体、时间、地域和身份条件, 对缺失但会改变答案的字段发起澄清. 第二步据这些条件构造授权语料集合与结构化工具调用. 第三步把输出 schema 分成受保护字段、需要证据的命题和允许模型自由组织的文字. 第四步在生成后逐项验证字段一致、命题支持和引用位置. 四步的中间对象都进入 trace, 因而“回答错了”可以还原为条件遗漏、工具错误、证据不足或生成改写.

例如用户问“去年上海员工的设备额度和申请入口”, 当前会话只给出“员工”而未说明正式员工或外包. 两类身份对应不同制度, 系统不能用出现频率选择默认身份. 澄清后若身份为正式员工, SQL 或配置服务给出年度和地区, 检索器取得对应制度与入口说明, 生成器只负责把金额、条件和链接组成答案. 金额从结构化结果复制并校验, 制度命题连接条款, 入口链接连接有效页面. 任一对象缺失便产生具体降级, 不会退化成统一的模型置信度.

契约版本升级也需要迁移评测. 新规则增加“合同类型”字段时, 旧问题集中没有该字段的样本不能直接按新契约判错. 可以保留旧契约作为历史口径, 为新契约补齐字段并增加最小变化对照. 线上请求绑定生效时的契约版本, 历史回答才能解释当时为何允许某个来源或某种失败动作.

对开放网络检索, 契约还规定来源发现和事实支持的区别. 搜索摘要、聚合页和用户论坛可以提供下一步线索, 核心结论仍需回到可定位原文. 若只能取得二级来源, 系统降低结论强度并标出来源层级. 域名筛选无法单独完成真伪判断, 证据用途还要与任务风险对应. 策略逻辑与相关性排序分离

任务契约中的硬条件可写成谓词 H(u,q,d,t)H(u,q,d,t). 只有 H=1H=1 的文档进入可排序集合, 地区、租户、有效期和撤回状态属于这一层. 相关性模型随后计算 s(q,d)s(q,d). 若改成 s′(q,d)=s(q,d)+λh(d)s'(q,d)=s(q,d)+\lambda h(d), 有限权重总可能被极高相似度抵消, 无法保证越权或过期文档退出候选.

两篇文档构成最小反例: D1 与问题逐字匹配, 分数 100, 但已经撤回; D2 是现行版本, 分数 8. 小于 92 的版本惩罚仍让 D1 在前, 更大的固定惩罚又会在另一种分数尺度上失效. 先按有效期排除 D1, 再排序 D2, 结果不依赖模型尺度. 来源质量、新颖性等软条件才适合进入加权效用.

澄清问题的期望价值

设缺失字段为 zz, 直接回答的期望损失为 LL, 澄清后的损失为 Ez[L∣z]\mathbb E_z[L\mid z], 追问成本为 cc. 只有 L−Ez[L∣z]>cL-\mathbb E_z[L\mid z]>c 才追问. 身份错误概率 30%、代价 10 时损失为 3; 追问把概率降到 2%, 加上成本 0.5 后为 0.7, 净收益 2.3. 只改变格式偏好的字段通常不值得打断用户.

概率不必精确, 可以由历史切片给出区间并对高风险字段使用保守上界. 关键是让追问由任务协议和代价决定, 再用只改变一个字段的成对样本验证, 避免模型凭语言直觉选择默认身份、地区或日期.

查询契约的集合与概率形式

把授权语料记为 C(u,t)\mathcal C(u,t), 满足结构条件的子集为 F(q)={d:H(u,q,d,t)=1}F(q)={d:H(u,q,d,t)=1}. 检索器只在交集 A=C(u,t)∩F(q)\mathcal A=\mathcal C(u,t)\cap F(q) 上定义分布 pη(d∣q,A)p_\eta(d\mid q,\mathcal A). 当 A\mathcal A 为空时, 正确状态是没有可用来源, 不能退回全库检索. 当参考证据在 A\mathcal A 中却未进入 top-k, 才属于模型或索引的召回错误.

回答动作集合可写为 A={answer,clarify,refuse,tool}A={answer,clarify,refuse,tool}. 给定当前观察 oo 与潜在真实条件 zz, 选择 a∗=arg⁡max⁡aEz∣o[U(a,z)]a^*=\arg\max_a\mathbb E_{z\mid o}[U(a,z)]. 效用 UU 同时包含任务收益、误答损失、追问成本、工具成本和延迟, 权限违规则直接把动作移出可行集合. 这种形式解释了为什么低风险问题可以在证据较弱时给出有限回答, 高风险问题需要更高支持或拒答.

数值例子中, 直接回答正确概率 0.75, 正确收益 2, 错误损失 8, 期望效用为 0.75×2−0.25×8=−0.50.75\times2-0.25\times8=-0.5. 澄清成本 0.4, 澄清后正确概率升至 0.95, 效用为 0.95×2−0.05×8−0.4=1.10.95\times2-0.05\times8-0.4=1.1. 拒答效用设为 0, 因而选择澄清. 若用户无法补充字段, 更新后的动作集合再在有限回答与拒答间选择.

一个常见失败是把检索分数当作 p(answerable∣q)p(answerable\mid q). 文档相似度高可能只是同主题旧版本, 多篇低分材料也可能联合给出完整答案. 可回答概率需要结合证据组覆盖、版本与支持判断校准. 训练集中所有问题都有答案时, 该概率还会系统性偏高, 因此校准集必须包含无答案、冲突和权限过滤后为空的样本.

另一个失败来自条件解析过早固化. “上季度”依赖当前日期和财务日历, “本地员工”依赖组织定义, 解析器若直接映射自然季度和办公地点, 后续检索再准确也回答了错误问题. 契约保存原表达、解析值、解析依据和时区/日历版本, 使条件解释能够复核.

契约的概率还需区分模型不确定与事实不确定. 模型对同一证据多次生成不稳定, 属于生成不确定; 两个有效权威来源给出不同结论, 属于事实冲突; 授权语料没有覆盖问题, 属于信息缺失. 三者可能都表现为低置信, 动作却不同: 前者可采用确定解码或验证, 冲突应呈现差异, 信息缺失应检索更多来源或拒答.

验收集为三种情况分别设计最小样本. 生成不确定样本固定证据重复运行, 观察命题和引用方差; 冲突样本固定两个来源及其有效范围, 检查回答是否保留条件; 信息缺失样本确保语料快照内确实没有充分证据, 检查系统是否停止编造. 统一阈值无法替代这三个实验.

契约也规定部分回答边界. 一个问题含三个子目标, 两个有充分证据、一个缺失时, 可以回答前两个并明确第三个缺口, 前提是子目标彼此独立. 若缺失条件会改变全部结论, 便不能拆开回答. 独立性由任务结构决定, 不是按检索到几段文字决定.

这套规则随契约版本进入回归集, 保证澄清、部分回答和拒答在模型升级后仍保持相同边界.

运行记录保留判定依据.