让偏差自己跳出来:AI 编程中的需求工程实践
AI 编码偏差的根源往往不在模型能力,而在需求输入端的隐性假设。本文用一个真实事故说明如何用结构化计划让偏差自己跳出来。
我只是想让用户登录 KB 后自动加入某个团队,结果 AI 在实现入团的同时,还给每个新用户自动创建了一个默认 Agent。
AI 把这件事写在了计划里——埋在技术细节中的一句“复用现有初始化逻辑”。我快速扫了一眼计划就同意了。问题不在于 AI 没说,而在于我没看到。
为什么会偏
AI 从现有代码里观察到“手工邀请 → 初始化 Agent”这个模式,就合理推断“SSO 自动入团也应该触发相同逻辑”,然后自然地带进了新链路。
这个推断单独看没问题,但不在我意图的范围内。错不在 AI——它做了计划里写的事。错在我靠注意力来审阅,而关键信息没有被突出到让我不可能漏掉的位置。
理论依据
Erwin Wu 的《AI 编程的系统性工程闭环》把这个问题讲得很清楚:可靠的 AI 编程是一个三段闭环,需求工程要做的是消除隐性假设和建立唯一事实来源(SSOT)。
我遇到的偏差正好对应第一段:AI 继承了“入团 → 初始化 Agent”的假设,我没有把它暴露出来确认或拒绝。
解法:前 15 行决定审阅效果
我给自己定了一条硬规则:中大型实现任务的计划文件,前 15 行以内必须包含两个结构化段落,技术细节放后面。
## 行为增量——一张表格,改动前后每个场景一行。AI 带了任何你没要求的行为,它必须出现在这张表里。
| 场景 | 改动前 | 改动后 |
|------------|--------|------------------|
| SSO 登录 | 不入团 | 自动加入团队 |
| SSO 登录 | 无 Agent | 自动创建默认 Agent |
## 推断假设——编号列表,列出所有从现有代码继承的行为假设。你没确认的假设,视为未生效。
1. 假设 SSO 入团复用现有邀请链路的 Agent 初始化逻辑
2. 如不需要请告知,我只做入团不加 Agent
为什么要求放在前 15 行?因为审阅者的注意力是递减的。打开计划,前几行必读,越往后越跳过。信息一样,位置不同,效果完全不同。
效果
我把规则加进了全局 AGENTS.md 和 write-plan Skill 模板。在最近一个计划中,AI 自动生成了 8 行行为增量和 4 条推断假设,我扫一眼开头就完成了行为层面的验收——旧流程需要通读全文才能做到。
总结
需求对齐不是写更多文档,是建立结构让偏差自己跳出来。
靠注意力审阅不可靠——你总有累的时候、赶时间的时候。靠结构审阅才可靠——只要格式对了,偏差就无处可藏。