Codex + Claude Code 对抗式开发:双AI协同的安全加固实践

文章目录

  • [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 -> 关键原则(不可突破)

  1. 单事实源:所有规则、契约(如JSON Schema)唯一存储,避免多版本冲突;
  2. 按风险分级:低风险场景简化流程,高风险场景全流程对抗;
  3. 安全优先:任何外送第三方模型的内容必须经过脱敏,物理上不可绕过;
  4. 可审计:所有审查记录、成本、裁决结果全沉淀,支持追溯。

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 -> 高风险非代码分析的轻量流程

针对无需改代码的分析任务,简化流程但保留对抗核心:

  1. Codex输出分析框架(边界、假设、初步结论、不确定性);
  2. Claude Code新开会话只读复审,聚焦「遗漏风险、错误假设、替代方案」;
  3. Codex裁决反馈,争议项升级人类;
  4. 必须输出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),将以下逻辑硬编码进脚本,物理上不可绕过:

  1. 登录自检:提前校验Claude登录状态,避免透传模糊错误;
  2. Schema Version Guard:强制校验Schema包含schema_version,防止静默使用错误契约;
  3. 脱敏门执行:按上述规则过滤敏感内容;
  4. 唯一临时文件:生成带GUID的临时Prompt文件,执行后自动删除;
  5. 成本自动记账:将审查成本写入reviews/cost-ledger.csv
  6. 标准化退出码:明确区分「通过」「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)。

7.3 -> 权威JSON Schema:审查输出的唯一契约

审查方输出的JSON必须严格符合预定义Schema,避免「契约漂移」:

  • Schema包含schema_version(固定1.0)、review_input_qualityrequest_satisfactionfindings等核心字段;
  • 字段约束:findings数组中每个条目必须包含priority(P0/P1/P2)、categoryevidence(引用具体证据);
  • 机器校验:仅强制类型/枚举/必填项,「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 -> 实践避坑:不建议做的事

  1. 不要将「AI一致通过」等同于「代码正确」,人类终审不可缺;
  2. 不要绕过脱敏门直接外送敏感内容,即使「紧急场景」;
  3. 不要使用无schema_version的默认Schema,易导致契约静默失效;
  4. 不要让审查方读写文件/运行工具,破坏「只读对抗」原则;
  5. 不要忽略登录自检,避免透传模糊错误增加排障成本;
  6. 不要将原始对话作为长期记忆,优先保存结构化回执。

10 -> 评估与复盘:量化流程价值

通过以下指标评估对抗式开发的ROI:

  1. 审查命中率:AI发现的真实问题数/总审查问题数;
  2. 争议率:需人类裁决的反馈数/总反馈数;
  3. 成本控制:不同档位审查的成本占比、高风险场景成本ROI;
  4. 合规率:脱敏门拦截次数、敏感信息外送零发生;
  5. 提效比:对抗流程耗时/传统人工审查耗时。

11 -> 总结与展望

Codex+Claude对抗式开发方案的核心不是「用AI替代人」,而是「用AI暴露问题、聚焦人类注意力」。安全加固版通过「脱敏门+包装脚本」解决了数据安全痛点,通过「分级审查+标准化流程」平衡了提效与合规。

未来可进一步优化方向:

  • 接入自托管模型,降低第三方外送风险;
  • 自动化争议项升级流程,提升人类裁决效率;
  • 结合CI/CD实现「高风险改动自动触发对抗审查」;
  • 量化跨厂商审查vs同厂商新会话的增量价值。

这套方案已在高风险开发场景(权限系统、支付流程、数据隐私处理)验证有效,既保留了AI辅助开发的效率,又通过对抗性审查和安全加固,让AI协同开发更可控、更合规。


感谢各位大佬支持!!!
互三啦!!!