# ADK 2.0の便利だけど知られていない機能
🌍 エージェントの会話中に「前に聞いた情報を覚えておいてほしい」と思ったことはありませんか?状態管理の仕組みを理解すれば、それが簡単に実現できます。
ADK 2.0のState機能は、セッション内外でデータを保持・共有するためのキーバリュー型のスクラッチパッドです。プレフィックスによってスコープを使い分けることで、柔軟な状態管理が可能になります。
📌 タイトル:状態 (State) の管理
🔗 URL:
🧩 概要
Stateはキーバリュー形式のデータストアで、4つのプレフィックスによってスコープが決まります。プレフィックスなしはセッションスコープ(そのセッション内でのみ有効)、user:はユーザースコープ(同一ユーザーの複数セッションで共有)、app:はアプリケーションスコープ(全ユーザー・全セッションで共有)、temp:は一時スコープ(インボケーション終了時に破棄)です。エージェントの指示文中では{key}の形式で状態値を参照でき、動的なプロンプト構築が可能です。
🛠 使い方
状態の書き込みにはいくつかの方法があります。
```python
# 1. output_keyでエージェントの出力を自動保存
agent = Agent(
name="summarizer",
output_key="last_summary",
...
)
# 2. EventActions.state_deltaで明示的に設定
from import EventActions
actions = EventActions(state_delta={"user:preference": "dark_mode"})
# 3. ToolContext経由でツール内から設定
def my_tool(query: str, tool_context: ToolContext) -> str:
tool_context.state["app:global_counter"] = 42
tool_context.state["temp:intermediate"] = "temporary_value"
return "done"
```
指示文での参照は以下のように行います。
```python
agent = Agent(
instruction="ユーザーの好みは{user:preference}です。前回の要約:{last_summary}",
...
)
```
🏗 本番システムへの組み込み方
・スコープを適切に選択し、不要なデータの永続化を避ける(一時データにはtemp:を活用)
・user:やapp:スコープの状態は複数セッションに影響するため、慎重に設計する
・状態の読み書きは必ずCallbackContextやToolContext経由で行い、イベント追跡を確保する
・状態キーの命名規則を統一し、チーム全体での保守性を向上させる
💡 ユースケース
👤 user:プレフィックスでユーザーの好みや設定を複数セッションにわたって保持
📊 app:プレフィックスでアプリケーション全体の統計情報やカウンターを管理
🔄 output_keyで直前のエージェント出力を次のステップで自動参照
🧹 temp:プレフィックスで中間計算結果を一時保存し、メモリ効率を向上
⚠️ 注意点
session.stateをコンテキスト外から直接変更しないでください。CallbackContextやToolContextを経由せずに変更すると、イベントトラッキングがバイパスされ、状態の変更履歴が記録されません。これにより、巻き戻し機能やデバッグに支障をきたす可能性があります。
✨ Stateの4つのスコープを使い分けることで、エージェントの記憶と文脈を柔軟に管理できます。適切な状態管理は、質の高いエージェント体験の基盤です。
#
ADK# #
AIAgent#