Valkey

ValkeyChatHistoryProviderيستمر .NET محفوظات محادثات الوكيل في قوائم Valkey. وهو يعمل مع 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 النسخة المكتوبة التي تم الاحتفاظ بها. استخدم معرف محادثة مستقرة مملوكة للتطبيق عندما يجب استئناف المحفوظات بعد إعادة التشغيل.

اعتبارات الإنتاج

  • استخدم الاتصالات المشفرة والمستخدمين المصادق عليهم وعزل الشبكة.
  • حدد نهج الثبات والإخلاء التي تطابق متطلبات المتانة الخاصة بك.
  • تخزين معرفات المحادثات في حالة موثوق بها من جانب الخادم والتحقق من الملكية قبل تحميل المحفوظات.
  • استخدم بادئات مفاتيح منفصلة أو عمليات نشر عندما يتطلب عزل المستأجر ذلك.

الخطوات التالية