会話のコンテキスト入門:セッション、状態、メモリ¶
なぜコンテキストが重要なのか¶
意味のある、複数ターンにわたる会話には、エージェントがコンテキストを理解することが必要です。人間と同じように、継続性を保ち、繰り返しを避けるためには、これまでに何が話され、何が行われたかという会話の履歴を思い出す必要があります。Agent Development Kit (ADK) は、セッション、状態、メモリを通じてこのコンテキストを管理するための構造化された方法を提供します。
コアコンセプト¶
エージェントとの会話のさまざまなインスタンスを、個別の会話スレッドと考え、それらが長期的な知識を利用する可能性があると想像してください。
-
セッション (Session): 現在の会話スレッド- ユーザーとエージェントシステム間の単一の、進行中の対話を表します。
- その特定の対話中にエージェントによって取られたメッセージとアクションの時系列シーケンス(
イベント (Events)と呼ばれる)を含みます。 セッションは、この会話中にのみ関連する一時的なデータ(状態 (State))を保持することもできます。
-
状態 (State)(session.state): 現在の会話内のデータ- 特定の
セッション内に保存されるデータ。 - 現在のアクティブな会話スレッドにのみ関連する情報を管理するために使用されます(例:このチャット中のショッピングカート内のアイテム、このセッションで言及されたユーザー設定)。
- 特定の
-
メモリ (Memory): 検索可能で、セッションをまたぐ情報- 複数の過去のセッションにまたがる可能性のある情報、または外部データソースを含む情報のストアを表します。
- エージェントが、目の前の会話を超えて情報やコンテキストを思い出すために検索できる知識ベースとして機能します。
コンテキストの管理:サービス¶
ADKは、これらの概念を管理するためのサービスを提供します:
-
SessionService: さまざまな会話スレッド(Sessionオブジェクト)を管理します。- ライフサイクルを処理します:個々の
セッションの作成、取得、更新(イベントの追加、状態の変更)、および削除。
- ライフサイクルを処理します:個々の
-
MemoryService: 長期的な知識ストア(メモリ)を管理します。- (多くの場合、完了した
セッションから)長期的なストアに情報を取り込む処理をします。 - クエリに基づいてこの保存された知識を検索するメソッドを提供します。
- (多くの場合、完了した
実装: ADKはSessionServiceとMemoryServiceの両方に対してさまざまな実装を提供しており、アプリケーションのニーズに最も適したストレージバックエンドを選択できます。特筆すべきは、両方のサービスに対してインメモリ実装が提供されていることです。これらはローカルでのテストや迅速な開発のために特別に設計されています。これらのインメモリオプションを使用して保存されたすべてのデータ(セッション、状態、または長期的な知識)は、アプリケーションが再起動すると失われることを覚えておくことが重要です。ローカルテストを超えた永続性とスケーラビリティのために、ADKはクラウドベースおよびデータベースサービスのオプションも提供しています。
まとめ:
セッションと状態: 現在の対話に焦点を当てます – 単一のアクティブな会話の履歴とデータ。主にSessionServiceによって管理されます。- メモリ: 過去および外部の情報に焦点を当てます – 会話をまたぐ可能性のある検索可能なアーカイブ。
MemoryServiceによって管理されます。
次のステップ¶
以下のセクションでは、これらの各コンポーネントについてさらに詳しく掘り下げていきます:
セッション: その構造とイベントを理解する。状態: セッション固有のデータを効果的に読み書きし、管理する方法。SessionService: セッションに適したストレージバックエンドを選択する。MemoryService: より広範なコンテキストを保存および取得するためのオプションを探る。
これらの概念を理解することは、複雑でステートフル、かつコンテキストを意識した会話ができるエージェントを構築するための基本です。