はじめに
七尾百合子さん、お誕生日 220日目 おめでとうございます! nikkieです。
Google の Agent Development Kit (ADK) で直近知って意外に思ったことです。
目次
- はじめに
- 目次
- GET /apps/{app_name}/users/{user_id}/sessions
- セッション一覧エンドポイントの実装
- Vertex AI Agent Engine 以外の場合
- 終わりに
GET /apps/{app_name}/users/{user_id}/sessions
adk webやadk api_serverで API を立てると、ADK が実装したエンドポイントを利用できます。
セッション1の一覧を取得するのが、GET /apps/{app_name}/users/{user_id}/sessions
List Sessions
/docs で見ると

返り値には events フィールド(イベントの履歴)があります。

ところが、セッション内のイベントも含めて取得してみると、events は常に0件(空のリスト)でした。
セッション一覧エンドポイントの実装
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/cli/adk_web_server.py#L742-L755
AdkWebServerが持っているセッションサービスのlist_sessionsメソッド呼び出し- eval用のセッションを除いて返す
今回セッションサービスに Agent Engine を使っていました。
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/vertex_ai_session_service.py#L218-L245
api_client.agent_engines.sessions.list()を叩いています。
直近で Agent Engine の sessions.list エンドポイントを叩いていた2のですが、
https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.reasoningEngines.sessions/list
それを思い出すと、Session には events が含まれません。
events を取得するには、セッションIDを指定して別のエンドポイントを叩きます。
https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.reasoningEngines.sessions.events/list
vertex_ai_session_service.pyの実装でSessionを作る際にeventsはレスポンスに含まれないので指定できず、events のデフォルト値である空リストとなります。
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/session.py#L46
Vertex AI Agent Engine 以外の場合
インメモリセッション
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/in_memory_session_service.py#L242
変数名(sessions_without_events)から events は空のリストのように思われます
データベースを使う場合
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/database_session_service.py#L582-L587
StorageSessionを見ると、eventsは空になるように思われました。
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/database_session_service.py#L146
https://github.com/google/adk-python/blob/v1.17.0/src/google/adk/sessions/database_session_service.py#L615
終わりに
ADK の API サーバーで、セッションサービスに Vertex AI Agent Engine を使った時、セッション一覧の返り値は events が常に空リストとなります(v1.17.0 時点)。
ソースを確認したところ、インメモリやデータベースのセッションサービスの場合も同様と思われました。
Agent Engine では events を取るとしたら N+1 問題となるので、現状の実装は現実的な落とし所だと思います。
/docs のレスポンスには events のスキーマががっつり載っているので、そこから期待を膨らませた後だと意外な挙動でした。
- 「A data container holding the state and history for one specific conversation between a user and the application.」https://google.github.io/adk-docs/runtime/#services↩
- ↩