文章目录
- 1 -> 引言
- 2 -> 为什么需要「对抗式开发」?
- 2.1 -> 单AI辅助开发的核心痛点
- 2.2 -> 对抗式开发的核心目标
- 3 -> 核心理念:双代理、单事实源、按风险审查
- 3.1 -> 角色分工(核心原则)
- 3.2 -> 关键原则(不可突破)
- 4 -> 适用范围:明确「该对抗」的场景
- 4.1 -> 非简单开发任务(强制完整流程)
- 4.2 -> 高风险非代码分析任务(轻量对抗流程)
- 4.3 -> 模糊场景兜底规则
- 5 -> 核心流程设计:灵活路由与分级审查
- 5.1 -> 角色路由策略
- 5.2 -> 三档审查强度(平衡成本与风险)
- 5.3 -> 高风险非代码分析的轻量流程
- 6 -> 安全加固核心:脱敏门 + 包装脚本
- 6.1 -> 为什么脱敏是P0级需求?
- 6.2 -> 脱敏门规则(强制执行)
- 6.2.1 -> 非代码分析的额外脱敏规则
- 6.3 -> 包装脚本:run-ai-review(推荐入口)
- 6.3.1 -> 脚本核心逻辑(Shell版片段)
- 7 -> 落地实操:从仓库结构到完整流程
- 7.1 -> 推荐仓库结构(单事实源)
- 7.2 -> 手动MVP流程(最小可行版本)
- 7.2.1 -> 关键步骤细节
- 7.3 -> 权威JSON Schema:审查输出的唯一契约
- 7.3.1 -> Schema核心片段
- 8 -> 关键保障:长上下文遗忘防护
- 9 -> 实践避坑:不建议做的事
- 10 -> 评估与复盘:量化流程价值
- 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审查回执,无回执视为未完成分析。
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版片段)
# 高置信Secret拦截(命中即中止)ifprintf'%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:]]+@';thenecho"脱敏门拦截:送审内容命中疑似密钥/凭据,已中止。">&2;exit4fi# 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,仅通过包装脚本+基础文件即可跑通完整流程:
7.2.1 -> 关键步骤细节
- Step3/Step7 审查调用示例(Windows):
# 计划级审查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核心片段
{"$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协同开发更可控、更合规。