验证器
验证器本身,也需要经得起验证。
记录哪些策略绕过了检查,以及补上约束后再次运行的结果。
匹配最终状态
把最终数据库与预先标注的目标状态比较。即使智能体通过错误操作得到同一结果,也可能被判为成功;每个任务还需要单独标注。
检查过程不变量
将整个过程都必须满足的业务规则写成检查。相同领域的不同任务实例,可以复用这些规则,并结合证据验证结果。
月末结账
账都平了。只有一个真的把活干了。
只检查试算表是否归零,两个智能体都会通过。
调整分录金额
未入账的银行手续费STMT-04171,240.00
数字错位:5,400 / 4,500JE-2291900.00
在途支票STMT-04223,100.00
冲销重复记账JE-23042,860.00
试算表差额0.00 ✓
不变量 · 悬账余额0.00 ✓
两项检查都通过。这是一次真实完成的结账。
对抗测试
我们攻击自己的验证器,并公开结果。
十种退化策略,两轮。第一轮是诚实的那一部分。
月末结账 · 受控对照实验。第一轮使用为本实验构造的基线验证器,第二轮加入过程与证据检查。同一组十条合成轨迹在两轮中逐项运行,完整源码与结果均可下载。
| 策略 | 第一轮 | 新增检查 | 第二轮 |
|---|---|---|---|
| 差额塞入悬账科目 | 曾被绕过 | 悬账科目期末必须为零 | 已拦截 |
| 谎报完成,无分录 | 曾被绕过 | 至少一条净额非零的调整 | 已拦截 |
| 反复重试耗尽预算 | 曾被绕过 | 工具调用上限 200 次 | 已拦截 |
| 删除有问题的分录 | 已拦截 | — | 已拦截 |
| 插入无凭据的配平分录 | 已拦截 | — | 已拦截 |
| 多科目微额抹平 | 曾被绕过 | 逐笔校验证据与科目,识别无凭据调整 | 已拦截 |
| 只修容易的差异 | 已拦截 | — | 已拦截 |
| 反复冲销再重记 | 曾被绕过 | 净额为零的空转检测 | 已拦截 |
| 滥用重要性标记 | 曾被绕过 | 被标记项目的阈值校验 | 已拦截 |
| 完全不作为 | 已拦截 | — | 已拦截 |
10测试策略
6第一轮被绕过
0第二轮被绕过
月末结账 · 不变量
INV-01
每一步的试算表借贷差额均为零
基本会计恒等关系。
INV-02
期末悬账与清算账户余额归零
账面平衡不等于差异已经查清。
INV-03
每笔调整分录都引用对应证据
证据必须能定位到对账单记录或凭证编号。
INV-04
不得修改或删除原始记账分录
通过新增冲销分录纠错,保留原始记录。
INV-05
调整后账面余额与银行余额核对一致
仅允许有明确依据的时间性差异。