ガードレールと安全な既定値
エージェント行動の多層防御:入力スクリーニング、権限ゲート、サンドボックス、不可逆スイッチの「既定は安全」設計。
魔法のフィルタではなく多層防御
単一のガードレールは必ず突破されます。信頼できるシステムは独立した検査を重ね、どの一層が破れても致命傷にならないようにします:
| 層 | 捕まえるもの | 実装 |
|---|---|---|
| 入力スクリーニング | 明白な注入試行 | 軽量分類器またはパターン列 |
| 権限ゲート | 権限外の操作 | エージェントごとの許可リストをコードで強制 |
| サンドボックス | 許可操作による被害 | FS・通信・タイムアウトの制限 |
| 人間確認 | 不可逆な結果 | 危険操作の前の明示確認 |
| 監査ログ | 事後復元 | 決定と操作の追記専用記録 |
原則はこれです:権限はモデルにお願いするのではなく、コードで強制する。 エージェントの自制に依存してはいけません。丁寧な依頼はアクセス制御ではありません。
プロンプト注入はプロンプトでは解決しない
エージェントが読むあらゆるテキストに指示が紛れ得ます。検索文書、ツール戻り値、アップロードされたファイル、Web ページ。後続の指示を無視させる確実なプロンプトは存在しません。
価値の高い順の現実的対策:
- 信頼できない内容を明確に分離。 検索・ツール結果を命令ではなくデータとしてタグ付け。
- 理解ではなく能力を制約。 完全に注入されても、ツールが許す範囲しかできない。読み取り専用エージェントは削除できない。
- 状態変更には確認を要求——特に信頼できない内容が起点の場合。
- 不可逆操作には人間を承認経路に残す。
実際に底を支えるのは 2 番です。他はハードルを上げるだけで、能力制限だけが天井を設定できます。
不可逆操作は既定を安全に
実害はここで起きます。削除、公開、送信、決済、デプロイ。やったら戻りません。
具体ルール:
- 既定はドライラン。 実際の実行には明示フラグを要する。
- 差分/プレビューを先に出す。 何が起きるか人間に見せる。
- 影響半径を絞る。 まず 1 件で検証してから一括へ。
- 曖昧な依頼から不可逆操作を推測しない。
UI コードには鋭い罠があります。undefined の真偽フラグが「実行する」側に評価されることです。公開を mode === 'push' で判定している場合、フラグの設定漏れがそのまま本番公開になります。肯定値を判定し、否定の不在に依存しない。
サンドボックスの要点
信頼したエージェントでも制限下で動かします:
- ファイルシステム:作業ディレクトリに限定、外への書き込み禁止
- ネットワーク:ドメイン許可リスト。メタデータ端点(
169.254.169.254)は遮断 - 実行:タイムアウト、メモリ上限、やむを得ない場合以外はシェル禁止
- 資格情報:最小権限・短寿命。コンテキストに貼らない
ツールの戻り値はすべて、次のステップへの信頼できない入力として扱います。
監査は犯人探しではなく学習のために
判断を再現できるだけ記録します。入力、選んだ操作、理由、結果。追記専用で。「先週の火曜に何が起きたか」に答えるため、そしてパターンを見つけるためです。40% 失敗しているツール、全員が無意識に承認している確認ダイアログ。
後者の発見こそ行動に値します。人間が常に承認するガードレールは装飾であり、設計を見直すべきです。