你的 AI 说它守规矩。但它没法证明

18 阅读3分钟

我让 Claude Code 自评"你今天遵守规则了吗?"它说"遵守了,一切正常。"然后我查了日志——55.9% 的 session 有违规。


50 个 session 后,我发现一个规律

长时间用 Claude Code 写代码,大概 50 次对话后,我发现 agent 会逐渐"漂移":

  • 早期设定的规则被遗忘
  • 配置文件声称 hook 已部署,实际没接线
  • agent 的自我评估("一切正常")和实际情况出现系统性偏差

最典型的一次:它说自己的学习笔记有 13 个条目。我数了一下——53 个。

于是我搭了四道机械门:检查文件时间戳、hook 注册状态、进程退出码、磁盘空间。它们确实抓到了问题。但每个问题都是同一个形状:

"我声称 X,但 X 不成立。"

我为每种 X 加新门。规则在膨胀。我在打地鼠。

然后我换了个角度问——为什么 agent 的自我报告,会和事实有系统性偏差?


考生不能改自己的卷子

想象一个场景:你让一个学生做了一套题,然后让他自己批改。

他用的是同一个大脑里的同一套知识——做卷子和批卷子,共享同一个思维过程。他可能会漏判、可能会自我合理化、可能会给模糊答案打满分。

这跟能力无关。跟结构有关。

基于 transformer 的 AI agent 有一个根本性的结构约束:它说自己遵守了规则("我能做 X"),和执行那个规则(实际做 X),都从同一个概率分布里采样:

P(token | context; θ)

同一个模型。同一套参数。同一个上下文。声明和执行是同一个生成器产出的两个 token 序列。

我把这个叫 Prose Barrier(散文壁垒)。Agent 可以用自然语言描述自己"做到了"——这套语言可以完全脱离外部事实。因为它不验证。它只是在生成下一段看起来通顺的文本。

这不是 bug。这是自回归语言模型的结构性约束。


数据不会骗人

为了验证这个判断,我回溯编码了 34 篇开发日志。

接线机械门前:55.9% 的 session 有违规。

然后我接了四道门,跑了 150 个标准化任务(6 session,对照实验)。

接线后:违规率降到 0.7%。

不是"改善了"。是接近清零了。

指标接线前接线后
Session 违规率55.9%0.7%
规则遵守率99.3%

机械门做了什么?它完全绕过了 Prose Barrier。它不读 agent 写的文字。它查的是:

  • 文件存在吗?(os.path.exists
  • 时间戳对吗?(os.path.getmtime
  • 退出码是 0 吗?(subprocess.run().returncode

这些都是文件系统上的事实。agent 可以用自然语言说"我已更新了文档"。但文件时间戳不会被说服。


这不止是我一个人的问题

Prose Barrier 不只是我的配置的问题。它适用于任何用自然语言输出自我评估的 AI agent。

如果你在部署 agent 但没有机械验证门——你是在需要外部验证的领域里,依赖 agent 的自我报告。

这就像雇了一个人,然后完全信任他写的周报,从不检查代码仓库。



👋 林宇浩 — FAFU 空间信息大三。GitHub: @YuhaoLin2005

📖 下一篇:我让 AI 跑了 150 个任务来证明它会守规矩。结论是:会——但有个前提。 — 机械门实验数据,55.9% → 0.7%