多 AI 协作开发如何避免“自己写、自己审”:Codex、Claude Code 与工程验收闭环

多 AI 协作真正解决的,不是让更多模型同时写代码,而是重新建立需求、执行、审查、测试和验收之间的职责边界。

前言

我叫张智博,就读于石家庄邮电职业技术学院。

过去一段时间,我使用 AI 参与个人网站、评级币运营工具、企业内容系统和项目材料整理。

一开始,我也尝试过把一句很长的需求直接交给一个模型:

请帮我把整个项目全部做好,
功能完整、界面高级、没有Bug,
并且自动部署。

这种方式看起来省事,但结果往往会出现几个问题:

  • AI 自己补充了没有确认的需求;
  • 功能很多,但核心流程不好用;
  • 页面视觉被修改后,原有逻辑被破坏;
  • 工具完成实现后,又自己宣布“全部正常”;
  • 修复一个问题时引入另一个问题;
  • 多轮对话后,项目约束逐渐丢失。

后来,我开始把不同 AI 拆成不同角色,并增加工程验收门槛。


一、核心原则:执行者不能成为唯一验收者

我目前常用的角色划分是:

角色 工具 主要职责
需求与最终决策 人工 目标、边界、事实、取舍
UI方案 Stitch 布局、视觉参考、组件结构
工程执行 Codex 编码、修复、测试、部署
产品与代码审查 Claude Code 流程审查、缺陷分析、风险检查
自动验证 CI与脚本 构建、类型、测试、链接、产物检查

这并不是因为某个工具只能完成某一种任务,而是为了避免:

同一个模型
→ 自己解释需求
→ 自己完成实现
→ 自己证明没有问题

二、建立一个项目事实源

多轮 AI 协作最容易发生“上下文漂移”。

因此,项目根目录应该有一个稳定的事实文件:

PROJECT_CONTEXT.md

内容包括:

# 项目目标

构建一个评级币运营工具,核心流程是:

输入闲鱼主页
→ 读取商品
→ 预览
→ 导入飞书

# 当前必须保留

- 现有SQLite数据
- 永久商品编号
- 商品图片关联
- 飞书字段映射
- 同步日志

# 明确删除

- Excel导出
- 无用批量导入
- 重复入口

# 不允许

- 未确认直接覆盖成本和库存
- 为了重构删除现有可用功能
- 使用模拟数据冒充真实接口成功

# 完成标准

- 构建通过
- 现有测试通过
- 核心流程可手动验证
- 失败状态有明确提示

任何 AI 开始任务前,先阅读这个文件。

它比依赖聊天记录更加稳定。


三、每个任务使用任务契约

一个可执行任务至少需要:

目标
允许修改的范围
禁止修改的范围
验收标准
输出要求

示例:

# 任务:修复飞书附件导入

## 目标

解决多附件记录只保存第一张图片的问题。

## 允许修改

- 飞书附件解析模块
- 附件关联表写入逻辑
- 对应测试

## 禁止修改

- 商品编号生成规则
- 库存状态
- 页面整体视觉
- 数据库已有记录

## 验收标准

1. 一条记录包含3个附件时,保存3条附件关联;
2. 顺序与来源一致;
3. 重复同步不产生重复附件;
4. 测试通过;
5. 输出改动文件和验证结果。

任务越明确,AI 越不容易“顺便重构整个项目”。


四、先让审查模型找问题,不要直接修改

当需要产品审查时,我会把任务分成两个阶段:

阶段一:只审查,不改代码
阶段二:把审查结果交给执行模型修改

审查结果应当包含:

问题
证据
影响
优先级
建议
验收方式

示例:

| 问题 | 证据 | 影响 | 优先级 | 验收方式 |
|---|---|---|---|---|
| 同步失败无具体原因 | UI只显示“失败” | 用户无法判断如何重试 | P0 | 模拟超时并检查错误提示 |
| 重复导入无预警 | 未显示来源记录状态 | 可能产生重复商品 | P0 | 连续导入同一记录 |

这种方式可以避免审查模型直接大规模改动,导致无法区分“原问题”和“新改动”。


五、执行模型必须提交可审查的差异

AI 完成修改后,不应只返回:

已全部完成,程序运行正常。

而应返回:

修改了哪些文件
每个文件为什么修改
运行了哪些命令
哪些测试通过
哪些内容没有验证
是否存在遗留风险

推荐输出模板:

## 改动文件

- `src/feishu/attachments.py`
- `tests/test_attachments.py`

## 实现内容

- 支持遍历全部附件;
- 使用来源Token去重;
- 保存sort_order;
- 补充重复同步测试。

## 验证

- `pytest`:通过
- `python -m compileall`:通过
- 真实飞书环境:未验证

## 遗留风险

- 超大附件下载仍需增加大小限制。

明确写出“未验证”,比没有证据地宣布“全部正常”更有价值。


六、自动检查应当成为合并门槛

前端项目常见门槛:

{
  "scripts": {
    "lint": "eslint .",
    "typecheck": "tsc --noEmit",
    "test": "vitest run",
    "build": "next build",
    "check": "npm run lint && npm run typecheck && npm run test && npm run build"
  }
}

Python 项目可以使用:

ruff
mypy
pytest
compileall

GitHub Actions 示例:

name: Quality Gate

on:
  pull_request:

  push:
    branches:
      - main

jobs:
  verify:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm

      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm run test
      - run: npm run build

AI 可以解释测试结果,但不能替代命令的真实执行。


七、UI修改需要建立视觉不变量

AI 修改页面时,经常会“优化”掉原本正确的设计。

因此,可以明确视觉不变量:

首屏背景不变
导航结构不变
品牌名称不变
字体层级可以调整
项目卡片内容可以优化
移动端必须可用

还可以为关键页面保存截图基线:

首页桌面端
首页移动端
导航展开状态
项目详情首屏
错误状态

修改完成后,应逐项对照,而不是只看某一个局部页面。


八、不同模型负责不同层次的审查

同一份代码可以经过三层审查:

第一层:编译和自动测试
第二层:代码与安全审查
第三层:真实用户流程验收

例如评级币同步工具:

自动测试
→ 是否正确去重

代码审查
→ 是否存在事务和异常处理问题

人工验收
→ 用户是否看得懂预览、跳过和失败状态

三层关注的问题不同,不能互相替代。


九、限制一次任务的改动半径

任务过大时,AI 容易在多个模块之间产生连锁修改。

建议约束:

一次任务只解决一个主问题
修改文件数量必须能够解释
数据库迁移单独审查
UI和后端逻辑尽量分开提交
部署变更单独验证

Git 提交也应保持清晰:

fix: preserve all Feishu attachments

test: add idempotent import coverage

docs: update synchronization workflow

不要把大量修改统一提交成:

update project

十、控制Token的关键是减少重复上下文

多 AI 协作并不意味着把整个项目每次都重新解释一遍。

更节省上下文的方式是:

项目长期事实
→ PROJECT_CONTEXT.md

本次任务
→ TASK.md

审查结果
→ REVIEW.md

验收记录
→ ACCEPTANCE.md

AI 每次只读取必要文件和相关代码。

对于大型仓库,还可以明确:

先定位相关模块
不要遍历无关构建产物
不要重复读取锁文件
不要在未确认前安装新依赖

十一、数据库变更必须单独审查

AI 修改数据库时,风险通常高于普通 UI 修改。

迁移任务至少需要回答:

新增了什么字段
旧数据如何兼容
是否允许为空
是否有默认值
回滚方案是什么
是否会覆盖原数据

示例迁移说明:

## 数据库变更

新增字段:

- `source_platform`
- `source_record_id`
- `sync_status`

兼容策略:

- 历史数据的`source_platform`默认为`local`;
- `source_record_id`允许为空;
- 不修改现有商品编号;
- 不覆盖成本、库存和利润字段。

回滚方式:

- 删除新增索引;
- 删除新增字段;
- 恢复迁移前备份。

数据库迁移不能只写“已自动升级”。


十二、部署完成不等于任务完成

一个完整的部署验收应包括:

构建是否成功
部署流程是否成功
线上首页是否可访问
二级页面是否可访问
静态资源是否加载
关键交互是否正常
Canonical是否正确
接口是否连接真实环境

可以将验收结果保存为:

# 发布验收

## 自动检查

- 构建:通过
- 类型检查:通过
- 测试:通过
- 链接检查:通过

## 线上检查

- 首页:HTTP 200
- 项目页:HTTP 200
- 移动端导航:正常
- 表单提交:正常

## 未验证

- 低速网络下的视频加载
- 旧版Safari兼容性

十三、我的完整协作闭环

目前我更倾向于使用以下流程:

1. 人工确定真实目标
2. 写清任务契约
3. 执行模型定位并修改
4. 自动运行质量门槛
5. 审查模型检查产品与代码
6. 执行模型根据审查修复
7. 人工完成真实场景验收
8. 合并、部署并记录结果

对应产物:

需求有文档
修改有差异
测试有结果
审查有证据
验收有记录
部署可追溯

十四、总结

多 AI 协作真正解决的,不是让更多模型同时写代码,而是把软件工程中的职责分离重新建立起来:

需求不等于实现
实现不等于正确
测试不等于好用
审查不等于验收
上线不等于结束

我在个人网站、企业内容系统和数据同步工具中逐渐形成的原则是:

AI 可以承担大量执行工作,但项目事实、边界、验收标准和最终责任必须掌握在人手中;执行者不能成为唯一验收者,任何“已完成”都应该有可以复现的证据。


关于作者

张智博,石家庄邮电职业技术学院学生,主要关注 AI 工具应用、产品设计、网站建设、项目运营与工程化实践,持续使用 Codex、Claude Code、Stitch 等工具探索多 AI 软件开发流程。

个人作品集:张智博的思考空间

个人官网:https://www.zzb9.cn

GitHub:https://github.com/zzb99

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐