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.
AgentSession est le conteneur d’état de conversation utilisé entre les exécutions de l’agent.
Ce que AgentSession contient
| Champ | Purpose |
|---|---|
StateBag |
Conteneur d’état arbitraire pour cette session |
C# AgentSession est une classe de base abstraite. Les implémentations concrètes (créées via CreateSessionAsync()) peuvent ajouter un état supplémentaire, par exemple un ID pour le stockage de l’historique des conversations distantes, lorsque l’historique géré par le service est utilisé.
| Champ | Purpose |
|---|---|
session_id |
Identificateur unique local pour cette session |
service_session_id |
Identificateur de session de service distant, tel qu’un ID de conversation ou de réponse, lorsque l’historique géré par le service est utilisé |
state |
Dictionnaire mutable partagé avec des fournisseurs de contexte/d’historique |
| Champ | Purpose |
|---|---|
agent.Session |
Conteneur d’état clé-valeur lié à une conversation |
Les sessions fournissent un stockage clé-valeur typé :
type UserPrefs struct {
Theme string `json:"theme"`
Language string `json:"language"`
}
session.Set("user_prefs", UserPrefs{Theme: "dark", Language: "en"})
var prefs UserPrefs
session.Get("user_prefs", &prefs)
session.Delete("user_prefs")
Étendue de l’ID de session de service
Lorsque l’historique géré par le service est utilisé, une session peut contenir un identificateur de session émis par le service. Par exemple, les réponses OpenAI peuvent utiliser un resp_* ID de réponse comme previous_response_id, et l’API Conversations OpenAI peut utiliser un conv_* ID de conversation comme conversation.
Par défaut, OpenAI limite ces identifiants à la clé d’API sous-jacente ou au projet. Cela suffit généralement lorsque cette clé ou ce projet correspond déjà à la limite de l’application, telle qu’une application mono-utilisateur ou une clé/projet distincte par locataire. Le schéma d’hébergement risqué consiste à utiliser une même clé sous-jacente ou un même projet pour plusieurs utilisateurs finaux, à renvoyer aux clients les identifiants internes bruts du service, puis à accepter ces identifiants en retour sans vérifier qu’ils en sont bien propriétaires. Dans les applications hébergées ou multi-utilisateurs qui réutilisent une clé sous-jacente ou un projet, ne traitez pas service_session_id, previous_response_id ou conversation/conversation_id comme des frontières d’autorisation pour l’utilisateur final. Stockez les ID côté service dans le stockage d’applications approuvés, mappez les ID de session visibles par le client à ces ID côté service et vérifiez l’utilisateur ou le locataire authentifié avant de reprendre une conversation.
Modèle d’utilisation intégré
AgentSession session = await agent.CreateSessionAsync();
var first = await agent.RunAsync("My name is Alice.", session);
var second = await agent.RunAsync("What is my name?", session);
session = agent.create_session()
first = await agent.run("My name is Alice.", session=session)
second = await agent.run("What is my name?", session=session)
session, err := a.CreateSession(ctx)
if err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Hello!", agent.WithSession(session)).Collect()
resp, _ = a.RunText(ctx, "Follow-up question.", agent.WithSession(session)).Collect()
Utiliser des sessions avec l’agent Harness
Harness Agent utilise le même AgentSession cycle de vie que celui décrit ci-dessus. Réutilisez une session à plusieurs tours afin que l’historique des conversations et les fonctionnalités d’exploitation sauvegardées par session(par exemple, todos, mode d’exploitation, mémoire de fichier, approbations d’outils et état des tâches en arrière-plan) restent connectées. Sérialisez la session lorsque cet état doit survivre à un redémarrage du processus.
HarnessAgent a la valeur par défaut InMemoryChatHistoryProvider. Remplacez-le par HarnessAgentOptions.ChatHistoryProvider le biais du moment où l’historique doit utiliser un autre magasin.
AsHarnessAgent(options) est abrégé pour la construction new HarnessAgent(chatClient, options).
HarnessAgent agent = chatClient.AsHarnessAgent();
AgentSession session = await agent.CreateSessionAsync();
await agent.RunAsync("Plan the migration.", session);
await agent.RunAsync("Continue with the next step.", session);
var serialized = await agent.SerializeSessionAsync(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
Le harnais conserve l’historique des conversations locales après chaque appel de modèle à l’intérieur d’une boucle d’appel d’outils, non seulement après l’exécution de l’agent externe. Continuez à passer la même session pour conserver cet historique en boucle et l’état des fournisseurs de contexte par défaut.
create_harness_agent
history_provider est défini par défaut sur InMemoryHistoryProvider(). Passez une commande personnalisée HistoryProviderhistory_provider= lorsque l’historique doit utiliser un autre magasin.
agent = create_harness_agent(client)
session = agent.create_session()
await agent.run("Plan the migration.", session=session)
await agent.run("Continue with the next step.", session=session)
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
Le harnais nécessite la persistance de l’historique des appels par service. Par conséquent, le fournisseur d’historique configuré enregistre chaque appel de modèle à l’intérieur d’une boucle d’outil. Une session est également requise par le middleware d’approbation d’outil par défaut ; réutilisez et restaurez-le pour conserver l’état de l’approbation et du fournisseur de contexte.
L’agent Harness n’est actuellement pas disponible dans le Kit de développement logiciel (SDK) Go. Utilisez le modèle de session régulière indiqué ci-dessus.
Création d’une session à partir d’un ID de conversation de service existant
La création d’une session à partir d’un ID de conversation existant varie selon le type d’agent. Voici quelques exemples.
Lors de l'utilisation de ChatClientAgent
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
Lors de l’utilisation d’un A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Utilisez ceci lorsque le service de support dispose déjà d'un état de conversation.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Dans les applications hébergées, résolvez <service-conversation-id> à partir du stockage appartenant à l’application après avoir vérifié l’utilisateur ou le locataire actuel. Évitez d’accepter des identifiants bruts générés côté service fournis par un client, sauf si vous vérifiez d’abord que l’appelant est bien propriétaire de la conversation.
Sérialisation et restauration
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
Dans une application auto-hébergée, une AgentSessionStore application peut charger et enregistrer des sessions par un ID de continuation dans le cadre du traitement des demandes. Cela est distinct de la persistance manuelle d’une session et de la configuration d’un fournisseur d’historique. Consultez les applications Framework de l’agent auto-hôte.
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
data, err := json.Marshal(session)
if err != nil {
panic(err)
}
// Save to disk, database, etc.
if err := os.WriteFile("session.json", data, 0o644); err != nil {
panic(err)
}
// Later, restore the session.
loaded, err := os.ReadFile("session.json")
if err != nil {
panic(err)
}
var resumedSession agent.Session
if err := json.Unmarshal(loaded, &resumedSession); err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Continue from where we left off.", agent.WithSession(&resumedSession)).Collect()
Tip
Consultez l’exemple de conversation persistant pour obtenir un exemple complet.
Important
Les sessions sont spécifiques à l’agent/au service. La réutilisation d’une session avec une autre configuration d’agent ou fournisseur peut entraîner un contexte non valide. Si la session sérialisée contient un ID de session côté service, restaurez-la uniquement pour l’utilisateur ou le locataire de l’application propriétaire de cet ID.