Skip to content

Adversarial Review(対立的レビュー)

成果物を「採点」するのではなく、破綻させにいく専任の敵対者を立てる。最も強い反例・悪用経路・前提の穴を能動的に探させ、その指摘で成果物を堅くする。協調的な評価器が見逃す、攻撃してはじめて露わになる失敗を捕まえるパターンである。

別名

呼称出典
Red-Teaming / Devil's Advocateセキュリティ・意思決定レビューの慣用
Multi-Agent DebateDu et al.(複数モデルが討論して結論を検証)
Adversarial Critic一般的呼称

問題

Evaluator-OptimizerReflection は「基準に照らして良いか?」を問う。だが協調的な評価器がルーブリックを埋めるだけでは、攻撃してはじめて見える失敗——セキュリティホール、境界値、隠れた前提、プロンプトインジェクション耐性、仕様の悪用(spec gaming)——を取りこぼす。

「品質を確認して」と頼まれた評価者は減点法で採点し、「破ってみせて」と頼まれた評価者は穴を攻める。問いの立て方が、見つかるものを変える。誤りが敵対的に悪用されうる領域では、協調的な評価だけでは頑健性を保証できない。

コンテキスト

適用する:

  • 誤りが敵対的に悪用されうる成果物(セキュリティ、外部公開API、認証・課金ロジック)
  • 前提の穴や境界条件が致命的なタスク、高リスクな意思決定の頑健性検証

適用しない(不要な)ケース:

  • 明確なルーブリックで良否を尽くせるタスク——Evaluator-Optimizer で十分
  • 時間予算が秒単位のタスク——攻防の反復は時間を食う
  • 低リスクな出力——敵対者を「勝たせる」検証が費用に見合わない

解決

目的関数が生成側とのエージェントを立てる。その任務は成果物を採点することではなく、破綻させる最も強い反例・悪用経路・見落としを1つ見つけることである。見つかった破綻を塞ぎ、再度攻めさせる。討論形式(2体が対立する立場で論じ、審判が判定する)やレッド/ブルーチーム形式にもできる。反復は上限で止める(Budget Guard)。

python
def adversarial_review(artifact, max_rounds=3):
    for _ in range(max_rounds):
        attack = llm(                       # 敵対者: 破綻を探すのが任務(生成側と逆の目的)
            "この成果物を破綻させる最も強い反例・悪用経路・見落としを1つ挙げよ。"
            "無ければ「破綻なし」とだけ答えよ",
            artifact=artifact, role="adversary", context=None,   # 生成側の推論は渡さない
        )
        if "破綻なし" in attack:
            return artifact
        artifact = llm(                     # 生成側: 指摘された破綻を塞ぐ
            "指摘された破綻を塞いだ版を生成せよ",
            artifact=artifact, attack=attack,
        )
    return {"artifact": artifact, "residual_attack": attack}   # 残存指摘を添えて返す

実装の要点:

  • 敵対者の目的関数を「破ること」にする。 「良いか評価して」ではなく「破ってみせろ」と指示する。インセンティブを生成側と逆に置くことが、この構造の核心
  • 決定的な一撃を優先させる。 網羅的な採点より、最も効く反例・悪用を1つ探させる。見つけたら塞ぎ、再度攻めさせる
  • 独立性を担保する。 生成側の推論過程を敵対者へ渡さない(Evaluator-Optimizer と同じく分離が効く)。討論形式では審判を別に立てる
  • 反復を上限で止める。 攻防が発散する場合に備え Budget Guard を併用し、残存する指摘を添えて返す

トレードオフ

  • ✅ 協調的な評価では出ない、悪用経路・境界条件・隠れた前提の破綻を発見できる
  • ✅ セキュリティや高リスクな意思決定の頑健性を、出荷前に敵対的な観点で検証できる
  • ⚠️ 呼出数が増え、コストとレイテンシが上がる。攻防が発散すれば Budget Guard で止める必要がある
  • ⚠️ 敵対者が的外れな攻撃に固執すると空回りする。攻撃自体の妥当性を評価する仕組みが要る場合がある

クラウドパターンとの対応

クラウドパターン本パターンでの再定義
(直接の対応は薄い)古典的なクラウドデザインパターンに直接の祖先を持たない。強いて言えば Gatekeeper を「検証」ではなく「攻撃」として運用する構図に近い

これは、ソフトウェアのレッドチーム演習、N-version programming(多様な独立実装の相互検証)、コードレビューを「敵対的な読み」として行う実践の系譜に位置づけられる。

関連パターン

  • Evaluator-Optimizer — 境界は目的関数。基準に採点するのが評価器、破綻を探すのが敵対者。高リスクでは両方を重ねる
  • Reflection — 同一エージェントの自己批評。敵対者は逆のインセンティブを持つ別主体であり、自己批評では出ない攻撃的観点を補う
  • Parallelization — Voting として複数の独立した敵対者を並列に走らせ、多様な攻撃面を同時に探る
  • Budget Guard — 攻防の反復上限を固定する。必ず併用する

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。