Valkey

ValkeyChatHistoryProvider.NET aracı konuşma geçmişini Valkey listelerinde kalıcı hale alır. Arama modülü gerektirmeden Valkey ve uyumlu Redis OSS sunucularıyla çalışır.

Bu tümleştirme konuşma depolama düzenini kullanır: anlamsal bellekleri ayıklamak veya almak yerine tam iletileri yeniden yükler.

Bu tümleştirme tam transkripti depolar; anlamsal bellekleri ayıklamaz veya vektör alma sağlamaz.

Paketleri yükleme

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

Kalıcı geçmişi yapılandırma

Valkey bağlantısını oluşturun, durum başlatıcıda bir konuşma anahtarı seçin ve sağlayıcıyı aracılığıyla ChatHistoryProviderekleyin.

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 uygulama verilerini ayırır ve MaxMessages tutulan transkripti sınırlar. Yeniden başlatmadan sonra geçmişin sürdürülebilmesi gerektiğinde uygulamaya ait kararlı bir konuşma kimliği kullanın.

Üretimle ilgili dikkat edilmesi gerekenler

  • Şifrelenmiş bağlantılar, kimliği doğrulanmış kullanıcılar ve ağ yalıtımı kullanın.
  • Dayanıklılık gereksinimlerinize uyan kalıcılık ve çıkarma ilkeleri tanımlayın.
  • Konuşma tanımlayıcılarını güvenilen sunucu tarafı durumunda depolayın ve geçmişi yüklemeden önce sahipliği doğrulayın.
  • Kiracı yalıtımı gerektirdiğinde ayrı anahtar ön ekleri veya dağıtımları kullanın.

Sonraki Adımlar