技术 · 熟练

它跳过测试时,说的是哪一句话?

把借口提前写下来,拒绝就比遵守更麻烦
写规则的人大多写成「你应该做 X」,而 agent 失败时用的从来不是「我不做 X」这句话。它说的是「这个改动很小所以不用跑测试」「测试环境本来就不稳定」「我先提交再补」—— 每一条听起来都成立。反合理化表(anti-rationalization table)做的就是把这些理由提前逐条写下来,并当场驳回,让「照规矩办」变成阻力最小的那条路。这一页给的是这张表怎么写:先收集它实际说过的话(不是你以为它会说的),再给每条一条可执行的替代动作,最后把校验点钉在动作上而不是态度上。
方法 · 一图看懂
1
先抄原话,不抄想像 — 回看三次它真的偷懒的记录,把它当时的原句抄下来;⛔ 不写「它可能会说……」
2
一条借口配一条替代动作 — 驳回要给出口(「改动小 ⇒ 也跑单测,只要一条」),只有否定句的表是无效的
3
校验点钉在动作上 — 「必须跑过 X 命令并把输出贴出来」,⛔ 不写「要认真」「不要偷懒」这类态度词
4
表要比技能短 — 一张表只治一类毛病;写成长篇规范之后,它又回到「读了但没记住」
原理 · 为什么有效
为什么态度类规则没有用:因为它不可核。「认真一点」既不能被满足也不能被违反,模型无法据此改变行为;而「跑过 npm test 并把最后 20 行贴给我」是一个可以被检查的动作。为什么要把借口写死:因为捷径是模型在压力下的默认输出 —— 当任务难度上升、上下文变长时,它会更倾向选择省事的路径;提前把这条路径标注成「已知的错路」,等于在它比较两个选项之前就把其中一个划掉。判据一句话:你的规则里有多少条,是能被检查「有没有做」的?剩下的那些,基本只是在安慰写规则的人。
适用场景
适合谁:给团队写 AGENTS.md / 技能包 / 项目规则的人;反复在同一类问题上堵漏的人(每次都有人在 review 里说「测试呢」);把 agent 接进有质量要求的流程(上线、报价、财务)的人。不适合谁:一次性脚本、随手问一句的用法(那时没有「流程」可守);也⛔ 不适合用它替代真正的自动化门禁 —— 表是提示层,CI 才是闸门,两层各有位置。
自测 · 5 问
表里的每一条借口,是不是它真的说过的话(能不能指出是哪一次、哪一句)
每一条驳回后面有没有配一个具体动作(命令 / 文件 / 要贴出来的输出)
有没有混进态度词(认真 / 仔细 / 尽量 / 不要偷懒)—— 出现即删,换成可检查的动作
这张表是不是长到没人再看:能不能在 30 秒内读完;读不完就拆成两张
有没有一条是「先做完再补」—— 任何允许延后的条款,都要写明「补」的判据与期限
怎么上手 · 验证步骤
第一轮只治一类毛病:挑那个最常发生的(多数是「没跑测试就说做完了」),照原话抄一条借口、写一条替代动作、钉一个校验点,然后故意让它在一个小改动上试一次。你会发现真正的收益不在它变乖了,而在你能一眼看出它有没有照做 —— 这一步才让规则开始起作用。
收工时数一件事:这一轮里,这张表拦下了几次? 一次都没有不一定是好事 —— 可能是任务太简单,也可能是你的校验点还没被触发。判据是「我能不能在结果里指出它照做了的痕迹」。
[C级]addyosmani/agent-skills(反合理化表 anti-rationalization tables · 每条技能显式列出 agent 会走的捷径与反驳) [C级]Agent Skills Marketplace 技能说明(技能按 DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP 组织 · 每段带验证闸门) [C级]AIBARS 项目页(中文对照:项目定位为「防止 agent 在整个开发生命周期里偷工减料」) [C级]AI.dosa《Agent Skills》评测页(三大特性:生命周期覆盖 / 反合理化护栏 / 工具无关可移植) 同类:技能塞满提示词,它反而找不着该用哪个 · 两套技能包都装,只会互相打架 · 装了几十个技能,有几个真在干活?
继续往下读
同级:给AI操作上权限审批链:危险动作先拦下来等你点头 下一级:AI Agent 记忆沉淀法:把每次任务教训固化成规则 随机一篇