Think Deep,Work Lean

Agent 跑长任务总返工?我用三道保险让它一次跑通

Posted on By zack

大家好,我是Zack。

前几天跑一个三小时的活,最后一步全忘了,又从头跑了一遍。

那天我盯着屏幕上的进度条,想的却是同一句话:这玩意儿要是能自己记住就好了。

后来我发现,能记住的其实不是 agent,是文件。

从那之后我把跑长任务的流程改了三处,从此没再返工过。今天把这三处摊开讲,都是能直接抄的。

一、开工前先要方案,别让它直接动手

这是我最早改的一处。

以前我把需求一句话说清楚就让它开干:「把这个功能加上」。结果它一口气改了 8 个文件,等我看到的时候已经晚了。

现在我有个硬规矩:涉及多文件、多接口的活,先出方案,写第一行代码之前必须等我点头。

提示词我是这么写的,直接抄:

先别动手。读完代码后用 5 步以内说清楚:
1. 你打算改哪几个文件
2. 每个文件改什么,为什么
3. 哪里有不确定的

写完等我确认。确认之后再写代码。
遇到拿不准的地方直接问我,不要自己假设。

差别在成本。

方案阶段改一句话,5 秒。

代码写完再回滚,半小时。

这半小时不只是机器时间,还有我重新读一遍自己刚写的代码的心情。

二、中间产物必须落盘

三小时那个活之所以从头跑,是因为中途上下文被截断了——agent 看不见自己之前干过什么,就重新开始找。

我现在的做法是:凡是超过半小时的任务,每个阶段写一份状态文件。

不用多,就一个 STATUS.md,长这样:

## 当前阶段
3/5 已完成:抓取脚本跑通,去重逻辑写完

## 已落盘的东西
- fetch.py 已通,输出 raw.json(120 条)
- 去重在 dedup.py,阈值 0.85

## 下一步
写打分函数,输入 raw.json,输出 scored.json

## 踩过的坑
- 去重用编辑距离会误杀短文本,改成 Jaccard
- 0.9 以上才判重

这四个小节就够:当前阶段 / 已落盘的东西 / 下一步 / 踩过的坑。

最后那个「踩过的坑」别省。我有两次同一个坑踩了两遍,就是因为第二次翻车时没翻到第一次的记录。

效果是这样的:agent 忘了,我读文件就知道;上下文满了要重启,读文件接着干;隔三天回来看这个任务,也知道当时停在哪。

agent 会忘,磁盘不会。

三、写能验的验收条件,不采信自述

这是最反直觉的一处。

agent 干完活会跟你说「已完成」。我被这句话坑过——它说改好了,跑一下测试根本没跑过。

后来我改了规矩:完成标准要写成能跑的命令,跑通了才算完成。

现在我给 agent 的验收条件长这样:

完成标准(以下都要跑一遍,通过才算完成):
1. python -m pytest tests/ -q 输出 0 failed
2. python scripts/stats.py 打印总条数,与 docs/expected.txt 一致
3. git diff --stat 不包含 config/ 下任何文件

第 3 条是关键,我单独说一下。

只告诉 agent 目标,它一定会顺手多干点事:重构、改命名、补文档、升级依赖。不是它坏,是它看到问题就想修。

所以我会在需求最前面加一段负向清单:

不许动的:
- 不许改 config/ 下的任何文件
- 不许引入新依赖
- 不许改 package.json
- 不许做重构、改命名

实测下来,负向清单的命中率比正向描述高得多。你说「要写得规范点」它不知道怎么做,但你说「不许动这 3 个文件」它一秒就知道。

顺带说两个我踩过的

上下文不是越多越好。 我硬塞过 15 份文档进去,200k tokens,结果模型开始跨文档串信息,答案看着特别通顺,其实全是我没给过的内容。现在我只喂它真正要用的那几段,其余让它自己检索。判断标准很简单——塞进去的东西,跟答案有没有直接关系,没关系的就删了。

并行 agent 别共用一个浏览器。 多个 agent 同时跑,报错说「找不到页面」,看着像页面没了,真实原因是一个 agent 把另一个的会话收走了。现在每个 agent 一个独立工作目录,端口、浏览器、数据库这些共享资源显式分配。别指望 agent 互相礼让,它们看不见对方。

前后对比

环节 改之前 改之后
跑一次完整长任务 3 小时 + 大概率返工 一次跑通
方向跑偏了 回滚半小时 方案阶段 5 秒改完
上下文满了 从头再跑 读 STATUS.md 接着干
判断做完没 手动翻一遍 跑 3 条命令
agent 顺手多干 事后发现 负向清单挡住

三条能带走的

  1. 状态要存磁盘,不存上下文。 agent 的记忆靠不住,文件靠得住。
  2. 「不许做什么」要比「要做什么」写得具体。 列黑名单比讲道理有效。
  3. 自述不算数,命令输出才算数。 验收条件一开始就是命令形式。

这三句话不是 AI 工具的技巧,是任何长任务都适用的。

你跑 agent 的时候卡在哪个环节?或者你自己项目里有什么「返工三次才明白」的事,欢迎留言聊聊,我挑几个写细一点。

我是 Zack,关注我,一起把工具用明白。