Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le stockage contrôle l'emplacement où se trouve l'historique des conversations, la quantité d'historique chargée, ainsi que la reprise fiable des sessions.
Modes de stockage intégrés
Agent Framework prend en charge deux modes de stockage standard :
| Mode | Qu’est-ce qui est stocké ? | Utilisation classique |
|---|---|---|
| État de session locale | Historique de conversation complet dans AgentSession.state (par exemple via InMemoryHistoryProvider) |
Services qui ne nécessitent pas de persistance de conversation côté serveur |
| Stockage géré par le service | État de la conversation dans le service ; AgentSession.service_session_id pointe vers celui-ci |
Services avec prise en charge des conversations persistantes intégrées |
Stockage de l’historique des conversations en mémoire
Lorsqu’un fournisseur ne nécessite pas d’historique de conversation côté serveur, Agent Framework conserve l’historique localement dans la session et envoie des messages pertinents sur chaque exécution.
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)
Réduction de la taille de l’historique en mémoire
Si l'historique devient trop grand pour les limites du modèle, appliquez un réducteur.
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))
});
Note
La configuration du réducteur s’applique aux fournisseurs d’historique en mémoire. Pour l’historique géré par le service, le comportement de réduction est spécifique au fournisseur/au service.
Stockage géré par le service
Lorsque le service gère l’historique des conversations, la session stocke un identificateur de conversation distant.
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)
Modèle de stockage tiers
Pour l’historique basé sur des bases de données/Redis/blobs, implémentez un fournisseur d’historique personnalisé.
Conseils clés :
- Stockez les messages sous une clé délimitée à la session.
- Conservez l’historique renvoyé dans les limites du contexte du modèle.
- Conserver les identificateurs spécifiques au fournisseur dans
session.state. - Dans Python, un seul fournisseur d’historique doit utiliser
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)
Persistance des sessions entre les redémarrages
Conservez le texte complet AgentSessionet non seulement le texte du message.
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)
Important
Traitez comme un objet d’état opaque et restaurez-le AgentSession avec la même configuration agent/fournisseur que celle qui l’a créée.
Conseil / Astuce
Utilisez un fournisseur d’historique d’audit/d’évaluation supplémentaire (load_messages=False, store_context_messages=True) pour capturer le contexte enrichi ainsi que les données d'entrée/sortie sans affecter le chargement de l’historique principal.