Valkey

ValkeyChatHistoryProviderconserve .NET’historique des conversations de l’agent dans les listes Valkey. Il fonctionne avec valkey et les serveurs Redis OSS compatibles sans nécessiter de module de recherche.

Cette intégration utilise le modèle de stockage de conversation : il recharge des messages exacts plutôt que d’extraire ou de récupérer des mémoires sémantiques.

Cette intégration stocke la transcription complète ; il n’extrait pas les mémoires sémantiques ou ne fournit pas de récupération de vecteur.

Installer les packages

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

Configurer l’historique persistant

Créez la connexion Valkey, choisissez une clé de conversation dans l’initialiseur d’état et attachez le fournisseur via 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 sépare les données d’application et MaxMessages limite la transcription conservée. Utilisez un ID de conversation stable appartenant à l’application lorsque l’historique doit être repris après un redémarrage.

Considérations relatives à la production

  • Utilisez des connexions chiffrées, des utilisateurs authentifiés et l’isolation réseau.
  • Définissez les stratégies de persistance et d’éviction qui correspondent à vos exigences de durabilité.
  • Stockez les identificateurs de conversation dans un état côté serveur approuvé et vérifiez la propriété avant le chargement de l’historique.
  • Utilisez des préfixes ou des déploiements de clés distincts lorsque l’isolation du locataire l’exige.

Étapes suivantes