For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale

Événements et éléments

Recevez les mises à jour en direct et récupérez le travail enregistré.

Les événements indiquent ce qui se passe pendant qu’un agent travaille. Les éléments sont les messages et les appels d’outils enregistrés que vous pouvez récupérer par la suite. Utilisez les événements pour mettre à jour votre application en temps réel et les éléments pour afficher son historique enregistré.

Votre application envoie des événements d’entrée pour soumettre des messages, annuler des tours ou renvoyer des résultats d’outils. L’agent envoie des événements qui signalent les sorties et les modifications de la session. Pour envoyer des entrées, consultez Exécutez et poursuivez des sessions.

Consommez un flux

Abonnez-vous avant de soumettre du travail afin que votre application reçoive les premiers événements du tour. Fournissez votre client API, l’identifiant de session de la conversation et un gestionnaire d’événements :

Recevez les événements de session en continu
# Pass your saved session ID to this helper.
def stream_session(client: OpenAI, session_id: str, handle_event):
    with client.beta.agents.sessions.events.stream(session_id) as events:
        for event in events:
            handle_event(event)
            match event.type:
                case "agent.session.idle":
                    continue
                case "error":
                    raise RuntimeError(event.error.message)
                case "agent.session.failed" | "agent.session.environment.failed":
                    raise RuntimeError(f"Agent lifecycle failure: {event.type}")
                case "agent.session.turn.failed":
                    if event.turn.subagent_id is None:
                        detail = event.turn.error.message if event.turn.error else ""
                        raise RuntimeError(f"{event.type}: {detail}")
                case "agent.session.turn.cancelled":
                    if event.turn.subagent_id is None:
                        raise RuntimeError("The agent turn was cancelled")
                case "agent.session.turn.completed":
                    if event.turn.subagent_id is None:
                        return
    raise RuntimeError("Stream closed before a turn ended. Retrieve the saved state.")

La fonction utilitaire transmet chaque événement à votre gestionnaire, puis vérifie les types d’événements courants. Elle poursuit la lecture à la réception de agent.session.idle et rend la main lorsque le tour racine se termine. Elle lève une erreur si le tour racine échoue ou est annulé, si la session ou l’environnement échoue, ou si un événement error arrive. Les événements liés aux tours des sous-agents ne mettent pas fin au flux. Votre gestionnaire détermine comment afficher la sortie ; le code appelant gère les erreurs de la fonction utilitaire. Si le flux se ferme avant la fin d’un tour, la fonction utilitaire lève une erreur. Consultez Rétablir un flux déconnecté.

Envoyez un message après l’abonnement

Cette version accepte un message et le soumet après avoir ouvert le flux :

Envoyez un message et recevez les événements en continu
# Pass your saved session ID and message to this helper.
def send_and_stream(client: OpenAI, session_id: str, text, handle_event):
    with client.beta.agents.sessions.events.stream(session_id) as events:
        client.beta.agents.sessions.events.create(
            session_id,
            events=[
                {
                    "type": "agent.session.input.message",
                    "input": [
                        {
                            "role": "user",
                            "content": [{"type": "input_text", "text": text}],
                        }
                    ],
                }
            ],
        )
        for event in events:
            handle_event(event)
            match event.type:
                case "agent.session.idle":
                    continue
                case "error":
                    raise RuntimeError(event.error.message)
                case "agent.session.failed" | "agent.session.environment.failed":
                    raise RuntimeError(f"Agent lifecycle failure: {event.type}")
                case "agent.session.turn.failed":
                    if event.turn.subagent_id is None:
                        detail = event.turn.error.message if event.turn.error else ""
                        raise RuntimeError(f"{event.type}: {detail}")
                case "agent.session.turn.cancelled":
                    if event.turn.subagent_id is None:
                        raise RuntimeError("The agent turn was cancelled")
                case "agent.session.turn.completed":
                    if event.turn.subagent_id is None:
                        return
    raise RuntimeError("Stream closed before a turn ended. Retrieve the saved state.")

Traitez les mises à jour

Utilisez le champ type de l’événement pour déterminer ce que votre application doit faire :

  • Affichez le texte : Ajoutez agent.session.turn.output_text.delta à la fin de la partie de contenu concernée. À la réception de agent.session.turn.output_text.done, remplacez cette partie par son texte complet. Les deltas peuvent être absents.
  • Suivez le travail : Les événements de session, de tour et d’élément indiquent la progression. Vérifiez la réception de agent.session.turn.completed, agent.session.turn.failed ou agent.session.turn.cancelled pour déterminer l’issue du tour.
  • Fournissez les entrées requises : À la réception de agent.session.requires_action, récupérez la session et examinez required_actions. Votre code peut devoir renvoyer un résultat de fonction ou connecter un environnement.

Une session inactive ou un flux fermé ne suffit pas à établir la réussite. Un tour terminé ne garantit pas non plus que tous les outils ont réussi. Examinez les sorties de l’agent.

Utilisez item_id, output_index et content_index pour associer les mises à jour de texte à une même partie de contenu. Par exemple, ces événements abrégés mettent à jour une seule partie :

{
  "type": "agent.session.turn.output_text.delta",
  "item_id": "msg_789",
  "output_index": 0,
  "content_index": 0,
  "delta": "Acme competes"
}
{
  "type": "agent.session.turn.output_text.done",
  "item_id": "msg_789",
  "output_index": 0,
  "content_index": 0,
  "text": "Acme competes on price and distribution."
}

Chaque événement possède son propre event_id. Le champ item_id commun identifie l’élément enregistré, qui comprend le contenu, le statut et la phase du message. Consultez Récupérez le travail enregistré.

Consultez la référence des événements diffusés en continu pour connaître tous les types d’événements et leurs champs. Ces événements de flux sont distincts des webhooks. Pour l’activité des sous-agents et l’attribution des commandes, consultez Observez la délégation.

Récupérez les éléments et les tours

Utilisez l’identifiant de session stocké dans l’état de la conversation de votre application pour récupérer le travail enregistré :

Les points de terminaison de liste renvoient une page à la fois. Utilisez les fonctions de pagination du SDK ou le curseur after pour récupérer davantage de résultats. Une seule page peut ne pas contenir tous les éléments d’un tour. Utilisez order: "asc" pour lire les éléments du plus ancien au plus récent.

Comment rétablir un flux déconnecté

Les flux ne rejouent pas les événements manqués. Pour restaurer la vue de votre application :

  1. Ouvrez un nouveau flux et mettez les événements entrants en mémoire tampon.
  2. Récupérez la session et ses éléments enregistrés tout en maintenant le flux connecté.
  3. Restaurez votre état local à partir de ces éléments, en utilisant leurs identifiants comme clés.
  4. Appliquez les mises à jour d’éléments mises en mémoire tampon à l’aide de item_id. Ignorez les mises à jour des éléments qui ont déjà atteint leur état final dans l’historique récupéré.
  5. Reprenez le traitement des événements en direct.

Un événement output_text.done peut remplacer le contenu d’un tampon de texte temporaire par le texte complet. Les éléments enregistrés vous permettent de récupérer le travail terminé, mais pas tous les événements intermédiaires que vous avez manqués.