代理 SDK 存储概述

存储是Microsoft代理 SDK 的关键组件,使代理能够跨会话保留会话状态、用户数据和其他信息。 它支持各种存储选项,包括内存中存储、Azure Cosmos DB、Azure Blobs 存储以及允许自定义存储提供程序。

密钥存储选项

  1. 内存存储

    • 适用于测试和开发目的。
    • 当代理重启时,会清除数据,使其不适合生产。
    • 数据仅在 Web 应用实例上可用,因此在群集中运行时不合适。
  2. Azure Cosmos DB

    • 全球分布式多模型数据库非常适合生产代理。
    • 支持分区存储,实现可伸缩性和性能。
  3. Azure Blob 存储

    • 针对存储非结构化数据(如文本或二进制文件)进行了优化。
    • 通常用于代理状态和脚本存储。
  4. 通过实现IStorage可以提供自定义存储选项

使用不同的存储提供程序

内存存储

所有示例都使用 MemoryStorage

针对 .NET,在 Program.cs 中注册 MemoryStorage

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

Azure CosmosDb 存储

对于 .NET:

  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 Storage

对于 .NET:

  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);
    });