← 全部笔记
Agent 实践
Agent 的判断如何可追溯?从"感觉"到"依据"
做审核类 Agent 这半年,被问得最多的一句话是:"它凭什么这么判?"最早我答不上来——模型给了结论,理由是它现编的。这篇笔记整理一下我后来怎么把"感觉"变成"依据"。
黑盒判断的问题不在错,在无法对话
LLM 直接判断的问题,不是准确率数字不好看,而是错了之后没有抓手。它说"该拒绝",你问为什么,它给你一段流畅的解释——但这段解释是事后生成的,不是判定过程本身。复核的人无法对着一段"看起来有道理的话"开展工作。
可追溯判断的三要素
我现在要求每一次判定输出都必须带三样东西:
- 规则编号(rule_id):命中了哪条规则,规则文本是什么;
- 证据链:这条规则用到了单据里的哪些字段、当时的取值是多少;
- 出处:这条规则对应制度文档里的哪一条哪一款。
一个判定结果大致长这样:
{
"verdict": "REJECT",
"rule_id": "R-017",
"evidence": {"invoice_date": "2026-07-02", "deadline": "2026-06-30"},
"source": "《报销管理办法》第四章第十二条"
}
有了这个结构,复核就从"和 AI 辩论"变成了"核对证据"——要么字段抽错了,要么规则本身要改,责任边界一下就清楚了。
第三种状态:UNKNOWN
做的过程中我最大的观念转变,是接受"判不了"是一个正当的输出。字段缺失时,很多实现会默认为 false 或者让模型猜一个,这在审核场景里是灾难——发票号缺失被判"通过",比判错还可怕。我的做法是引入三值逻辑:True / False / Unknown,凡是证据不足的判定一律输出 UNKNOWN,附上缺什么字段,转人工处理。
这也顺便回答了置信度的问题:确定性引擎不需要给规则命中"打分",真正需要度量的是上游——字段抽取的置信度。抽取没把握的字段,宁可标为缺失触发转人工,也不要带着猜测进引擎。
可追溯不是免费的
说实话,这套东西的成本不低:规则要逐条对齐制度原文,评测集要一条条攒,改一条规则要跑全量回归。但换来的是——每一次判定都经得起复盘,每一次误判都能定位到具体环节。对需要有人签字负责的场景来说,这笔账怎么算都值。
可信不是让人相信你不会错,而是错的时候,能说清错在哪一步。
