文章目录
- [1 -> 引言](#1 -> 引言)
- [2 -> 为什么需要「对抗式开发」?](#2 -> 为什么需要「对抗式开发」?)
-
- [2.1 -> 单AI辅助开发的核心痛点](#2.1 -> 单AI辅助开发的核心痛点)
- [2.2 -> 对抗式开发的核心目标](#2.2 -> 对抗式开发的核心目标)
- [3 -> 核心理念:双代理、单事实源、按风险审查](#3 -> 核心理念:双代理、单事实源、按风险审查)
-
- [3.1 -> 角色分工(核心原则)](#3.1 -> 角色分工(核心原则))
- [3.2 -> 关键原则(不可突破)](#3.2 -> 关键原则(不可突破))
- [4 -> 适用范围:明确「该对抗」的场景](#4 -> 适用范围:明确「该对抗」的场景)
-
- [4.1 -> 非简单开发任务(强制完整流程)](#4.1 -> 非简单开发任务(强制完整流程))
- [4.2 -> 高风险非代码分析任务(轻量对抗流程)](#4.2 -> 高风险非代码分析任务(轻量对抗流程))
- [4.3 -> 模糊场景兜底规则](#4.3 -> 模糊场景兜底规则)
- [5 -> 核心流程设计:灵活路由与分级审查](#5 -> 核心流程设计:灵活路由与分级审查)
-
- [5.1 -> 角色路由策略](#5.1 -> 角色路由策略)
- [5.2 -> 三档审查强度(平衡成本与风险)](#5.2 -> 三档审查强度(平衡成本与风险))
- [5.3 -> 高风险非代码分析的轻量流程](#5.3 -> 高风险非代码分析的轻量流程)
- [6 -> 安全加固核心:脱敏门 + 包装脚本](#6 -> 安全加固核心:脱敏门 + 包装脚本)
-
- [6.1 -> 为什么脱敏是P0级需求?](#6.1 -> 为什么脱敏是P0级需求?)
- [6.2 -> 脱敏门规则(强制执行)](#6.2 -> 脱敏门规则(强制执行))
-
- [6.2.1 -> 非代码分析的额外脱敏规则](#6.2.1 -> 非代码分析的额外脱敏规则)
- [6.3 -> 包装脚本:run-ai-review(推荐入口)](#6.3 -> 包装脚本:run-ai-review(推荐入口))
-
- [6.3.1 -> 脚本核心逻辑(Shell版片段)](#6.3.1 -> 脚本核心逻辑(Shell版片段))
- [7 -> 落地实操:从仓库结构到完整流程](#7 -> 落地实操:从仓库结构到完整流程)
-
- [7.1 -> 推荐仓库结构(单事实源)](#7.1 -> 推荐仓库结构(单事实源))
- [7.2 -> 手动MVP流程(最小可行版本)](#7.2 -> 手动MVP流程(最小可行版本))
-
- [7.2.1 -> 关键步骤细节](#7.2.1 -> 关键步骤细节)
- [7.3 -> 权威JSON Schema:审查输出的唯一契约](#7.3 -> 权威JSON Schema:审查输出的唯一契约)
-
- [7.3.1 -> Schema核心片段](#7.3.1 -> Schema核心片段)
- [8 -> 关键保障:长上下文遗忘防护](#8 -> 关键保障:长上下文遗忘防护)
- [9 -> 实践避坑:不建议做的事](#9 -> 实践避坑:不建议做的事)
- [10 -> 评估与复盘:量化流程价值](#10 -> 评估与复盘:量化流程价值)
- [11 -> 总结与展望](#11 -> 总结与展望)

1 -> 引言

在AI辅助开发成为常态的今天,单AI工具「自写自审」的模式逐渐暴露短板------不仅容易陷入认知盲区,还可能在高风险场景(如安全、权限、隐私处理)中埋下合规隐患。基于OpenAI Codex与Anthropic Claude Code打造的对抗式开发方案,通过「双AI分工协同+人类终审」的模式,既保留AI提效的优势,又通过对抗性审查暴露分歧、沉淀证据,同时强化数据安全与流程合规。本文将详细拆解这套方案的设计思路、落地细节与安全加固核心,附完整实操指南。
2 -> 为什么需要「对抗式开发」?
2.1 -> 单AI辅助开发的核心痛点
AI辅助开发工具(如Codex)能显著提升编码效率,但「自写自审」存在天然缺陷:
- 认知盲区共享:同一AI对自身代码的逻辑漏洞、安全风险易「视而不见」,AI一致不代表代码正确;
- 高风险场景失控:涉及权限、密钥、隐私、架构设计的高风险改动,单AI无对抗性校验易引发合规问题;
- 流程不可审计:无标准化审查流程,AI修改记录、审查结论无法沉淀,责任边界模糊;
- 数据安全漏洞:直接将含密钥、PII(个人身份信息)的代码diff外送第三方模型,存在数据泄露风险。
2.2 -> 对抗式开发的核心目标
打造可控、可复用、可审计的双AI协同流程:
- 避免单AI自写自审,拆分「实现方」与「审查方」角色;
- 关键节点保留人类裁决权,AI仅作为辅助;
- 全流程强化数据安全,杜绝敏感信息外送;
- 按风险分级审查,平衡提效与合规成本。
3 -> 核心理念:双代理、单事实源、按风险审查
3.1 -> 角色分工(核心原则)
对抗式开发的核心是「职责分离」,明确两个AI代理的定位:
| 角色 | 工具映射(默认) | 核心职责 | 权限边界 |
|---|---|---|---|
| 实现方(Implementer) | Codex | 读仓库、制定计划、代码实现、验证、裁决审查反馈 | 可读写文件、运行验证工具,无敏感信息外送权限 |
| 审查方(Reviewer) | Claude Code | 只读对抗审查,仅基于实现方提供的材料输出审查结论 | 不可读仓库、不可改文件、不可运行工具,仅输出标准化JSON |
| 人类 | - | 确认最终计划、裁决争议性反馈、终审合规风险 | 掌握最终决策权,负责流程合规性把关 |
核心定位:「两个AI都满意 ≠ 代码正确」,对抗式开发的价值是暴露分歧、沉淀证据,将人类注意力聚焦到真正需要判断的环节。
3.2 -> 关键原则(不可突破)
- 单事实源:所有规则、契约(如JSON Schema)唯一存储,避免多版本冲突;
- 按风险分级:低风险场景简化流程,高风险场景全流程对抗;
- 安全优先:任何外送第三方模型的内容必须经过脱敏,物理上不可绕过;
- 可审计:所有审查记录、成本、裁决结果全沉淀,支持追溯。
4 -> 适用范围:明确「该对抗」的场景
并非所有开发任务都需要走完整对抗流程,需建立「ROI闸门」,仅对高风险场景启用:
4.1 -> 非简单开发任务(强制完整流程)
- 多文件改动、架构/模块边界/工作流变化;
- 数据迁移、数据库Schema变更;
- CI/CD、自动化脚本、部署流程调整;
- 认证、权限、支付、隐私、密钥处理等高风险改动;
- 用户可见行为变化、影响生产系统的核心业务路径改动。
4.2 -> 高风险非代码分析任务(轻量对抗流程)
即使不改代码,以下场景仍需对抗式分析:
- 安全方案评估、威胁建模、数据外送边界分析;
- 架构/流程/CI/CD策略的设计调整;
- 影响团队协作、审查门禁、合规口径的判断;
- 用户明确要求「深度分析」「安全隐患排查」的任务。
4.3 -> 模糊场景兜底规则
若一个任务可被解释为「普通Q&A」或「高风险分析」,默认按高风险处理,至少跑轻量对抗分析并输出审查回执。
5 -> 核心流程设计:灵活路由与分级审查
5.1 -> 角色路由策略
默认「主力工具做实现,另一工具做审查」,可根据场景互换:
| 场景 | 实现方 | 审查方 |
|---|---|---|
| 主力工具为Codex | Codex | Claude Code |
| 主力工具为Claude Code | Claude Code | Codex(经codex-plugin-cc) |
| 大规模重构/多文件批量改 | 已加载上下文的工具 | 另一方 |
| 交叉验证结论 | 原审查方 | 原实现方 |
5.2 -> 三档审查强度(平衡成本与风险)
避免无差别使用最高成本的「跨厂商对抗」,按风险分级:
| 档位 | 做法 | 成本 | 适用场景 |
|---|---|---|---|
| 本地自审 | 同工具自带/code-review指令自审 | ≈免费 | 低风险单文件改动、不命中高风险场景 |
| 同工具新会话只读审 | 新开同工具会话,按标准化Schema输出JSON | 中 | 命中高风险场景但非核心路径 |
| 跨厂商对抗 | Codex+Claude双工具对抗(方案默认) | 高 | 核心路径高风险改动、低档位审查存疑 |
5.3 -> 高风险非代码分析的轻量流程
针对无需改代码的分析任务,简化流程但保留对抗核心:
- Codex输出分析框架(边界、假设、初步结论、不确定性);
- Claude Code新开会话只读复审,聚焦「遗漏风险、错误假设、替代方案」;
- Codex裁决反馈,争议项升级人类;
- 必须输出Claude审查回执,无回执视为未完成分析。
#mermaid-svg-CLLC2eYIn6tVQOtD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CLLC2eYIn6tVQOtD .error-icon{fill:#552222;}#mermaid-svg-CLLC2eYIn6tVQOtD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CLLC2eYIn6tVQOtD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CLLC2eYIn6tVQOtD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CLLC2eYIn6tVQOtD .marker.cross{stroke:#333333;}#mermaid-svg-CLLC2eYIn6tVQOtD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CLLC2eYIn6tVQOtD p{margin:0;}#mermaid-svg-CLLC2eYIn6tVQOtD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster-label text{fill:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster-label span{color:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster-label span p{background-color:transparent;}#mermaid-svg-CLLC2eYIn6tVQOtD .label text,#mermaid-svg-CLLC2eYIn6tVQOtD span{fill:#333;color:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD .node rect,#mermaid-svg-CLLC2eYIn6tVQOtD .node circle,#mermaid-svg-CLLC2eYIn6tVQOtD .node ellipse,#mermaid-svg-CLLC2eYIn6tVQOtD .node polygon,#mermaid-svg-CLLC2eYIn6tVQOtD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CLLC2eYIn6tVQOtD .rough-node .label text,#mermaid-svg-CLLC2eYIn6tVQOtD .node .label text,#mermaid-svg-CLLC2eYIn6tVQOtD .image-shape .label,#mermaid-svg-CLLC2eYIn6tVQOtD .icon-shape .label{text-anchor:middle;}#mermaid-svg-CLLC2eYIn6tVQOtD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CLLC2eYIn6tVQOtD .rough-node .label,#mermaid-svg-CLLC2eYIn6tVQOtD .node .label,#mermaid-svg-CLLC2eYIn6tVQOtD .image-shape .label,#mermaid-svg-CLLC2eYIn6tVQOtD .icon-shape .label{text-align:center;}#mermaid-svg-CLLC2eYIn6tVQOtD .node.clickable{cursor:pointer;}#mermaid-svg-CLLC2eYIn6tVQOtD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CLLC2eYIn6tVQOtD .arrowheadPath{fill:#333333;}#mermaid-svg-CLLC2eYIn6tVQOtD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CLLC2eYIn6tVQOtD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CLLC2eYIn6tVQOtD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CLLC2eYIn6tVQOtD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CLLC2eYIn6tVQOtD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CLLC2eYIn6tVQOtD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster text{fill:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD .cluster span{color:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CLLC2eYIn6tVQOtD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CLLC2eYIn6tVQOtD rect.text{fill:none;stroke-width:0;}#mermaid-svg-CLLC2eYIn6tVQOtD .icon-shape,#mermaid-svg-CLLC2eYIn6tVQOtD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CLLC2eYIn6tVQOtD .icon-shape p,#mermaid-svg-CLLC2eYIn6tVQOtD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CLLC2eYIn6tVQOtD .icon-shape .label rect,#mermaid-svg-CLLC2eYIn6tVQOtD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CLLC2eYIn6tVQOtD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CLLC2eYIn6tVQOtD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CLLC2eYIn6tVQOtD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
用户发起高风险分析请求
Codex输出分析框架
Claude只读复审(输出JSON)
Codex裁决反馈
是否有争议?
人类终审
输出最终结论+审查回执
6 -> 安全加固核心:脱敏门 + 包装脚本
原版对抗式开发的最大隐患是「敏感信息裸送第三方模型」,安全加固版通过「强制脱敏门」+「不可绕过的包装脚本」解决该问题。
6.1 -> 为什么脱敏是P0级需求?
- 送审内容常包含
git diff、验证日志,易夹带.env、硬编码密钥、PII; - 第三方模型(如Claude)的会话留存边界不可控,需按「最坏情况」处理;
- 若审查方本身在排查密钥泄漏,流程自身却外送密钥,存在致命逻辑矛盾。
6.2 -> 脱敏门规则(强制执行)
所有送审内容在构造Prompt前必须经过以下过滤(由脚本硬锁,不可绕过):
| 脱敏类型 | 规则 | 处理方式 |
|---|---|---|
| 路径黑名单 | .env*、*.pem、*.key、*secret*等 |
整文件排除,不纳入审查输入 |
| 高置信Secret | 私钥块、AKIA开头密钥、Bearer Token、含口令的连接串 | 命中即中止送审,不打码 |
| 低置信PII | 邮箱、手机号、卡号、身份证 | 自动打码(替换为<EMAIL_REDACTED>等占位符) |
| 验证输出 | 日志、命令行输出 | 截断+同步脱敏 |
| 可选增强 | gitleaks/trufflehog扫描 | 命中非零退出码即中止 |
6.2.1 -> 非代码分析的额外脱敏规则
针对安全方案、威胁建模等分析任务,需做「语义抽象」:
- 不外送真实客户数据、生产域名/内网地址、漏洞利用细节;
- 不外送未公开的商业策略、风控规则、合规争议;
- 能抽象的优先抽象,抽象后仍含敏感信息则禁止外送。
6.3 -> 包装脚本:run-ai-review(推荐入口)
直接调用底层helper会绕过脱敏门,因此封装run-ai-review脚本(支持PowerShell/Shell),将以下逻辑硬编码进脚本,物理上不可绕过:
- 登录自检:提前校验Claude登录状态,避免透传模糊错误;
- Schema Version Guard:强制校验Schema包含
schema_version,防止静默使用错误契约; - 脱敏门执行:按上述规则过滤敏感内容;
- 唯一临时文件:生成带GUID的临时Prompt文件,执行后自动删除;
- 成本自动记账:将审查成本写入
reviews/cost-ledger.csv; - 标准化退出码:明确区分「通过」「JSON非法」「Schema校验失败」「脱敏拦截」等状态。
6.3.1 -> 脚本核心逻辑(Shell版片段)
bash
# 高置信Secret拦截(命中即中止)
if printf '%s' "$RAW" | grep -Eq \
-e '-----BEGIN [A-Z ]*PRIVATE KEY-----' \
-e 'AKIA[0-9A-Z]{16}' \
-e '(mongodb(\+srv)?|postgres(ql)?|mysql|redis)://[^[:space:]]+:[^[:space:]]+@'; then
echo "脱敏门拦截:送审内容命中疑似密钥/凭据,已中止。" >&2; exit 4
fi
# PII自动打码
REDACTED="$(printf '%s' "$RAW" \
| sed -E 's/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/<EMAIL_REDACTED>/g' \
| sed -E 's/(^|[^0-9])1[3-9][0-9]{9}([^0-9]|$)/\1<PHONE_REDACTED>\2/g')"
7 -> 落地实操:从仓库结构到完整流程
7.1 -> 推荐仓库结构(单事实源)
├── AGENTS.md # 双工具共享的顶层规则(单一事实源)
├── CLAUDE.md # Claude专用入口,引用AGENTS.md
├── docs/
│ └── ai-review/
│ ├── code_review.md # 审查分级、清单、字段说明
│ └── claude_review_schema.json # 权威JSON Schema(唯一契约)
├── scripts/
│ ├── run-ai-review.ps1 # Windows包装脚本
│ └── run-ai-review.sh # POSIX包装脚本
├── reviews/ # 审查产物+成本账本
├── .codex/config.toml # Codex项目配置
└── .claude/settings.json # Claude权限基线
7.2 -> 手动MVP流程(最小可行版本)
无需hooks/插件/CI,仅通过包装脚本+基础文件即可跑通完整流程:
#mermaid-svg-kKgE0ZmvRwUCsFXQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .error-icon{fill:#552222;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .marker.cross{stroke:#333333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ p{margin:0;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster-label text{fill:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster-label span{color:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster-label span p{background-color:transparent;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .label text,#mermaid-svg-kKgE0ZmvRwUCsFXQ span{fill:#333;color:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .node rect,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node circle,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node ellipse,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node polygon,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .rough-node .label text,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node .label text,#mermaid-svg-kKgE0ZmvRwUCsFXQ .image-shape .label,#mermaid-svg-kKgE0ZmvRwUCsFXQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .rough-node .label,#mermaid-svg-kKgE0ZmvRwUCsFXQ .node .label,#mermaid-svg-kKgE0ZmvRwUCsFXQ .image-shape .label,#mermaid-svg-kKgE0ZmvRwUCsFXQ .icon-shape .label{text-align:center;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .node.clickable{cursor:pointer;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .arrowheadPath{fill:#333333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kKgE0ZmvRwUCsFXQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kKgE0ZmvRwUCsFXQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster text{fill:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .cluster span{color:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kKgE0ZmvRwUCsFXQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .icon-shape,#mermaid-svg-kKgE0ZmvRwUCsFXQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .icon-shape p,#mermaid-svg-kKgE0ZmvRwUCsFXQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .icon-shape .label rect,#mermaid-svg-kKgE0ZmvRwUCsFXQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kKgE0ZmvRwUCsFXQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kKgE0ZmvRwUCsFXQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kKgE0ZmvRwUCsFXQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Step0:环境前置(登录+Schema准备)
Step1:任务分级(判断是否走对抗流程)
Step2:Codex制定实现计划
Step3:Claude计划级审查(包装脚本)
Step4:Codex裁决反馈,形成最终计划
Step5:人类确认最终计划
Step6:Codex实现+验证
Step7:Claude实现后审查(包装脚本)
Step8:Codex最终裁决+修复
Step9:输出可验证审查回执
7.2.1 -> 关键步骤细节
-
Step3/Step7 审查调用示例(Windows) :
powershell# 计划级审查 pwsh -File scripts\run-ai-review.ps1 -InputFile .\plan-input.txt -TaskId feat-auth -Phase plan -Model opus -Effort max -Round 1 # 实现后审查(重点脱敏git diff) pwsh -File scripts\run-ai-review.ps1 -InputFile .\post-input.txt -TaskId feat-auth -Phase post -Model opus -Effort max -Round 1 -
Step9 可验证审查回执 :必须包含以下信息,口头声明无效:
- Claude调用状态(成功/失败)、审查阶段、
recommended_decision; - 问题数(P0/P1/P2)、关键问题摘要;
- 模型信息(
model/reasoning_effort)、原始JSON文件路径; - 失败类型(如
CLAUDE_LIMIT_REACHED/sanitization_blocked)。
- Claude调用状态(成功/失败)、审查阶段、
7.3 -> 权威JSON Schema:审查输出的唯一契约
审查方输出的JSON必须严格符合预定义Schema,避免「契约漂移」:
- Schema包含
schema_version(固定1.0)、review_input_quality、request_satisfaction、findings等核心字段; - 字段约束:
findings数组中每个条目必须包含priority(P0/P1/P2)、category、evidence(引用具体证据); - 机器校验:仅强制类型/枚举/必填项,「evidence引用证据」等软约束由人类兜底。
7.3.1 -> Schema核心片段
json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AdversarialAiReview",
"type": "object",
"additionalProperties": false,
"required": ["schema_version","review_input_quality","request_satisfaction","approach_assessment","risks","findings","recommended_decision","needs_rereview","model_meta"],
"properties": {
"schema_version": { "type": "string", "enum": ["1.0"] },
"review_input_quality": {
"type": "object", "additionalProperties": false,
"required": ["status","missing","confidence","notes"],
"properties": {
"status": { "type": "string", "enum": ["sufficient","insufficient"] },
"missing": { "type": "array", "items": { "type": "string" } },
"confidence": { "type": "string", "enum": ["low","medium","high"] },
"notes": { "type": "string" }
}
},
"findings": {
"type": "array",
"items": {
"type": "object", "additionalProperties": false,
"required": ["priority","category","title","details","evidence","recommendation"],
"properties": {
"priority": { "type": "string", "enum": ["P0","P1","P2"] },
"category": { "type": "string", "enum": ["requirement","approach","bug","security","test"] }
}
}
}
}
}
8 -> 关键保障:长上下文遗忘防护
长对话、跨天开发易导致AI「遗忘」流程规则,需建立多层防护:
| 防护层级 | 实现方式 | 可靠性 |
|---|---|---|
| 持久规则 | 全局AGENTS.md、项目级规则文件 |
最高 |
| 短触发语 | 任务开头贴强制流程提示(如「按对抗流程执行,先出计划再审查」) | 中 |
| 审查回执 | 无回执视为未完成审查 | 中 |
| 任务交接 | 仅保存摘要+审查状态,不存原始对话 | 中 |
禁用方案:保存所有原始对话作为记忆------会放大隐私、合规、提示注入风险。
9 -> 实践避坑:不建议做的事
- 不要将「AI一致通过」等同于「代码正确」,人类终审不可缺;
- 不要绕过脱敏门直接外送敏感内容,即使「紧急场景」;
- 不要使用无
schema_version的默认Schema,易导致契约静默失效; - 不要让审查方读写文件/运行工具,破坏「只读对抗」原则;
- 不要忽略登录自检,避免透传模糊错误增加排障成本;
- 不要将原始对话作为长期记忆,优先保存结构化回执。
10 -> 评估与复盘:量化流程价值
通过以下指标评估对抗式开发的ROI:
- 审查命中率:AI发现的真实问题数/总审查问题数;
- 争议率:需人类裁决的反馈数/总反馈数;
- 成本控制:不同档位审查的成本占比、高风险场景成本ROI;
- 合规率:脱敏门拦截次数、敏感信息外送零发生;
- 提效比:对抗流程耗时/传统人工审查耗时。
11 -> 总结与展望
Codex+Claude对抗式开发方案的核心不是「用AI替代人」,而是「用AI暴露问题、聚焦人类注意力」。安全加固版通过「脱敏门+包装脚本」解决了数据安全痛点,通过「分级审查+标准化流程」平衡了提效与合规。
未来可进一步优化方向:
- 接入自托管模型,降低第三方外送风险;
- 自动化争议项升级流程,提升人类裁决效率;
- 结合CI/CD实现「高风险改动自动触发对抗审查」;
- 量化跨厂商审查vs同厂商新会话的增量价值。
这套方案已在高风险开发场景(权限系统、支付流程、数据隐私处理)验证有效,既保留了AI辅助开发的效率,又通过对抗性审查和安全加固,让AI协同开发更可控、更合规。
感谢各位大佬支持!!!
互三啦!!!