# AIエージェントをソフトウェアに組み込むプラクティス
# Risk-based Human Approval|リスクベース人間承認
🎯 エージェントに「全部お任せ」も「全部確認」も間違いです。操作のリスクに応じて自動実行・人間承認・禁止を動的に振り分けるのが正解です。
🔥 解決する課題
エージェントが外部システムに副作用を持つ操作を実行できるとき、すべてを自動実行すれば不可逆な損害が起きえます。しかしすべてに人間承認を求めれば待ち時間で業務が止まり、エージェントの自動化の価値が消失します。LLMに「危険だと思ったら聞いて」と指示しても、その判断自体が確率的でありすり抜けが起きます。
💡 提案パターン
操作をリスクスコア(不可逆性 x 失敗コスト)で3層に分類します。低リスク(読取・可逆操作)は自動実行、中〜高リスク(不可逆または高コスト)は人間承認を経由、極高リスク(不可逆かつ致命的)は禁止とします。分類はLLMではなく決定論的なルールエンジンで行い、承認タイムアウト後のデフォルトは安全側(自動却下)に倒します。さらに段階的自律性(Autonomy Ladder)により、エージェントの実績に応じて閾値を動的に調整する仕組みも設計できます。
✅ 選定条件
使うとき:
- エージェントが書込・削除・送信など副作用を伴う操作を実行する
- 操作によって不可逆性と失敗コストが異なり、一律ポリシーでは過剰か不足になる
- 人間がレビューに関与できる運用体制がある
使わないとき:
- すべての操作が読取専用で副作用がない
- 失敗コストが一律に低くロールバックが容易
- レイテンシ要件が極めて短く人間介在を許容できない
⚠️ 落とし穴
- リスク分類自体をLLMに任せてはいけません。分類は決定論的なコードかポリシーエンジンの責務です
- 承認待ちの状態を永続化しないと、プロセス再起動で承認待ち操作が消失します
- 条件付き承認(パラメータ修正して実行)を設計に含めないと、却下と再提案のラウンドトリップが増えます
🔧 実装方針
- リスク分類はツール名×アクション名の静的テーブルまたはポリシーエンジンで行い、LLMには委譲しません
- リスクスコアは不可逆性(reversibility)と失敗コスト(failure_cost)の積で算出し、閾値で3層(auto/approval/forbidden)に振り分けます
- 承認待ち状態は耐久的なストア(キュー+永続化)に保持し、プロセス再起動で消失しない設計にします
- 承認タイムアウト時のデフォルト動作は安全側(自動却下)に倒します
- リスクポリシーはYAML等の宣言的設定として外部化し、コード変更なしでルール追加・変更できるようにします
#
AIエージェント# #
ソフトウェアアーキテクチャ#