程序员如何用 AI Agent 完成一个真实开发任务:从需求分析到代码审查
很多程序员已经用 AI 写过代码,但真正把 AI 用进开发流程时,经常会遇到三个问题:
- AI 能生成代码,却不理解完整需求;
- 单个文件看起来没问题,放进项目后却无法运行;
- 改动做完了,却不知道应该怎样验证。
原因并不复杂:我们把 AI 当成了“代码生成器”,而不是一个需要上下文、边界和验收标准的协作者。
这篇文章不讨论复杂理论。我们用一个真实、常见的小需求,演示如何让 AI Agent 参与需求分析、代码定位、方案设计、编码、测试和代码审查。
一、这次要完成什么任务
假设我们维护一个后台管理系统,产品提出了一个需求:
用户列表增加“账号状态”筛选,支持查询全部、正常和已禁用用户,并保证旧接口调用不受影响。
这个需求看起来只是增加一个下拉框,实际上可能涉及:
- 前端筛选控件;
- 请求参数;
- Controller 接口;
- Service 查询逻辑;
- Mapper 或 ORM 条件;
- 参数为空时的兼容行为;
- 自动化测试和回归验证。
如果只对 AI 说“帮我增加账号状态筛选”,它很可能直接猜项目结构、字段名和技术栈。正确做法是先让 Agent 调查,再让它修改。
二、第一步:把模糊需求变成验收标准
开始写代码前,先让 AI 整理需求。可以使用下面的提示词:
你是这个项目的开发协作者。先不要修改代码。 需求:用户列表增加账号状态筛选,支持全部、正常、已禁用,旧接口调用不能受影响。 请输出: 1. 你对需求的理解; 2. 需要确认的字段和接口; 3. 可能涉及的前后端模块; 4. 可执行的验收标准; 5. 存在歧义的地方,不要自行猜测。经过整理后,验收标准可以变成:
- 不传状态参数时,查询结果与改造前一致;
- 传入“正常”时,只返回正常用户;
- 传入“已禁用”时,只返回已禁用用户;
- 非法状态值应被拒绝或按照项目既有规范处理;
- 分页、关键字搜索和其他已有筛选条件仍然有效;
- 前端刷新页面后,默认显示全部状态;
- 后端测试和前端构建通过。
这一步很重要。没有验收标准,AI 只会判断“代码是否写完”;有了验收标准,它才有机会判断“需求是否完成”。
三、第二步:让 Agent 先调查项目
接下来不要急着修改代码,而是要求 AI 找到真实实现路径。
请在当前项目中定位用户列表的完整调用链,先只调查,不修改文件。 需要给出: - 前端页面和请求方法; - 后端 Controller、Service、Mapper 或 Repository; - 用户状态对应的真实字段、枚举和数据库含义; - 当前分页与筛选条件的实现方式; - 可能需要修改的文件; - 每个结论对应的代码位置。 如果项目中的实际实现与需求描述不一致,以代码为准并明确指出。一个可靠的 Agent 应该通过搜索项目得到证据,而不是凭经验编造文件名。
调查完成后,我们重点检查三件事:
1. 状态字段的真实含义
数据库里可能使用status、enabled、disabled_flag,也可能通过删除标记表达状态。字段值也未必是0/1。
如果这里判断错误,后面的代码写得再漂亮也没有意义。
2. 查询条件放在哪里
有的项目在 Service 拼装查询对象,有的在 Mapper XML 中写动态条件,还有的使用 ORM 查询构造器。应该延续项目现有风格,不要为了一个小需求引入新的查询方式。
3. 旧调用是否依赖空参数
新增参数必须是可选的。不传参数时,不应该意外变成只查询某一种状态。
四、第三步:先设计最小改动方案
完成调查后,让 Agent 输出方案,而不是立即写代码。
根据刚才找到的真实代码,设计一个最小改动方案。 要求: - 不改变现有接口路径; - 新状态参数保持可选; - 复用项目已有枚举和校验方式; - 不进行无关重构; - 列出每个文件的修改内容; - 列出风险、测试点和回滚方式。 方案确认前不要修改代码。一个合理的方案通常包括:
- 前端查询表单增加状态下拉框;
- 请求对象增加可选状态参数;
- 后端查询对象接收该参数;
- 查询层仅在参数非空时增加条件;
- 增加正常、禁用和不传参数三组测试;
- 对非法状态值复用现有参数校验。
这里的关键是“最小改动”。AI 很容易顺手重命名变量、抽取公共方法、调整格式,最终让一个简单需求变成大范围改动。任务提示中应该明确禁止无关重构。
五、第四步:分阶段让 AI 修改代码
不要让 Agent 一次改完整个项目。可以分成后端、前端和测试三个阶段。
阶段一:后端查询链路
现在只实现后端部分。 要求: 1. 使用刚才确认的真实状态字段和枚举; 2. 状态参数为空时不增加筛选条件; 3. 非法值按照项目现有方式校验; 4. 不修改无关文件; 5. 完成后说明改了什么,以及每一处改动对应哪条验收标准。完成后先查看改动差异。重点检查:
- 是否把可选参数写成了必填参数;
- 动态条件是否判断了空值;
- 字段值是否与数据库实际口径一致;
- 是否影响原来的分页、排序和关键字搜索;
- 是否出现无关格式化。
阶段二:前端筛选控件
后端方案确认后,再实现前端状态筛选。 要求: - 复用当前页面已有表单组件和字典; - 默认值表示“全部”; - 查询和重置行为与其他筛选项一致; - 不改变现有页面布局风格; - 不引入新的依赖。前端最容易遗漏的是“重置”。下拉框可以查询,不代表功能已经完成。点击重置后,应清除状态参数并重新查询全部数据。
阶段三:测试与验证
请根据验收标准补充最小必要测试,并执行与本次改动直接相关的检查。 至少覆盖: - 不传状态; - 查询正常状态; - 查询禁用状态; - 非法状态; - 状态与关键字、分页组合查询。 不要为了让测试通过而降低断言或删除原有测试。六、第五步:不要只相信“测试通过”
AI Agent 经常会说“代码应该可以工作”。“应该”不等于已经验证。
我们需要它提供可检查的证据:
- 实际执行了什么命令;
- 哪些测试通过;
- 哪些检查因为环境限制没有执行;
- 是否出现警告;
- 是否仍存在未验证的风险。
可以使用下面的提示词:
请汇总验证结果,只报告实际执行过的内容。 按以下格式输出: - 已执行的检查; - 通过的测试; - 失败或未执行的检查及原因; - 仍需人工验证的页面操作; - 不确定项。 不要把代码分析结果表述成已经运行通过。人工页面验收仍然不可缺少:
- 默认进入用户列表,记录总数;
- 选择正常状态,确认结果中没有禁用用户;
- 选择禁用状态,确认结果中没有正常用户;
- 点击重置,确认恢复全部状态;
- 组合使用关键字和状态筛选;
- 翻页后确认筛选条件仍然生效。
七、第六步:让另一个视角做代码审查
编码完成后,不要只让原来的 Agent 总结自己的工作。可以重新开启一次审查,让它以审查者视角检查差异。
请对当前改动进行代码审查,不要修改文件。 重点检查: - 是否完整满足验收标准; - 是否破坏旧接口兼容性; - 状态字段和枚举口径是否正确; - 是否存在空值、非法值和组合查询问题; - 是否有权限、数据越权或性能风险; - 测试是否真正覆盖核心分支; - 是否包含无关改动。 只报告能够从代码中证明的问题。每个问题给出文件位置、影响和修复建议。审查结果也不能照单全收。AI 提出的每个问题都应该回到代码中验证:它究竟是真问题,还是不了解项目约定产生的误判。
八、一套可以复用的 AI Agent 开发流程
把上面的过程压缩后,可以得到一套通用流程:
需求澄清 → 项目调查 → 验收标准 → 最小方案 → 分阶段编码 → 自动化验证 → 人工验收 → 独立代码审查 → 交付总结每个阶段都有明确产物:
| 阶段 | 应得到的产物 |
|---|---|
| 需求澄清 | 无歧义的需求说明 |
| 项目调查 | 带代码位置的调用链 |
| 方案设计 | 文件级修改清单和风险 |
| 编码 | 范围可控的代码差异 |
| 验证 | 可复查的测试结果 |
| 审查 | 有证据的问题清单 |
| 交付 | 改动、验证和剩余风险说明 |
九、使用 AI Agent 时最常见的五个错误
1. 一句话让 AI 直接开工
上下文不足时,AI 只能猜。先调查,再修改,通常比反复返工更快。
2. 一次修改范围太大
任务越大,越难检查。按后端、前端、测试拆分,出现问题时更容易定位。
3. 没有写明“不要做什么”
除了目标,还应明确禁止无关重构、禁止新增依赖、禁止改变接口兼容行为。
4. 把 AI 的总结当成验证结果
只有实际执行的测试和人工验收才算证据。
5. 不检查最终差异
无论使用什么 Agent,最终代码责任仍属于提交代码的人。合并前必须检查改动范围、关键逻辑和测试结果。
十、结语
AI Agent 的价值,不只是替程序员多写几行代码,而是把需求分析、代码定位、实现、验证和审查串成一条更高效的工作流。
真正决定效果的,不是提示词写得多华丽,而是有没有做到四件事:
- 给它真实的项目上下文;
- 用验收标准定义完成;
- 把任务拆成可检查的小阶段;
- 要求它为结论提供证据。
当你开始用“带一名开发协作者”的方式使用 AI,而不是把它当成代码补全工具,AI 才会真正进入你的日常开发流程。