Valkey

ValkeyChatHistoryProviderは、Valkey リスト.NETエージェントの会話履歴を保持します。 これは、検索モジュールを必要とせずに、Valkey と互換性のある Redis OSS サーバーで動作します。

この統合では、メッセージ交換ストレージ パターンが使用されます。セマンティック メモリを抽出または取得するのではなく、正確なメッセージを再読み込みします。

この統合には、完全なトランスクリプトが格納されます。セマンティック メモリを抽出したり、ベクターの取得を提供したりすることはありません。

パッケージをインストールする

dotnet add package Microsoft.Agents.AI.Valkey --prerelease
dotnet add package Valkey.Glide

永続的な履歴を構成する

Valkey 接続を作成し、状態初期化子で会話キーを選択し、 ChatHistoryProvider経由でプロバイダーをアタッチします。

var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
var valkeyConnection = Environment.GetEnvironmentVariable("VALKEY_CONNECTION") ?? "localhost:6379";

var connection = await ConnectionMultiplexer.ConnectAsync(valkeyConnection);

Console.WriteLine("=== ValkeyChatHistoryProvider — Persistent Chat History ===\n");

var historyProvider = new ValkeyChatHistoryProvider(
    connection,
    _ => new ValkeyChatHistoryProvider.State($"sample-{Guid.NewGuid():N}"),
    new ValkeyChatHistoryProviderOptions
    {
        KeyPrefix = "sample_chat",
        MaxMessages = 20
    });

AIAgent historyAgent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
    .AsAIAgent(new ChatClientAgentOptions()
    {
        ChatOptions = new() { ModelId = deploymentName, Instructions = "You are a helpful assistant that remembers our conversation." },
        ChatHistoryProvider = historyProvider
    });

AgentSession session1 = await historyAgent.CreateSessionAsync();
Console.WriteLine(await historyAgent.RunAsync("Hello! My name is Alex and I'm a software engineer.", session1));
Console.WriteLine(await historyAgent.RunAsync("I'm working on a project using Valkey for caching.", session1));
Console.WriteLine(await historyAgent.RunAsync("What do you remember about me?", session1));

var messageCount = await historyProvider.GetMessageCountAsync(session1);
Console.WriteLine($"\n  Stored {messageCount} messages in Valkey.\n");

KeyPrefix はアプリケーション データを分離し、 MaxMessages は保持されたトランスクリプトをバインドします。 再起動後に履歴を再開する必要がある場合は、アプリケーション所有の安定した会話 ID を使用します。

実稼働に関する考慮事項

  • 暗号化された接続、認証されたユーザー、およびネットワークの分離を使用します。
  • 持続性の要件に一致する永続化ポリシーと削除ポリシーを定義します。
  • 会話識別子を信頼されたサーバー側の状態に格納し、履歴を読み込む前に所有権を確認します。
  • テナントの分離で必要な場合は、個別のキー プレフィックスまたはデプロイを使用します。

次のステップ