エージェントセッション
ベータ版
この機能はベータ版です。
エージェントセッションは、エージェントが1つのやり取りのために保持する状態(セッションの状態)を保持する、永続的でフレームワークに依存しないストアをエージェントに提供します。最も一般的には、これは会話履歴です。つまり、エージェントがターンの起動時に読み取り、実行中に追記するメッセージ、ツールコール、および結果の順序付きトランスクリプトです。また、LangGraphグラフなど、フレームワークがやり取りのために永続化する他の状態でもかまいません。DatabricksはそれをLakebaseに保存し、ストレージを管理するため、データベースを構築または運用する必要はありません。
プレビュー期間中は、セッションを格納する基盤となる Lakebase インスタンスに対して課金されます。エージェントセッション自体に追加料金はかかりません。価格はプレビューが進むにつれて変更される可能性があります。
エージェントセッションは次の場合に利用します。
- エージェントの会話履歴を保持して、再起動後も残るようにし、後で再開できるようにします。
- 後続のメッセージで完全なコンテキスト (ツール呼び出しと推論を含む) を再構築します。
- 独自の UI から、過去の会話のリスト表示、再開、Branch を行います。
エージェントセッションは、単一のインタラクションの状態(短期間のセッション内状態)を保持します。会話 全体 を通して維持される長期記憶については、エージェントメモリを使用します。
要件
- AgentKit SDK を使用するには、 Python 3.10以上 をインストールします。AgentKit SDKは、以下の例で使用されているエージェントAPI用のDatabricks Pythonクライアントです。また、Pythonを必要とせず、任意の言語から直接REST APIを呼び出すこともできます。
エージェントセッションの仕組み
エージェントセッションには3つのレベルがあります。
-
セッションストア は、エージェントのセッションを格納するワークスペーススコープのコンテナです。ストアを作成すると、基盤となるLakebaseストレージが自動的にプロビジョニングされます。ワークスペース固有の
session_store_nameを選択します。 -
セッション は、ストア内の1つの永続的なインタラクション(通常は会話のスレッド)です。セッションは次の要素によって識別されます:
actor_id(必須):セッションの所有者(エンドユーザーや別のエージェントなど)。1つのサブジェクトのすべてのセッションをグループ化するため、まとめて一覧表示およびフィルター処理できます。ユーザーごとのアプリを構築する場合は、各ユーザーのセッションがグループ化されたままになるように、actor_idをユーザーのID(アプリの認証から検証されたエンドユーザーIDなど)に設定します。信頼できるアプリケーションコンテキストから設定し、モデルやユーザーが提供した値からは絶対に設定しないでください。session_id(オプション):インタラクションに対して呼び出し元が選択したID。省略した場合は、サービスが生成します。parent_session_id(オプション): 分岐した会話を表現するために、セッションをフォーク元のセッションにリンクします。
-
セッションアイテム は、セッションの順序付けられた履歴における1つのエントリーです。各アイテムには、メッセージ、ツール呼び出し、ツール結果、推論ブロックなどの、難読化された JSON 互換の
data値が保持されます。Databricks は各アイテムにitem_idとcreate_timeを割り当てますが、その内容の検査や検証は行いません。アイテムは追加された後は変更できません。
このサービスは、セッション内のアイテムに対して決定論的な順序を維持し、セッションストアに対するすべての操作を承認します。
使い始める
これらの例では、サポートエージェントのエージェントセッションを設定します。セッションストアを作成し、1つの会話のセッションを起動し、会話のターンを追加し、後の要求で履歴を読み戻します。プロジェクトに適したクライアントを選択します。
- AgentKit SDK
- REST API
AgentKit SDKは、エージェントAPI用のDatabricks Pythonクライアントであり、databricks-agentbricksパッケージで配布されています。Databricks SDKのWorkspaceClientで認証を行います。
-
AgentKit SDKをインストールする:
Bashpip install databricks-agentbricks -
セッションストアを作成し、1 つの会話のセッションを開始します。
actor_idは会話の所有者であり、オプションのsession_idはこの会話を一意に識別します。Pythonfrom databricks.sdk import WorkspaceClient
from databricks_agentkit import AgentKitClient
client = AgentKitClient(WorkspaceClient())
session_store = client.session_stores.create("support-agent-sessions")
session = session_store.add(actor_id="customer-123", session_id="case-456") -
エージェントのランの実行に伴って、会話のターンを追加します。各アイテムは、任意のJSON互換の値です。
Pythonsession.append_items(
[
{"type": "message", "role": "user", "content": "I need help with my cluster."},
{"type": "message", "role": "assistant", "content": "Let's take a look."},
]
) -
後続のリクエストでは、セッションを再読み込みし、その完全な履歴を読み取ってコンテキストを再構築します。
Pythonsession = session_store.get("case-456")
# Request chronological order; list_items defaults to newest-first and auto-pages.
history = [item.data for item in session.list_items(order_by="create_time asc")]
クライアントは /api/2.0/agents/session-stores の下で REST API を呼び出します。Python 以外の言語の場合は直接呼び出します。
-
Databricks CLI で OAuth トークンを生成します:
Bashdatabricks auth login --host ${DATABRICKS_HOST}
export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token) -
エージェントのセッション ストアを作成します:
Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/session-stores?session_store_name=support-agent-sessions" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"description": "Support agent conversation history"}' -
1回の会話のセッションを起動します。
actor_idは所有者を示し、session_idはこの会話をユニークに識別します。Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/session-stores/support-agent-sessions/sessions?session_id=case-456" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"actor_id": "customer-123"}' -
エージェントのランに伴い、会話ターンを追加します。
Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/session-stores/support-agent-sessions/sessions/case-456/items:append" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"items": [{"data": {"type": "message", "role": "user", "content": "I need help with my cluster."}}]}' -
コンテキストを再構築するために履歴を時系列で読み取ります:
Bashcurl -G "https://${DATABRICKS_HOST}/api/2.0/agents/session-stores/support-agent-sessions/sessions/case-456/items" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" --data-urlencode "order_by=create_time asc"
クライアントは、最も最近のアイテムの削除、セッションのアイテムのクリア、および会話の独立したコピーへのフォーク(オプションで特定のアイテムまで)もサポートしています。子セッションを持つセッションを削除するには、削除をカスケードするための強制オプションが必要です(例:session.delete(force=True))。
エージェントフレームワークのセッションをエージェントセッションでバックアップする
OpenAI Agents SDKやClaude Agent SDKなどのエージェントフレームワークは、ランの起動時に会話履歴を読み込み、末尾に新しい項目を追加します。セッションストアはそのパターンに直接マッピングされます:
フレームワークの動作 | セッション ストアの呼び出し |
|---|---|
履歴を読み取る |
|
ターン項目の追加 |
|
最後のアイテムを元に戻す |
|
スレッドをクリアする |
|
スコープとアクセス
エージェントセッションでは、セッションの項目が不透明なJSON互換値として保存されます。サービスは、エージェントまたはフレームワークが追加した値を解釈せずに保持し、返します。実行制御用のリソース(ラン、チェックポイント、承認など)は第一級の概念として追加されませんが、そのような状態をシリアル化するフレームワークであれば、項目として保持できます。
セッションストアはワークスペーススコープであり、アクセスはストアレベルで許可されます。actor_id フィールドと metadata フィールドはグループ化とフィルタリングのみをサポートしており、アクセスの付与や制限は行いません。モデルまたはユーザーが提供した値ではなく、信頼できるアプリケーションコンテキストから actor_id を設定します。
エージェントの Service Principal などの別のプリンシパルにストアを使用させるには、ストアのアクセス権限付与操作(AgentKit SDKの session_store.grant_permission(principal_id))を使用してアクセス権を付与します。
エージェントセッションとエージェントメモリは独立しています。セッションまたはセッションストアを削除しても、メモリストアに保持されているメモリは削除されません。ストア内のセッションから長期メモリを構築するには、メモリパイプラインを作成します。