Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Depolama, konuşma geçmişinin nerede yaşadığını, ne kadar geçmişin yüklendiğini ve oturumların ne kadar güvenilir bir şekilde sürdürülebileceğini denetler.
Yerleşik depolama modları
Agent Framework iki normal depolama modunu destekler:
| Çalışma Modu | Ne depolanır | Tipik kullanım |
|---|---|---|
| Yerel oturum durumu |
AgentSession.state tam sohbet geçmişi (örneğin InMemoryHistoryProvider aracılığıyla) |
Sunucu tarafı konuşma kalıcılığı gerektirmeyen hizmetler |
| Hizmet tarafından yönetilen depolama | Hizmetteki konuşma durumu; AgentSession.service_session_id ona işaret eder |
Yerel kalıcı konuşma desteğine sahip hizmetler |
Bellek içi sohbet geçmişi depolama
Sağlayıcı sunucu tarafı sohbet geçmişi gerektirmediğinde, Agent Framework geçmişi oturumda yerel olarak tutar ve her çalıştırmada ilgili iletiler gönderir.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetChatClient(modelName)
.AsAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", session));
// Works when in-memory storage is active.
IList<ChatMessage>? messages = session.GetService<IList<ChatMessage>>();
from agent_framework import InMemoryHistoryProvider
from agent_framework.openai import OpenAIChatClient
agent = OpenAIChatClient().as_agent(
name="StorageAgent",
instructions="You are a helpful assistant.",
context_providers=[InMemoryHistoryProvider("memory", load_messages=True)],
)
session = agent.create_session()
await agent.run("Remember that I like Italian food.", session=session)
Bellek içi geçmiş boyutunu küçültme
Geçmiş model sınırları için çok büyükse bir azaltıcı uygulayın.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetChatClient(modelName)
.AsAIAgent(new ChatClientAgentOptions
{
Name = "Assistant",
ChatOptions = new() { Instructions = "You are a helpful assistant." },
ChatHistoryProviderFactory = (ctx, ct) => new ValueTask<ChatHistoryProvider>(
new InMemoryChatHistoryProvider(
new MessageCountingChatReducer(20),
ctx.SerializedState,
ctx.JsonSerializerOptions,
InMemoryChatHistoryProvider.ChatReducerTriggerEvent.AfterMessageAdded))
});
Uyarı
Azaltıcı yapılandırması bellek içi geçmiş sağlayıcıları için geçerlidir. Hizmet tarafından yönetilen geçmiş için azaltma davranışı sağlayıcıya/hizmete özgüdür.
Hizmet tarafından yönetilen depolama
Hizmet konuşma geçmişini yönettiğinde, oturum bir uzak konuşma tanımlayıcısı depolar.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetOpenAIResponseClient(modelName)
.AsAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", session));
# Rehydrate when the service already has the conversation state.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Üçüncü taraf depolama düzeni
Veritabanı/Redis/blob destekli geçmiş için özel bir geçmiş sağlayıcısı uygulayın.
Temel kılavuz:
- İletileri oturum kapsamı bir anahtar altında depolayın.
- Döndürülen geçmişi model bağlam sınırları içinde tutun.
- Sağlayıcıya özgü tanımlayıcıları
session.stateiçinde kalıcı hale getirin. - Python'da yalnızca bir geçmiş sağlayıcısı kullanmalıdır
load_messages=True.
from agent_framework.openai import OpenAIChatClient
history = DatabaseHistoryProvider(db_client)
agent = OpenAIChatClient().as_agent(
name="StorageAgent",
instructions="You are a helpful assistant.",
context_providers=[history],
)
session = agent.create_session()
await agent.run("Store this conversation.", session=session)
Yeniden başlatmalar arasında oturumların devamlılığı
Tam AgentSession öğesini, yalnızca ileti metni değil, kalıcı hale getirin.
JsonElement serialized = agent.SerializeSession(session);
// Store serialized payload in durable storage.
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
serialized = session.to_dict()
# Store serialized payload in durable storage.
resumed = AgentSession.from_dict(serialized)
Önemli
AgentSession bir opak durum nesnesi olarak ele alın ve onu oluşturan aracı/sağlayıcı yapılandırmasıyla geri yükleyin.
Tip
Birincil geçmiş yüklemesini etkilemeden zenginleştirilmiş bağlam ve giriş/çıkış yakalamak için ek bir denetim/değerlendirme geçmişi sağlayıcısı (load_messages=False, store_context_messages=True) kullanın.