# AIエージェントをソフトウェアに組み込むプラクティス
# 読取自由・書込ゲート
🎯 「全ツール呼び出しに承認を求める」設計は、承認疲れで自壊します。
読取と書込を非対称に扱うだけで、安全性と生産性の両立が実現できます。承認すべき操作に人間の注意を集中させましょう。
🔥 解決する課題
エージェントのツール呼び出しには副作用のある操作とない操作が混在しています。すべてに一律の承認を求めると、読取が大半を占める実運用では承認疲れが発生し、肝心の書込操作の承認が形骸化してしまいます。かといってすべてを自由にすれば、不可逆な書込操作で取り返しのつかない変更が走るリスクが残ります。
💡 提案パターン
ツール呼び出しを「読取(検索・取得・参照)」と「書込(作成・更新・削除・送信)」に二分し、読取は自由に許可、書込にだけ認可・検証・承認・監査のゲートを設けます。R/W分類はツール定義時に静的に付与し、LLMの判断には委ねません。書込ゲートの厳格度は可逆性で段階化し、不可逆操作(メール送信・決済)は人間承認必須、可逆操作(下書き保存)はポリシー検証のみとします。これにより承認疲れを劇的に減らしつつ、副作用の安全性を維持できます。
✅ 選定条件
使うとき:
- 読取と書込が混在し、読取が多数を占める
- 不可逆な書込操作(メール送信、決済、本番DB変更)が含まれる
- 承認疲れを防ぎ、人間のレビュー帯域を高リスク操作に集中させたい
使わないとき:
- 読取自体が機密データへのアクセスを含む場合(個人情報検索など)は、読取にも認可が必要
- 全操作が読取専用で書込がそもそも存在しない場合
- 実験環境で全操作が可逆かつ低コストな場合
⚠️ 落とし穴
- R/W分類をLLMに任せてはいけません。インジェクションで書込ツールが「読取」と判断される経路を作ります
- 「読取だが副作用がある」操作(API呼び出し回数カウント、閲覧履歴記録など)を見落とさないでください
- 可逆な書込と不可逆な書込を同じ厳格度にすると、承認疲れの問題が再発します
🔧 実装方針
- ツール定義時にtype(read/write)とgate種別(none/auto/human_approval)を静的に付与し、実行時にLLMが分類を変更できない構造にします
- 読取パスではメタデータのみをログに記録し、書込パスでは入力検証・ゲート判定・実行・監査ログの全量記録をパイプラインとして実装します
- 書込ゲートの厳格度をreversibleフラグで段階化し、不可逆操作にはdry-runの前段必須化も組み合わせます
- ゲート判定ロジックはゲートウェイ層のコードで強制し、プロンプトによる制御は一切使用しません
#
AIエージェント# #
ソフトウェアアーキテクチャ#