Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opslag bepaalt waar de gespreksgeschiedenis zich bevindt, hoeveel geschiedenis wordt geladen en hoe betrouwbaar sessies kunnen worden hervat.
Ingebouwde opslagmodi
Agent Framework ondersteunt twee normale opslagmodi:
| Modus | Wat wordt opgeslagen | Normaal gebruik |
|---|---|---|
| Status van lokale sessie | Volledige chatgeschiedenis in AgentSession.state (bijvoorbeeld via InMemoryHistoryProvider) |
Services waarvoor geen gesprekspersistentie aan de serverzijde is vereist |
| Door de service beheerde opslag | Gespreksstatus in de service; AgentSession.service_session_id verwijst ernaar |
Services met systeemeigen ondersteuning voor permanente gesprekken |
Opslag van chatgeschiedenis in het geheugen
Wanneer een provider geen chatgeschiedenis aan de serverzijde vereist, bewaart Agent Framework de geschiedenis lokaal in de sessie en verzendt relevante berichten bij elke uitvoering.
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)
De geschiedenisgrootte in het geheugen verminderen
Als geschiedenis te groot wordt voor de modellimieten, gebruik een reducer.
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))
});
Opmerking
De reducerconfiguratie is van toepassing op geschiedenisproviders in het geheugen. Voor de door de service beheerde geschiedenis is het reductiegedrag provider-/servicespecifiek.
Door de service beheerde opslag
Wanneer de service de gespreksgeschiedenis beheert, slaat de sessie een externe gespreks-id op.
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)
Opslagpatroon van derden
Implementeer een aangepaste geschiedenisprovider voor database-/Redis-/blob-ondersteunde geschiedenis.
Belangrijke richtlijnen:
- Sla berichten op onder een sleutel voor sessiebereik.
- Houd de geretourneerde geschiedenis binnen de contextlimieten van het model.
- Providerspecifieke id's behouden in
session.state. - In Python mag slechts één geschiedenisprovider
load_messages=Truegebruiken.
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)
Permanente sessies bij opnieuw opstarten
Behoud de volledige tekst AgentSession, niet alleen berichttekst.
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)
Belangrijk
Behandelen AgentSession als een ondoorzichtig statusobject en herstellen met dezelfde agent-/providerconfiguratie die het heeft gemaakt.
Aanbeveling
Gebruik een extra controle-/evaluatiegeschiedenisprovider (load_messages=False, ) store_context_messages=Trueom verrijkte context plus invoer/uitvoer vast te leggen zonder dat dit van invloed is op het laden van de primaire geschiedenis.