「AIエージェントがファイルを書き換えた。ログも残っている。でも、ルールが適用されたのはツールが動く前?それとも後?」
この問いにすぐ答えられますか? 実はこれ、現在のAIエージェント開発における見落とされがちな盲点なんですよね。
🤖 ログがあっても「証明」にならない?

多くのエージェントフレームワークは、こんな感じのログを出力します。
[INFO] Tool called: write_file
[INFO] Policy check: passed
[INFO] File written: output.txt
一見、問題なさそうですよね。でも、このログだけでは以下のことがまったくわからないんです。
- ✅ ポリシーチェックがツール実行の前に行われたのか
- ❌ それともツール実行後に結果を見て後付けで評価したのか
- ❓ そもそもチェック自体がスキップされていないか
ログはあくまで「何が起きたか」を記録するもの。「どの順番で・どの条件下で」起きたかを証明する力は弱いんです。
🔍 ポリシーゲートとは?
イメージとしては、工場の出荷検査ラインみたいなものです。製品(=ツール呼び出し)が出ていく前に検査(=ポリシーチェック)を通過させるのが正しい順序。でも現実には、出荷した後で書類だけ整えるケースが起きやすいんですよね。
これをコードで再現するとこんな感じです👇
# ❌ よくある「なんとなく通過」パターン
def call_tool_bad(tool_name, args):
result = execute_tool(tool_name, args) # まずツール実行
if check_policy(tool_name, args): # 後からチェック(意味なし!)
log("Policy passed")
return result
# ✅ 正しいポリシーゲートのパターン
def call_tool_good(tool_name, args):
# ツール実行の前に必ずポリシーチェック
if not check_policy(tool_name, args):
raise PolicyViolationError(f"{tool_name} はポリシー違反です")
result = execute_tool(tool_name, args) # チェック通過後に実行
log_with_proof(tool_name, args, result, policy_checked=True)
return result
ポイントをまとめるとこんな感じです。
- ツール実行より前にポリシーチェックを置く
- チェック結果をタイムスタンプ付きでログに残す
- 違反時は例外を投げてツールを絶対に実行させない
🛡️ 監査可能なエージェント設計のポイント
AIエージェントが企業システムや本番環境で使われるようになると、「ルールに従って動いた」ことを第三者に証明できるかが重要になってきます。具体的には以下の設計を意識してみてください。
- ポリシーゲートを独立した関数・クラスとして分離する(テスト可能にする)
- チェック通過のエビデンスをログに構造化データとして記録する(JSON形式が◎)
- チェックとツール実行を同一トランザクション内に閉じ込める(割り込みを防ぐ)
まとめ
ログがあれば安心、は思い込みかもしれません。AIエージェントの信頼性を高めるには、「何をしたか」だけでなく「いつ・どの順番でルールを守ったか」を証明できる設計が必要です。
エージェント開発に取り組んでいる方は、ぜひ今日のコード例を参考にポリシーゲートの実装を見直してみてください 🚀 小さな設計の見直しが、大きな安全性につながりますよ!





