Skip to content

Approval Gate(承認ゲート)

不可逆なアクション(送金・削除・設定変更・外部送信)の実行直前に、決定論的な人間承認の関門を構造として挟む。エージェントの判断力への信頼ではなく、アーキテクチャで安全を担保するパターンである。

別名

呼称出典
Human-in-the-Loop / HITL一般的呼称・Azure
Human Approval, Mandatory GateAzureの用語
Interruptエージェントフレームワークでの機能名の慣用

問題

実行権限を持つ自律エージェントは、誤った推論のまま不可逆アクションを実行しうる。誤送金・本番設定の破壊・誤った外部通知は、後からどれだけ正確に検知しても取り返しがつかない。

プロンプトで「危険な操作の前に確認して」と指示しても、モデルが従う保証はない。危険な判断をする可能性があるモデル自身に、最終的な実行可否を委ねていることが問題の本質である。

コンテキスト

適用する:

  • エージェントが不可逆・高影響のアクション実行権限を持つ場合
  • 規制・監査でヒトの承認記録が要求される場合
  • 誤実行の損害が、承認待ちのレイテンシコストを大きく上回る場合

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

  • すべてのアクションにゲートを置く場合。承認疲れでラバースタンプ化し、ゲートが形骸化する。低リスク操作は自動、危険操作のみゲートとする(AzureではHITLゲートを特定のツール呼出にスコープできる)
  • 読み取り専用エージェント
  • 承認者が意味のある判断材料を持てない場合

解決

ツール層で危険なアクションを宣言的にマークし、ミドルウェアがそのツール呼出をインターセプトする。実行内容・根拠・影響範囲の要約を承認者へ提示し、実行を保留して状態を永続化する。承認なら実行し、却下なら理由をフィードバックとしてエージェントのループへ返す。

承認は二値だけでなく、修正指示付きの差し戻しも設計する。承認待ち状態の保持には Checkpoint & Resume を使い、金額上限や対象環境の限定など、blast radius の制限も併用する。

python
def run_agent(task):
    state = checkpoint.load_or_init(task)
    while not state.done:
        action = llm(state.context)
        if action.tool and action.tool.irreversible:
            summary = summarize(
                action=action,
                rationale=state.rationale,
                blast_radius=action.scope,
            )
            checkpoint.save(state, pending_approval=summary)
            decision = wait_for_approval(summary)
            if decision.approved:
                result = tool(action.name, action.arguments)
            else:
                state = state.with_feedback(decision.feedback)
                continue
        else:
            result = tool(action.name, action.arguments)
        state = state.apply(result)
    return state.result

実装の要点:

  • 危険性をツールのメタデータで宣言する。 プロンプト上の注意書きではなく、ミドルウェアが必ず検査できる irreversible=True のような属性で対象を定義する
  • 承認前に実行できない構造にする。 承認要求の作成と実行を分離し、保留状態を永続化する。承認待ち中のタイムアウトや再開も明示的に扱う
  • 判断材料と影響範囲を提示する。 アクション、根拠、対象、金額、環境を要約し、承認者が意味のある判断をできるようにする。上限とスコープでblast radiusも制限する

トレードオフ

  • ✅ 不可逆アクションの誤実行が構造的に不可能になり、監査証跡も残る
  • ✅ 低リスク操作は自動化しつつ、危険操作だけ人間が握る粒度の細かい設計ができる
  • ⚠️ 承認待ちでフローが同期化し、レイテンシが人間律速になる
  • ⚠️ ゲートの置きすぎは承認疲れで形骸化し、安全装置がただの儀式になる

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

クラウドパターン本パターンでの再定義
Gatekeeper「実行前に仲介者が検証する構造」から、検証者が専用コンポーネントではなく人間になった。対象も一般的な要求からエージェントの危険なツール呼出へ細粒度化した
CI/CDパイプラインの Manual Approvalデプロイ前の人間承認を直系のモデルとし、対象をデプロイ全体からエージェントの個別アクションへ細粒度化した

関連パターン

  • Checkpoint & Resume — 承認待ち中の状態保持に必須の相棒。保留した実行を承認後に再開する
  • Layered Guardrails — 機械による多層検証を担う。人間ゲートはその最終層として補完する
  • Budget Guard — 「量」の制御を担う。Approval Gateは「不可逆性」の制御を担い、両者は相補的である
  • Evaluator-Optimizer — 機械評価で足りる品質問題を扱う。人間の承認が必要な不可逆性の問題とは分けて設計する

出典・参考

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