メインコンテンツまでスキップ

エージェントセッション

備考

ベータ版

この機能はベータ版です。

エージェントセッションは、エージェントが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は、エージェントAPI用のDatabricks Pythonクライアントであり、databricks-agentbricksパッケージで配布されています。Databricks SDKのWorkspaceClientで認証を行います。

  1. AgentKit SDKをインストールする:

    Bash
    pip install databricks-agentbricks
  2. セッションストアを作成し、1 つの会話のセッションを開始します。actor_id は会話の所有者であり、オプションの session_id はこの会話を一意に識別します。

    Python
    from 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")
  3. エージェントのランの実行に伴って、会話のターンを追加します。各アイテムは、任意のJSON互換の値です。

    Python
    session.append_items(
    [
    {"type": "message", "role": "user", "content": "I need help with my cluster."},
    {"type": "message", "role": "assistant", "content": "Let's take a look."},
    ]
    )
  4. 後続のリクエストでは、セッションを再読み込みし、その完全な履歴を読み取ってコンテキストを再構築します。

    Python
    session = 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")]

クライアントは、最も最近のアイテムの削除、セッションのアイテムのクリア、および会話の独立したコピーへのフォーク(オプションで特定のアイテムまで)もサポートしています。子セッションを持つセッションを削除するには、削除をカスケードするための強制オプションが必要です(例:session.delete(force=True))。

エージェントフレームワークのセッションをエージェントセッションでバックアップする​

OpenAI Agents SDKやClaude Agent SDKなどのエージェントフレームワークは、ランの起動時に会話履歴を読み込み、末尾に新しい項目を追加します。セッションストアはそのパターンに直接マッピングされます:

フレームワークの動作

セッション ストアの呼び出し

履歴を読み取る

list_items 時系列順 (order_by="create_time asc")

ターン項目の追加

append 新しいアイテム

最後のアイテムを元に戻す

pop 最新のアイテム

スレッドをクリアする

clear セッションのアイテム

フレームワークの動作

セッション ストアの呼び出し

履歴を読み取る

list_items 時系列順 (order_by="create_time asc")

ターン項目の追加

append 新しいアイテム

最後のアイテムを元に戻す

pop 最新のアイテム

スレッドをクリアする

clear セッションのアイテム

スコープとアクセス​

エージェントセッションでは、セッションの項目が不透明なJSON互換値として保存されます。サービスは、エージェントまたはフレームワークが追加した値を解釈せずに保持し、返します。実行制御用のリソース(ラン、チェックポイント、承認など)は第一級の概念として追加されませんが、そのような状態をシリアル化するフレームワークであれば、項目として保持できます。

セッションストアはワークスペーススコープであり、アクセスはストアレベルで許可されます。actor_id フィールドと metadata フィールドはグループ化とフィルタリングのみをサポートしており、アクセスの付与や制限は行いません。モデルまたはユーザーが提供した値ではなく、信頼できるアプリケーションコンテキストから actor_id を設定します。

エージェントの Service Principal などの別のプリンシパルにストアを使用させるには、ストアのアクセス権限付与操作(AgentKit SDKの session_store.grant_permission(principal_id))を使用してアクセス権を付与します。

エージェントセッションとエージェントメモリは独立しています。セッションまたはセッションストアを削除しても、メモリストアに保持されているメモリは削除されません。ストア内のセッションから長期メモリを構築するには、メモリパイプラインを作成します。

次のステップ​