Selection-Only Agent Output 与 Deterministic Rendering
把高风险 Agent 的模型权限收缩为“选择/分类结构化证据”,由应用根据可信证据确定性生成最终可持久化文本,从结构上消除有正确 provenance 但自由文本仍扩张 claim 的风险。
[!info] related notes
- 所属 MOC: agent-evals-moc
- 前置概念: agent-evidence-consistency-contract、agent-behavioral-contract
- 并列概念:
- 易混淆概念:
- 关系笔记:
Selection-Only Agent Output 与 Deterministic Rendering
一句话定义
Selection-Only Agent Output 是一种权限收缩设计:模型不直接撰写将要进入 durable state 的业务事实文本,而只返回有限的结构化选择,例如:
kind + evidence_ref
应用在验证这些选择后,再从可信 evidence snapshot 确定性渲染最终文本。
核心分工:
LLM
→ semantic selector / classifier
Application
→ evidence owner / validator / renderer / durable authority
它解决什么问题
很多系统做到 provenance 后会产生一个误解:
claim 有 evidence_ref
→ claim 就一定被 evidence 支持
其实不成立。
例如权威来源只有:
日常活动以久坐为主
模型引用了这条真实 evidence,却输出:
长期久坐可能对整体健康产生长期影响
这里:
evidence ref 正确 ✅
source 存在 ✅
模型 prose 超出来源 ❌
所以:
Provenance 证明“从哪里来”,不自动证明“你说的这句话完全由它推出”。
这就是 claim-level entailment 问题。
两种基本架构
自由文本架构
Evidence
→ LLM writes label / description / explanation
→ semantic entailment checker
→ persistence
优点是表达自由。
缺点是每个 durable claim 都需要继续证明自然语言没有越过证据。
Selection-Only 架构
Authoritative Evidence Catalog
↓
LLM selects:
kind + evidence_ref
↓
Deterministic validation
↓
Application renders exact source restatement
↓
Persistence
这里直接取消了模型对 durable prose 的作者权限。
为什么 Deterministic Rendering 更强
假设 evidence 是:
{
"kind": "lifestyle.exercise",
"value": "健身;频率:1-2"
}
模型只允许返回:
{
"kind": "exercise_pattern",
"evidence_ref": "body_state:fact:123"
}
应用验证通过后生成:
label = 运动记录
description = 来源记录:健身;频率:1-2。
模型没有机会把它扩写成:
说明训练量不足
说明恢复能力较差
说明长期健康风险增加
所以这个模式不是“让另一个检查器判断模型有没有胡说”,而是:
从权限设计上让模型根本没有这个 durable writing capability。
Authority Minimization
这个设计可以理解成最小权限原则在 Agent 系统中的应用。
如果一个模型为了完成任务只需要决定:
这条 evidence 属于哪类 observation?
哪条 evidence 值得暴露为 candidate?
那么它不需要同时拥有:
自由写事实
自由定义严重程度
自由写健康结论
自由写 durable summary
权限越大,runtime 需要验证的表面积越大。
因此:
minimum model authority
→ smaller trust surface
→ easier deterministic validation
一个典型输出 Schema
class ObservationSelection(BaseModel):
kind: Literal[
"posture_alignment",
"posture_asymmetry",
"lifestyle_pattern",
"exercise_pattern",
"report_indicator",
"anthropometry",
]
evidence_ref: str
而不是:
class ObservationDraft(BaseModel):
kind: str
label: str
description: str
severity: str
confidence: str
body_region: str
evidence_ref: str
只有真正需要模型自由判断、并且系统能够验证的字段,才应该留给模型。
Deterministic Rendering 不等于“所有文本都必须模板化”
这个模式适用于:
- durable health facts;
- 权限状态;
- 金融/合规结果;
- 自动化 side effect 参数;
- 需要强审计的结构化业务状态。
而普通聊天解释、教学文本、低风险 summary 完全可以保留模型自由表达。
应该按 authority 划分:
Durable / action-authorizing representation
→ deterministic or strongly governed
User-facing explanation
→ semantic freedom may remain
不要为了可靠性把整个产品变成模板机器。
Selection-Only 与 Evidence Consistency 的协作
Evidence Consistency Contract 负责验证:
ref exists?
ref admissible?
source compatible?
kind compatible?
ref unique?
Selection-Only 继续缩小问题:
模型不再写 durable claim prose
组合后:
Model Selection
→ Evidence Contract
→ Deterministic Rendering
→ Durable State
这比:
Model prose
→ Model Judge checks model prose
→ Durable State
更容易形成硬不变量。
为什么不优先增加第二个 LLM Judge
如果问题是:
LLM A 可能把 evidence 扩写过头
一种方案是:
LLM A writes claim
→ LLM B judges entailment
但这只是把一个概率判断变成两个概率判断。
第二个 Judge 可以作为质量信号,但不应是能结构性消除风险时的第一选择。
如果产品允许 selection-only:
remove free-text authority
通常比:
add another probabilistic authority
更稳。
双重 Rendering 是否浪费
如果 Python 是模型运行层、Go 是 durable truth owner,可以:
Python
→ validate selection
→ render candidate
Go
→ rebuild catalog independently
→ revalidate selection
→ render again
→ persist
这里 Go 的二次 rendering 不是为了“多写一遍文案”,而是为了证明:
durable owner 不需要相信上游已经把文本渲染正确。
即使 Python 出 bug 或恶意返回额外 prose,Go 仍只根据 frozen evidence 生成自己的持久化结果。
什么时候不适合 Selection-Only
如果任务本身就是:
写一封邮件
总结一篇文章
解释一个概念
自由文本就是主要产物,不能简单取消。
这时应该使用:
- evidence/faithfulness checks;
- semantic evaluators;
- citation correctness;
- safety validation。
Selection-Only 最适合:
模型负责语义判断,但最终写入的是受治理的业务状态。
常见误区
- 有 evidence_ref 就不需要控制文本:ref 正确仍可能发生 claim expansion。
- Deterministic Rendering 会完全失去 AI 能力:AI 仍负责选择、分类、排序;只是不能自由改写 durable truth。
- 再加一个 Judge 一定更安全:若能移除权限,结构性约束通常更强。
- 前端显示文本也必须完全模板化:durable representation 与 user-facing explanation 可以分层。
- Python 已验证,所以 Go 可以直接信文本:durable owner 最好独立验证自己真正要保存的内容。
最短记忆
不要问:
“怎么让模型更听话地写 durable facts?”
先问:
“它真的需要拥有写 durable facts 的权限吗?”
能把模型从 author 降为 selector 时,很多 grounding 问题会从“难以判断”变成“可确定验证”。