Partager via


Stockage

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.

Prochaines étapes