# ADK 2.0の便利だけど知られていない機能
🌍 エージェントの動作をピンポイントで制御したい場合、コールバックの種類と使い分けを理解していますか?
ADK 2.0は、エージェントのライフサイクル、LLM呼び出し、ツール実行の3層にわたるコールバックを提供しています。各コールバックのBefore/Afterパターンを活用することで、バリデーション、ガードレール、ログ記録などを柔軟に組み込めます。
📌 タイトル:コールバックの種類とパターン
🔗 URL:
🧩 概要
ADK 2.0のコールバックは3つのカテゴリに分かれています。エージェントライフサイクルコールバック(`BeforeAgentCallback` / `AfterAgentCallback`)は、エージェントの実行前後に処理を挿入します。LLMコールバック(`BeforeModelCallback` / `AfterModelCallback`)は、モデル呼び出しの前後で入力の修正やガードレールの適用を行います。ツールコールバック(`BeforeToolCallback` / `AfterToolCallback`)は、ツール実行の前後でバリデーションや結果の加工を行います。
🛠 使い方
各コールバックはエージェントの定義時に指定します。Pythonでは正確なパラメータ名(`callback_context`、`llm_request`、`tool_context`)を使用する必要があります。
```python
from adk import Agent
async def before_agent(callback_context) -> None:
"""エージェント実行前のバリデーション"""
print(f"Agent starting: {callback_context.agent_name}")
# Noneを返すと通常実行、値を返すとスキップ
async def before_model(callback_context, llm_request):
"""モデル呼び出し前のガードレール"""
# リクエストの検証や修正が可能
if contains_sensitive_info(llm_request):
return block_response() # 値を返すとモデル呼び出しをスキップ
return None # 通常のモデル呼び出しを続行
async def after_tool(callback_context, tool_context, tool_response):
"""ツール実行後のログ記録"""
log_tool_usage(tool_context.tool_name, tool_response)
return None
agent = Agent(
name="my_agent",
model="gemini-3.5-flash",
before_agent_callback=before_agent,
before_model_callback=before_model,
after_tool_callback=after_tool,
)
```
Beforeコールバックで値を返すとその後の処理がスキップされ、Noneを返すと通常の処理が続行されます。
🏗 本番システムへの組み込み方
・`BeforeAgentCallback` で入力のバリデーションや認証チェックを実装し、不正なリクエストを早期に拒否する
・`BeforeModelCallback` でガードレール(PII検出、有害コンテンツフィルタ等)を適用する
・`AfterModelCallback` でモデルの出力を検証し、フォーマットやポリシーへの準拠を確認する
・`AfterToolCallback` でツールの実行結果をログに記録し、監査証跡を残す
💡 ユースケース
🛡 `BeforeModelCallback` で個人情報を含むプロンプトをブロックする
📝 `AfterAgentCallback` でエージェントの実行結果をデータベースに記録する
✅ `BeforeToolCallback` でツール呼び出しパラメータのバリデーションを行う
🔍 `AfterModelCallback` でモデル出力のJSON形式を検証して再試行を促す
⚠️ 注意点
Pythonではコールバック関数のパラメータ名が正確である必要があります。`callback_context`、`llm_request`、`tool_context` などの名前が一致しないと正しく動作しません。また、Beforeコールバックで意図せず値を返してしまうと、モデル呼び出しやツール実行がスキップされてしまうため注意してください。コールバックはプラグインの後に実行される点も考慮が必要です。
✨ コールバックを適切に使い分けることで、エージェントの振る舞いをきめ細かく制御できます。セキュリティ、品質保証、監査の要件に応じて、各レイヤーのコールバックを組み合わせてください。
#
ADK# #
AIAgent#