コンテンツにスキップ

会話コンテキスト入門:セッション、状態、メモリ

ADKでサポートPythonGoJava

意味のある、複数ターンにわたる会話を実現するには、エージェントがコンテキストを理解する必要があります。人間と同様に、エージェントは継続性を保ち、繰り返しを避けるために、会話の履歴、つまりこれまで何を話し、何が行われたかを思い出す必要があります。エージェント開発キット(ADK)は、SessionStateMemoryを通じてこのコンテキストを管理するための構造化された方法を提供します。

コアコンセプト

エージェントとの会話のさまざまなインスタンスを、長期的な知識を利用する可能性のある、個別の会話スレッドとして考えてみてください。

  1. Session: 現在の会話スレッド

    • ユーザーとエージェントシステム間の単一の、進行中のインタラクションを表します。
    • その特定のインタラクション中にエージェントによって行われたメッセージとアクションの時系列シーケンス(イベントと呼ばれる)を含みます。
    • また、Sessionこの会話中にのみ関連する一時的なデータ(State)を保持することもできます。
  2. State (session.state): 現在の会話内のデータ

    • 特定のSession内に保存されるデータです。
    • (例:このチャット中のショッピングカート内のアイテム、このセッションで言及されたユーザー設定など)現在アクティブな会話スレッドにのみ関連する情報を管理するために使用されます。
  3. Memory: 検索可能な、セッション横断的な情報

    • 複数の過去のセッションにまたがる、または外部データソースを含む可能性のある情報ストアを表します。
    • エージェントが当面の会話を超えて情報やコンテキストを思い出すために検索できるナレッジベースとして機能します。

コンテキストの管理:サービス

ADKは、これらの概念を管理するためのサービスを提供します:

  1. SessionService: さまざまな会話スレッド(Sessionオブジェクト)を管理します。

    • ライフサイクルを処理します:個々のSessionの作成、取得、更新(イベントの追加、Stateの変更)、削除。
  2. MemoryService: 長期的な知識ストア(Memory)を管理します。

    • (多くの場合、完了したSessionからの)情報を長期ストアに取り込むことを処理します。
    • クエリに基づいてこの保存された知識を検索するメソッドを提供します。

実装: ADKはSessionServiceMemoryServiceの両方に対してさまざまな実装を提供しており、アプリケーションのニーズに最も適したストレージバックエンドを選択できます。特筆すべきは、両方のサービスにインメモリ実装が提供されていることです。これらは特にローカルテストと迅速な開発のために設計されています。これらのインメモリオプションを使用して保存されたすべてのデータ(セッション、状態、または長期的な知識)は、アプリケーションが再起動すると失われることを覚えておくことが重要です。ローカルテストを超えた永続性とスケーラビリティのために、ADKはクラウドベースおよびデータベースサービスのオプションも提供しています。

まとめ:

  • Session & State: 現在のインタラクションに焦点 – 単一のアクティブな会話の履歴とデータ。主にSessionServiceによって管理されます。
  • Memory: 過去および外部の情報に焦点 – 複数の会話にまたがる可能性のある検索可能なアーカイブMemoryServiceによって管理されます。

次のステップ

次のセクションでは、これらの各コンポーネントについてさらに詳しく掘り下げていきます:

  • Session: その構造とイベントを理解する。
  • State: セッション固有のデータを効果的に読み書きし、管理する方法。
  • SessionService: セッションに適したストレージバックエンドを選択する。
  • MemoryService: より広範なコンテキストを保存および取得するためのオプションを探る。

これらの概念を理解することは、複雑でステートフル、かつコンテキストを認識する会話に参加できるエージェントを構築するための基本です。