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

Ereignisse und Elemente

Live-Aktualisierungen verarbeiten und gespeicherte Arbeit abrufen.

Ereignisse melden, was passiert, während ein Agent arbeitet. Elemente sind die gespeicherten Nachrichten und Werkzeugaufrufe, die du später abrufen kannst. Verwende Ereignisse, um deine Anwendung in Echtzeit zu aktualisieren, und Elemente, um ihren gespeicherten Verlauf anzuzeigen.

Deine Anwendung sendet Eingabeereignisse, um Nachrichten zu übermitteln, Durchläufe abzubrechen oder Werkzeugergebnisse zurückzugeben. Der Agent sendet Ereignisse, die Ausgaben und Änderungen an der Sitzung melden. Wie du Eingaben sendest, erfährst du unter Sitzungen ausführen und fortsetzen.

Einen Stream verarbeiten

Abonniere den Stream, bevor du Aufgaben sendest, damit deine Anwendung auch die ersten Ereignisse des Durchlaufs empfängt. Übergib deinen API-Client, die Sitzungs-ID der Unterhaltung und einen Ereignishandler:

Sitzungsereignisse streamen
# 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.")

Die Hilfsfunktion übergibt jedes Ereignis an deinen Handler und prüft anschließend auf gängige Ereignistypen. Bei agent.session.idle setzt sie die Verarbeitung fort und kehrt zurück, sobald der Root-Turn abgeschlossen ist. Sie löst einen Fehler aus, wenn der Root-Turn fehlschlägt oder abgebrochen wird, die Sitzung oder Umgebung ausfällt oder ein error-Ereignis eintrifft. Ereignisse aus Subagenten-Turns beenden den Stream nicht. Dein Handler entscheidet, wie die Ausgabe angezeigt wird; der aufrufende Code behandelt Fehler der Hilfsfunktion. Wird der Stream geschlossen, bevor ein Turn endet, löst die Hilfsfunktion einen Fehler aus. Siehe Einen unterbrochenen Stream wiederherstellen.

Nach dem Abonnieren eine Nachricht senden

Diese Version nimmt eine Nachricht entgegen und sendet sie, nachdem der Stream geöffnet wurde:

Eine Nachricht senden und streamen
# 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.")

Aktualisierungen verarbeiten

Entscheide anhand von type des Ereignisses, was deine Anwendung tun soll:

  • Text anzeigen: Hänge agent.session.turn.output_text.delta an den entsprechenden Inhaltsteil an. Sobald agent.session.turn.output_text.done eintrifft, ersetze diesen Teil durch seinen vollständigen Text. Deltas können fehlen.
  • Arbeit verfolgen: Ereignisse zu Sitzungen, Durchläufen und Elementen melden den Fortschritt. Prüfe auf agent.session.turn.completed, agent.session.turn.failed oder agent.session.turn.cancelled, um das Ergebnis des Durchlaufs zu ermitteln.
  • Erforderliche Eingaben bereitstellen: Rufe bei agent.session.requires_action die Sitzung ab und prüfe required_actions. Dein Code muss möglicherweise ein Funktionsergebnis zurückgeben oder eine Umgebung verbinden.

Eine inaktive Sitzung oder ein geschlossener Stream allein belegt keinen Erfolg. Auch ein abgeschlossener Durchlauf garantiert nicht, dass jedes Werkzeug erfolgreich ausgeführt wurde. Prüfe die Ausgabe des Agenten.

Verwende item_id, output_index und content_index, um Textaktualisierungen demselben Inhaltsteil zuzuordnen. Diese gekürzt dargestellten Ereignisse aktualisieren beispielsweise einen Teil:

{
  "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."
}

Jedes Ereignis hat eine eigene event_id. Die gemeinsame item_id identifiziert das gespeicherte Element, das Inhalt, Status und Phase der Nachricht enthält. Siehe Gespeicherte Arbeit abrufen.

Alle Ereignistypen und Felder findest du in der Referenz zu Streaming-Ereignissen. Diese Stream-Ereignisse unterscheiden sich von Webhooks. Informationen zur Aktivität von Subagenten und zur Zuordnung von Befehlen findest du unter Delegation beobachten.

Elemente und Durchläufe abrufen

Verwende die Sitzungs-ID aus dem Gesprächszustand deiner Anwendung, um gespeicherte Arbeit abzurufen:

Listenendpunkte geben jeweils eine Seite zurück. Verwende die Hilfsfunktionen des SDK zur Paginierung oder den Cursor after, um weitere Ergebnisse abzurufen. Eine einzelne Seite enthält möglicherweise nicht alle Elemente eines Durchlaufs. Verwende order: "asc", um die Elemente vom ältesten zum neuesten zu lesen.

Einen unterbrochenen Stream wiederherstellen

Streams geben verpasste Ereignisse nicht erneut wieder. So stellst du die Ansicht deiner Anwendung wieder her:

  1. Öffne einen neuen Stream und puffere eingehende Ereignisse.
  2. Rufe die Sitzung und ihre gespeicherten Elemente ab, während der Stream verbunden bleibt.
  3. Stelle deinen lokalen Zustand anhand dieser Elemente wieder her und verwende dabei die Element-ID als Schlüssel.
  4. Wende die gepufferten Elementaktualisierungen mithilfe von item_id an. Verwirf Aktualisierungen für Elemente, die im abgerufenen Verlauf bereits ihren endgültigen Zustand erreicht haben.
  5. Setze die Verarbeitung von Live-Ereignissen fort.

Ein Ereignis vom Typ output_text.done kann einen temporären Textpuffer durch den vollständigen Text ersetzen. Mit gespeicherten Elementen kannst du abgeschlossene Arbeit wiederherstellen, aber nicht jedes verpasste Zwischenereignis.