Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Speicher steuert, wo der Chatverlauf gespeichert wird, wie viel Verlauf geladen werden soll und wie zuverlässig Sitzungen fortgesetzt werden können.
Integrierte Speichermodi
Agent Framework unterstützt zwei reguläre Speichermodi:
| Modus | Was gespeichert ist | Typische Verwendung |
|---|---|---|
| Lokaler Sitzungszustand | Vollständiger Chatverlauf in AgentSession.state (z. B. über InMemoryHistoryProvider) |
Dienste, die keine serverseitige Unterhaltungspersistenz erfordern |
| Vom Dienst verwalteter Speicher | Konversationszustand im Dienst; AgentSession.service_session_id verweist darauf |
Dienste mit nativer Unterstützung für beständige Unterhaltungen |
Speicher für Chatverlauf im Arbeitsspeicher
Wenn ein Anbieter keinen serverseitigen Chatverlauf erfordert, speichert Agent Framework den Verlauf lokal in der Sitzung und sendet relevante Nachrichten auf jeder Ausführung.
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)
Verringern der Größe des Speicherverlaufs
Wenn der Verlauf für Modellgrenzwerte zu groß wird, wenden Sie einen Reducer an.
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))
});
Hinweis
Die Reduzierungskonfiguration gilt für Speicherverlaufsanbieter. Für den dienstverwalteten Verlauf ist das Reduzierungsverhalten spezifisch für den Anbieter/Dienst.
Vom Dienst verwalteter Speicher
Wenn der Dienst den Unterhaltungsverlauf verwaltet, speichert die Sitzung einen Remoteunterhaltungsbezeichner.
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)
Speichermuster von Drittanbietern
Für den Datenbank-/Redis/Blob-gestützten Verlauf implementieren Sie einen benutzerdefinierten Verlaufsdienst.
Wichtige Anleitungen:
- Speichern Von Nachrichten unter einem sitzungsbezogenen Schlüssel.
- Behalten Sie den zurückgegebenen Verlauf innerhalb von Modellkontextgrenzwerten bei.
- Speichern Sie anbieterspezifische Bezeichner in
session.state. - In Python sollte nur ein Verlaufsanbieter
load_messages=Trueverwenden.
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)
Beibehalten von Sitzungen über Neustarts hinweg
Speichern Sie den vollen AgentSession und nicht nur den Nachrichtentext.
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)
Von Bedeutung
Behandeln Sie AgentSession als ein undurchsichtiges Zustandsobjekt und stellen Sie es mit derselben Agent-/Anbieterkonfiguration wieder her, die es erstellt hat.
Tipp
Verwenden Sie einen zusätzlichen Überwachungs-/Eval-Verlaufsanbieter (load_messages=False, store_context_messages=True), um einen erweiterten Kontext sowie Eingabe und Ausgabe zu erfassen, ohne das Laden des primären Verlaufs zu beeinträchtigen.