← 返回文章列表

让偏差自己跳出来:AI 编程中的需求工程实践

AI 编码偏差的根源往往不在模型能力,而在需求输入端的隐性假设。本文用一个真实事故说明如何用结构化计划让偏差自己跳出来。

我只是想让用户登录 KB 后自动加入某个团队,结果 AI 在实现入团的同时,还给每个新用户自动创建了一个默认 Agent。

一次真实的需求偏差

AI 把这件事写在了计划里——埋在技术细节中的一句“复用现有初始化逻辑”。我快速扫了一眼计划就同意了。问题不在于 AI 没说,而在于我没看到。

为什么会偏

AI 从现有代码里观察到“手工邀请 → 初始化 Agent”这个模式,就合理推断“SSO 自动入团也应该触发相同逻辑”,然后自然地带进了新链路。

这个推断单独看没问题,但不在我意图的范围内。错不在 AI——它做了计划里写的事。错在我靠注意力来审阅,而关键信息没有被突出到让我不可能漏掉的位置。

理论依据

Erwin Wu 的《AI 编程的系统性工程闭环》把这个问题讲得很清楚:可靠的 AI 编程是一个三段闭环,需求工程要做的是消除隐性假设和建立唯一事实来源(SSOT)。

AI 编程的三段式工程闭环

我遇到的偏差正好对应第一段:AI 继承了“入团 → 初始化 Agent”的假设,我没有把它暴露出来确认或拒绝。

解法:前 15 行决定审阅效果

我给自己定了一条硬规则:中大型实现任务的计划文件,前 15 行以内必须包含两个结构化段落,技术细节放后面。

计划结构:前 15 行决定审阅效果

## 行为增量——一张表格,改动前后每个场景一行。AI 带了任何你没要求的行为,它必须出现在这张表里。

| 场景       | 改动前 | 改动后           |
|------------|--------|------------------|
| SSO 登录   | 不入团 | 自动加入团队     |
| SSO 登录   | 无 Agent | 自动创建默认 Agent |

## 推断假设——编号列表,列出所有从现有代码继承的行为假设。你没确认的假设,视为未生效。

1. 假设 SSO 入团复用现有邀请链路的 Agent 初始化逻辑
2. 如不需要请告知,我只做入团不加 Agent

为什么要求放在前 15 行?因为审阅者的注意力是递减的。打开计划,前几行必读,越往后越跳过。信息一样,位置不同,效果完全不同。

效果

我把规则加进了全局 AGENTS.md 和 write-plan Skill 模板。在最近一个计划中,AI 自动生成了 8 行行为增量和 4 条推断假设,我扫一眼开头就完成了行为层面的验收——旧流程需要通读全文才能做到。

总结

需求对齐不是写更多文档,是建立结构让偏差自己跳出来。

靠注意力审阅不可靠——你总有累的时候、赶时间的时候。靠结构审阅才可靠——只要格式对了,偏差就无处可藏。