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를 사용합니다.
프로덕션 고려 사항
- 암호화된 연결, 인증된 사용자 및 네트워크 격리를 사용합니다.
- 내구성 요구 사항과 일치하는 지속성 및 제거 정책을 정의합니다.
- 대화 식별자를 신뢰할 수 있는 서버 쪽 상태로 저장하고 기록을 로드하기 전에 소유권을 확인합니다.
- 테넌트 격리에 필요한 경우 별도의 키 접두사 또는 배포를 사용합니다.