文章指出 .cursorrules / CLAUDE.md 等规则文件缺乏强制执行力,Agent 可静默忽略;作者开源了 Soma 框架,通过经济学机制设计思路让 Agent 违规在结构上无利可图,包含 token 预算审计和规则有效性验证机制。
如果你使用 AI 编程助手(Cursor、Copilot、Claude、 Gemini),大概率写过规则文件。.cursorrules、 CLAUDE.md,或者类似的东西:
- Always read a file before editing it
- Run tests after making changes
- Don't introduce new dependencies without asking
这是一种君子协定。你在让 AI 遵循规则,而 AI 可以悄无声息地无视它们,没有任何后果。没有机制检测"编辑前必读"是否被违反。没有反馈循环淘汰无人遵循的规则。规则存在于上下文窗口里,而 AI 可以直接……不遵守。
研究支持这一观察。研究表明,缺乏治理的 AI 会在循环返工、虚构 API 和错误假设上浪费大量 token(arXiv:2602.11988,arXiv:2607.27250)。添加静态规则有所帮助——但这些规则本身不会改进、不会过期、也无法证明它们在起作用。
我想要更好的方案。于是我构建了 Soma,一个开源治理框架,用不同的思路来处理这个问题。
核心思想借鉴自经济学中的机制设计:不要依赖 AI 的配合意愿——让违规行为在结构上无利可图。
落实到实践层面,这意味着三件事:
1. 无法自证其效的规则会过期
Soma 中的每条规则都有有效期。时间驱动(90 天)或会话驱动(30 次会话)。如果证据管道没有为某条规则记录到一次触发事件——意味着该规则从未匹配到 AI 操作过的任何文件——它就会过期并从上下文窗口中清除。
这听起来激进,但想想它阻止了什么:规则文件单调递增,直到吃掉 20% 以上的上下文窗口。为一次性事件添加的规则,之后再未发生。适用于六个月前重构过的代码库的规则。
2. 声明会对照证据进行核实
当 AI(或子 AI)报告"我修好了 bug,测试全过了"——这是空口无凭。Soma 的验证层会检查实际证据:转录记录里有没有测试运行?测试通过了吗?经历了多少次修复-重试循环?
在你被一个子 AI 坑过之前,这听起来像疑神疑鬼——它报告成功,你合并了 PR,然后发现"修复"引入了三个新 bug,因为 AI 根本没跑测试套件。
3. 证据管道反馈到规则适配度
每次会话都会生成证据。哪些规则被触发了?操作了哪些文件?有没有返工循环?这些数据流入适配度账本(一个简单的 JSONL 追加日志——不花哨)。频繁触发且与干净会话相关的规则积累适配度。触发了但与返工相关的规则积累噪声信号。
随着时间推移,系统会提升有效的规则,降级无效的规则。不需要人工维护规则文件。
这是今天我在开发 Soma 本身时真实发生的事。它完美地展示了这个框架要捕捉的失败模式。
我的 AI 助手有一个测试在本地环境失败:test_make_validate_fails_on_broken_shell_script。整个会话过程中它每次运行都失败。AI 把它定性为"预先存在的沙箱问题"——测试在往一个只读文件系统里写东西。
AI 修复了那个测试。本地套件:516 通过,0 失败。它提交了。它宣告胜利。
我问:"CI 里还在失败。还有别的教训吗?"
AI 压根没看过 CI 构建。当它终于看了实际的 CI 日志,发现了一个完全不同的 bug——一个生产文件(immune_trends.py)有 IndentationError。本地测试失败和 CI 失败是同一个症状("构建红了")背后的不同 bug。
AI 修复了那个。CI 再次运行。还是失败。第三个 bug:pyyaml 不在 CI 依赖里。六个测试文件在 import 时崩溃。
修复了那个。CI 再次运行。还是失败。第四个 bug:一个测试在 source 一整个 shell 脚本,里面跑了 git push,导致 CI 里 60 秒超时。
四个不同的 bug,堆叠在一起,每个都被前一个掩盖。AI 花了整个会话的时间Dismiss"构建红了",而没有去看日志。它正在构建的、用来防止这类失败的治理框架……自己都没能防止,因为它还没被应用。
那次失败现在成了系统中的一条治理单元(governance cell):trap-local-green-ci-red。当修改触碰到 CI 相关文件时,它会触发,提醒 AI:本地绿 ≠ CI 绿。去验证实际的构建。
我想对局限性保持诚实,因为 AI 工具领域充满了过度宣称的指标。
我不知道这能否泛化。Soma 主要在我自己的项目上测试过。它捕捉到的失败模式是真实的,但可能是我使用助手的方式所特有的。治理单元编码的是我的伤疤。它们能否迁移到其他开发者的workflow,是一个开放问题。
指标是有保留的。系统增加约 3,800 token 的空闲上下文开销(已测量,比早期版本下降 8.6%)。治理会话中的浪费率低于 1.0%。但"治理会话"在这个句子里做了大量工作——它意味着完整框架被加载且 AI 在遵循规则的情况。测量反事实浪费(没有治理会发生什么)很困难。
规则仍然在上下文窗口里。这是根本局限。Soma 让规则更智能、更会自动修剪,但它们仍然要与实际任务争夺上下文空间。平台级方案——在模型层而非提示层强制执行治理——会严格来说更好。我没构建那个,因为我无法控制模型层。
过期机制太粗粒度。一条 30 次会话都没触发的规则,可能是一条尚未派上用场的重要安全网,而不是一条无用的规则。当前系统无法区分"休眠但有价值"和"累赘"。我在思考一些方案,但还没有好的答案。
Soma 开源在 github.com/nsenev1/Soma-Governance。截至 v0.50:
我不是说 Soma 解决了 AI 治理问题。我是说这个思路——让规则基于证据竞争生存——比替代方案更健壮。替代方案是:一个静态文件永远增长,依赖 AI 的善意。
这个论点在大规模、跨团队、不同 AI 和代码库的情况下是否成立——我真的不知道。如果你试了并找到了答案,我很想知道。
Soma 以 MIT 协议开源。治理单元——编码的失败模式——是最有趣的部分。欢迎贡献,特别是来自你自己 AI 失败经历的单元。