エージェントでストレージを使用する

ストレージは、Microsoft 365 エージェント SDKの重要なコンポーネントです。 これにより、エージェントはセッション間で会話状態、ユーザー データ、およびその他の情報を保持できます。 SDK では、次のようなさまざまなストレージ オプションがサポートされています。

  • メモリ内ストレージ
  • Azure Cosmos DB
  • Azure Blob Storage
  • カスタム ストレージ プロバイダー

キー ストレージ のオプション

Agents SDK にはいくつかの組み込みストレージ プロバイダーが用意されており、それぞれに独自のユース ケースと利点があります。 エージェントのニーズに最も適したものを選択できます。 独自のカスタム ストレージ プロバイダーを実装することもできます。

  1. メモリ ストレージ

    • テストと開発の目的に適しています。
    • エージェントの再起動時にデータがクリアされるため、運用環境には適しません。
    • データは Web アプリ インスタンスでのみ使用できるため、クラスターで実行する場合は不適切です。
  2. Azure Cosmos DB

    • 運用エージェントに最適なグローバル分散マルチモデル データベース。
    • スケーラビリティとパフォーマンスのためにパーティション分割ストレージをサポートします。
  3. Azure Blob Storage

    • テキスト ファイルやバイナリ ファイルなどの非構造化データを格納するために最適化されています。
    • エージェントの状態とトランスクリプトのストレージでよく使用されます。
  4. IStorage を実装したカスタム ストレージ オプション

異なるストレージ プロバイダーの使用

メモリ ストレージ

すべてのサンプルで MemoryStorageが使用されます。 このストレージは揮発性であり、開発とテストにのみ適しています。 運用環境のシナリオでは、Azure Cosmos DBやAzure Blob Storageなどの持続性の高いストレージ オプションを使用します。

Program.csで、MemoryStorageを登録します。

builder.Services.AddSingleton<IStorage, MemoryStorage>();

Azure CosmosDb ストレージ

  1. Microsoft.Agents.Storage.CosmosDbのパッケージ依存関係を追加します。

  2. Program.cs に、IStorage の登録を次の内容で追加します(既存のものがある場合は置き換えます)。

    builder.Services.AddSingleton<IStorage>(sp =>
    {
          var options = new CosmosDbPartitionedStorageOptions()
          {
             CosmosDbEndpoint = "your-cosmosdb-endpoint",
             DatabaseId = "your-database-id",
             ContainerId = "your-container-id",
    
             // Get a TokenCredential from your defined Connections
             TokenCredential = sp.GetService<IConnections>().GetConnection("ServiceConnection").GetTokenCredential()
          };
    
          return new CosmosDbPartitionedStorage(options);
    });
    
  3. 詳細については、「CosmosDbPartitionedStorageOptions」を参照してください。

Azure Blob ストレージ

  1. Microsoft.Agents.Storage.Blobsのパッケージ依存関係を追加します。

  2. Program.cs で、IStorage の登録を次のように追加します(または既存のものを置き換えます):

    builder.Services.AddSingleton<IStorage>(sp =>
    {
       // Get a TokenCredential from your defined Connections
       var tokenCredential = sp.GetService<IConnections>().GetConnection("ServiceConnection").GetTokenCredential();
    
       return new BlobsStorage(
          new Uri("{{your-blobs-storage-endpoint}}/agent-state"),
          tokenCredential);
    });