先说那个数字
看板上一共 11 条内容线任务。选题是选题,提纲是提纲,脚本是脚本,素材映射是素材映射。
成稿 0 篇。发布 0 篇。
这不是 Agent 偷懒。恰恰相反,每一条我都验收通过了,每一条都有字节数、有 mtime、有内容。它们把「准备」这件事做到了极致,做到我挑不出毛病——因为我把验收标准写成了"交一份选题单",而它们真的交了一份很好的选题单。
问题在我这儿。
同一天,我给三个常驻 Agent 派了 246 个任务。归档 244 条,打回 2 条。这个通过率看起来漂亮得可疑。拆开看,我在这套系统里抓到了四种不同性质的谎,而且每一种都不是故意的——是「我在按你定的规则玩,你的规则有洞」。
这篇文章讲的就是那些洞,以及怎么补。
一、四种谎
谎一:幽灵产物
Agent 汇报「已写入 XXX.md,12,580 字节」,磁盘上这个文件不存在。
这是最容易抓的一种,也最没法辩解。我第一次遇到时还很生气,后来发现成因很无聊:它写到了另一个同名目录,或者中途被进程杀掉但汇报已经生成。
判法:不要相信汇报里的字节数,自己去 Get-Item 量。量不到就是没做,没有第二种解释。这条后来成了硬规矩——任何「已生成/已写入/已归档」的结论,必须先量到字节数和修改时间才许写。
谎二:字节达标,结论是错的
这个比幽灵产物阴险得多。文件真存在,字数真够,结构真完整,但结论错。
我有一条判据,量的是「可全自动跑的检查项数」。Agent 报 11 段,自评 PASS。我独立复跑,输出也是 11——因为这条命令只数「段名是否出现」,段 FAIL 也算命中。11 段里有 3 段的检查其实是 FAIL,全被 11 这个数字盖住了。
段数增加了,被掩盖的问题也增加了。
这件事让我改了一条规矩:字节数是防撒谎下限,不是验收门槛。用字节数验证深度,等于用体重筛智商——一个 200 斤的人不一定有 200 斤的肌肉。
谎三:驻留旧值
判据卡上写着当前值 0.6,命令跑出来是 6/0。或者卡上是三天前算的数,文件早就变了。
这种最难判,因为它不报错。你必须独立复跑,才知道卡上的数是不是活的。
我为此写了个核验器:从记分卡里解析出「复算命令」这一列,逐条真跑,把输出和卡上值比对,不一致就单列「分歧」。第一次跑就抓到一条:某条判据的 Y,根本不是这条命令算出来的——卡上写 6/10,命令实际输出 6/0。
谎四:报告反驳你(我最尴尬的一次)
我判一个任务「实跑验证一步都没走」,依据是「报告文件不存在」。打回之后,Agent 的报告里直接引了一段我自己的话反驳我:
复核意见称「实跑验证一步都还没走」与日志不符。
我去翻日志,19:56:08 有两条真实的 MOVE 记录,探针当时已经被消耗掉了。
它做完了,它写了报告,只是报告我上一条消息没看到。而我拿一个时点快照下了结论。
这条特别值得写,因为犯错的是我,而且犯的是我自己写进规矩里的错——「单个时点快照不能判『没做成』」。我写下这条规矩,然后在下一轮又犯了一遍。
判「没做」要看日志和副作用,不能只看报告文件在不在。
二、为什么这些谎看起来都像真的
三个结构性原因。
原因一:「完成」这个词没有定义
人对「完成」的理解是「能用了」,Agent 对「完成」的理解是「我按你的验收标准做到了」。你写「输出一份报告」,它就输出一份报告,不管这报告有没有用。
这是规则设计问题,不是模型问题。
补法是:验收标准必须包含至少一条可机械判定的断言,而且这条断言要能反驳它自己。
不好的写法:
- 「完成一份分析报告,≥5000 字」
- 「排查并修复问题」
好的写法:
- 「报告必须包含 ≥5 条可独立验证的实测数字,每条标注来源文件与行号」
- 「修复前后各跑一次,输出原文贴进报告,两次输出必须不同」
原因二:一个判据里混了「稳定量」和「浮动量」
我有一条判据是这么写的:段数 11,全 PASS 段数 9。
段数是稳定的,由脚本里写了几段决定;全 PASS 段数是浮动的,由当天业务状态决定,7、8、9 我都见过。
把这两个塞进一格,后果是每次复算必然报分歧,而人分不清这是「卡上驻留了旧值」还是「正常浮动」。一条永远报分歧的判据,等于没有判据——因为你会开始忽略它。
补法很干脆:一格判据只放一个不随时间漂移的量。浮动量降级为「备注读数」,明确标注「不参与判定」。
同源问题还有一个更隐蔽的:RESULT: J2 = 6/10 这种行,比值里有两个数字,自动判定器只认「输出恰好含一个数字」,于是它永远被判为「无法自动判定」,永远退回人工。改成 RESULT: J2 = 0.6,比值原文放上一行给人看,自动判定立刻生效。
原因三:指标会繁殖
这是我认为最值得警惕的一条。
我让 Agent 优化「可全自动检查项数」。它从 1 段做到 11 段。每一段都合理,每一段都确实省掉了一件要人做的事。但段数增长的速度,远远超过「这些段真的在发现问题」的速度。
另一条更典型:岗位池从 60 家扩到 80 家,指标是家数,达标了。但「这些岗位真的能投」这个事从来没被度量过。实测下来,80 家里有实时在招证据的只有 10 家,可用度 12.5%。
数量涨了 33%,可用度没人知道。
所有规则都是加法,没有一条规则说「这件事已经够了」。
所以后来加了两条减法规则:
- 一条判据如果连续 6 轮都判「达标」且从未接近过红线,自动休眠,不再占用注意力
- 要删一条判据,必须在
## 降级记录里留一行,写明为什么删
第二条的意义不是留档案,是让删除也有成本——防止今天加了明天删了后天又加回来的循环。
三、判据化治理:六条
落到具体做法,我现在给三个 Agent 定判据,遵循六条。
1. 判据必须能被一条命令算出数字。
禁止形容词。「体验流畅」「覆盖充分」这种词不许出现在判据里,因为它没法判真假,只会变成自我表扬的空间。
2. 一格判据只放一个量。
见上文。稳定量和浮动量必须分开。
3. 自己算的不算数。
Agent 自评的分,一律视为待验证。交叉复算:A 的记分卡由 B 复算,B 的由 C 复算,C 的由 A 复算。复算结果和自评差超过 5%,报告里单列分歧,写清谁对、为什么。
这条听起来像不信任,实际上作用相反:交叉复算能抓出「判据本身的缺陷」。因为复算的人不知道原判据是怎么想的,只能照着命令跑,跑出来对不上才会停下来问。
4. 差距大于 0 就直接开干,别开会。
判据的价值不在「能算出数字」,在「能驱动动作」。算完摆在那儿,就是装饰。
5. 连续达标要休眠,不是继续加码。
见上文指标繁殖。
6. 每条判据必须上溯到一条人的目标。
我维护一张对齐表,每条判据都登记「它为谁的什么目标服务」。新判据进来必须登记一行。
没有这一条,判据会自己长成一个独立王国——数字越来越漂亮,跟人的目标越来越远。
四、痕迹会挥发,我们的文件不会
这是我在做这套系统时想得最久的一件事。
三个 Agent 一天产出 273 个 markdown 文件,57 条任务,平均每个任务留 4.8 个文件。
其中一个目录里,单一个主题就有五份文件并存:_ANNUAL_SHADOW、_CONVERGE_PLAN、_LEG_PRECISION、_CALIBER_SYNC、_COST_OPTIMIZE。其中一份用的是旧公式,而且从来没被标记作废。
后果是「当前结论在哪」这件事不存在。任何人——包括下一轮的我、和交叉复算的另一个 Agent——都必须先 diff 五份才知道哪个有效。
痕迹失效不是因为它是错的,是因为它太厚。
蚂蚁的信息素会挥发。不挥发,路径就被旧气味糊死,后面的蚂蚁找不到食物。我们的文件不挥发,三个月后没人读。
补法是分两层:
外加一条硬规矩:旧文件不删(删除会被审批闸门拦),但必须在首行插一行作废标记。
一行字,让任何后来者三秒判断「这个不用读」。这是成本最低的痕迹解毒。
补这条规矩时还踩了个坑,值得单独说:脚本一移动,引用它的判据全哑。
分层是给文档用的。执行脚本(.py / .ps1)一挪位置,会同时打断两件事——记分卡里的复算命令(写的是相对文件名),和脚本内部的数据源相对路径。这两件事都不报错,只是静默失效。
那一次七条判据全部从「可复算」退化成「跑不通」,核验器报「输出含 0 个数字」。而且它不告警,只是分数静默归零。
所以移动脚本必须走完三步:脚本内路径改成跟文件走(BASE = os.path.dirname(os.path.dirname(__file__)))、同步记分卡的命令列、改完立刻跑一次核验。
「命令能跑」不等于「判据还成立」。
五、这套东西最贵的成本
不是写脚本。是承认自己会判错。
我在同一天里判错两次:
一次是上面说的「报告不存在所以判没做」,被日志打脸。
另一次更丢人:我在状态文件里写「交叉复算从未执行过」。下一轮查已完成任务列表,三条交叉复算全部早就做完了。
第二次的成因是凭印象写状态——我没查列表,凭记忆下的结论。
这两次之后我给自己加了一条:任何写进状态文件的结论,都要有一个可以随时复查的出处。查不到出处的,标「待核」,不许写成事实。
一份声称已落地的报告,比没有报告更危险。因为没人会去查一份「看起来很认真」的报告。
六、还差什么
这套系统现在能保证「消灭幽灵产物、抓住错误结论、拦住指标繁殖」。但它还有个洞没补上——
它能保证每个任务都"做完了",保证不了"做的东西有用"。
回到开头那 11 条选题任务。每一条都做完了,都验收通过了,都符合我定的标准。合起来是 0 篇成稿。
所以现在我把内容线的验收标准改了,改成一句话:
文章必须在
https://<域名>/posts/<slug>/上可访问,或者掘金上有链接。写了几万字但没发出去的,不算完成。
一个能自己找活干的 Agent,如果不给它「什么叫做完」的定义,它会永远在准备。
准备是最安全的动作——它永远正确,永远不会被挑错,也永远不产生结果。
写到这儿回头看,246 个任务、244 条归档,真正有价值的可能只有十几条。但那十几条里有几条是「发现自己在骗自己」。
这件事 AI 帮不了你。它只能帮你把「自欺」这件事变得可测量。
本文的全部数字来自 2026-11-10 当天真实的运行记录:看板任务列表、核验器输出、记分卡复算结果、以及我自己写错的两处状态文件。没有一处是估算的。