《AI 渐进编程》之九:作为甲方,如何和 Agent 签一份好合同?
前面几篇我们已经把项目地图、状态机和 SIADOS 讲清楚了。
这一篇要继续往下走,回答一个非常实际的问题:
当前这一轮任务,到底应该怎么写,AI 才能看得懂、做得对、不会越界?
本书把这个问题交给 current_task.md。
它不是聊天记录,
也不是随手写的一句口头要求,
而是一份短期有效、可以验收、可以回写状态的任务契约。
1. 为什么还要有 current_task.md?
很多时候,人类给 AI 的任务本来是模糊的。
比如你可能会说:
- “把这个 Bug 修一下”
- “顺便把相关测试补上”
- “改完以后尽量别影响其他部分”
- “如果有兼容性风险,先记下来”
这些话人能听懂一点,但对系统来说并不够清楚。
因为它没有把下面几件事明确写出来:
- 这轮的目标到底是什么
- 这轮允许改哪里
- 这轮禁止碰哪里
- 什么结果算通过
- 哪些歧义需要先确认
所以本书把这类信息收敛到 current_task.md 里。
它的作用就是把当前任务收窄到一个可执行范围内。
2. 一轮任务只能有一个主目标
current_task.md 最重要的原则,是单一主任务原则。
“完成项目修复”“继续开发项目”这种说法,只能算长期方向。
真正的一轮任务,还必须具体到一件可做、可验收的事。
比如:
- 修一个 Bug;
- 补一个测试;
- 改一个接口;
- 更新一个状态文件;
- 记录一个未决问题。
如果一轮任务太散,Agent 就会把相关事情一起做掉。
看起来像“顺手优化”,实际上可能会:
- 修改范围扩大;
- 任务目标混乱;
- 验收条件不清;
- 后续无法回滚。
其他重要但不属于当前轮的内容,应该写入 open_issues.md 或后续任务,而不是塞进当前任务。
3. current_task.md 应该写什么?
一份可执行的 current_task.md,不需要很长,但要写清几个字段:
# Current Task
## Task
Fix the empty-cart checkout path in `checkout/service.py`.
## Goal
Return a safe error when the cart is empty,
while preserving normal checkout behavior.
## Allowed
- `checkout/service.py`
- `tests/test_checkout.py`
- `revision_log.md`
- `open_issues.md`
## Forbidden
- `auth/*`
- `payment_gateway/*`
- `docs/*`
- unrelated modules
## Acceptance
1. Empty-cart checkout is handled safely.
2. Normal checkout still passes.
3. Only allowed files changed.
4. Unresolved compatibility concerns are recorded.
重点不是格式漂亮,而是把任务变成可检查的边界。
Agent 看到这份文件以后,应该能判断:
- 当前要做什么;
- 修改范围在哪里;
- 哪些地方不能动;
- 什么结果算通过;
- 哪些问题需要记录而不是直接处理。
4. 从自然语言到任务契约
这一章很重要的一点,是把自然语言输入“编译”成任务契约。
比如人说:
“把这个 Bug 修一下,顺便保证不影响其他模块。”
这句话本身并不适合直接执行。
因为它包含了两个问题:
- “修一下”不够具体
- “不影响其他模块”可能会诱导越界修改
所以系统不能直接照着做,
而要把它编译成一份结构化任务:
- 目标:修复空购物车结算
- 允许:checkout/service.py、tests/test_checkout.py
- 禁止:auth/、payment_gateway/
- 验收:只检查结算路径和回归测试
这样,Agent 不会把“保证不影响其他模块”理解成“可以把其他模块一起改”。
它只能在当前授权范围内完成任务。
5. 冲突和歧义怎么处理?
任务里经常会出现冲突。
例如当前任务要求只修结算逻辑,但又有人补了一句:
顺便统一一下认证模块。
这时不能直接执行。
因为认证模块不在当前任务范围内。
current_task.md 应该规定优先级:
1). 安全和系统边界;
2). 当前任务的禁止项;
3). 当前任务目标和验收条件;
4). 补充偏好和软性建议。
也就是说,软性建议不能覆盖明确边界。
如果 Agent 发现了相关问题,可以写入 open_issues.md,留给后续任务处理。
6. 验收条件必须可观察
任务能不能完成,取决于验收条件是否清楚。
“写好一点”“提高质量”“尽量优化”都不适合作为验收条件。
更好的验收条件应该是可观察的:
空购物车返回安全错误;
正常结算路径不受影响;
只修改允许文件;
未决兼容性问题已记录。
这些条件可以检查。
可检查,任务才有结束点。
不可检查,Agent 就容易继续猜、继续改,最后越改越散。
本章小结
current_task.md 的作用,是把自然语言要求变成一份当前轮任务契约:
- 这一轮做什么;
- 哪些地方能动;
- 哪些地方不能碰;
- 什么结果算通过;
- 哪些问题要记录下来。
Agent 不需要每轮重新猜任务,而是在明确边界里推进。
更多推荐



所有评论(0)