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

Checkliste für die API-Bereitstellung

Ein kompakter Leitfaden zu oft zu wenig genutzten, wirkungsvollen Designentscheidungen, die Qualität, Geschwindigkeit, Kosten und Zuverlässigkeit deiner Bereitstellung deutlich verbessern können.

Die Responses API verwenden

Starte immer mit der Responses API. Sie ist die führende API von OpenAI und die beste Wahl, um das neueste Modellverhalten, integrierte Werkzeuge, zustandsbehaftete Arbeitsabläufe und Agentenfunktionen zu nutzen.

Ein GPT-5.6-Modell auswählen

Wähle ein GPT-5.6-Modell passend zur Aufgabe, statt jede Anfrage an die leistungsfähigste Modellstufe zu leiten. Verwende gpt-5.6 oder gpt-5.6-sol für höchste Leistungsfähigkeit, gpt-5.6-terra für starke Leistung zu einem niedrigeren Preis und gpt-5.6-luna für die effiziente Verarbeitung großer Anfragevolumen.

Behalte bei der Migration für den ersten Vergleich die bisherige Rolle des Modells im Arbeitsablauf und seinen tatsächlichen Reasoning-Aufwand bei. Führe repräsentative Evaluationen durch, bevor du Prompts änderst oder neue Funktionen hinzufügst. Vergleiche den Aufgabenerfolg, die Latenz, die Anzahl der Eingabe-, Ausgabe- und Reasoning-Token sowie der in den Cache geschriebenen Token und die Kosten pro erfolgreich abgeschlossener Aufgabe.

reasoning.effort konfigurieren

Mit reasoning.effort legst du fest, wie viel das Modell nachdenken soll, bevor es antwortet.

GPT-5.6-Modelle unterstützen die Werte none, low, medium, high, xhigh und max. Der Standardwert ist medium. Ein geringerer Reasoning-Aufwand führt schneller zu Ergebnissen und verbraucht weniger Reasoning-Token. Ein höherer Reasoning-Aufwand gibt dem Modell mehr Zeit für Planung, Debugging, das Zusammenführen von Informationen und mehrstufige Abwägungen.

Verwende low, wenn es hauptsächlich um Extraktion, Routing, Klassifizierung oder einfache Textüberarbeitungen geht. Verwende medium oder high, wenn das Modell ein Problem diagnostizieren, Optionen vergleichen, einen Plan erstellen oder Code durchdenken muss. Verwende xhigh oder max nur, wenn repräsentative Evaluationen zeigen, dass der Qualitätsgewinn die zusätzliche Latenz und die höheren Kosten rechtfertigt. Beginne beim Wechsel von GPT-5.5 oder GPT-5.4 mit dem bisherigen Reasoning-Aufwand und vergleiche diese Einstellung mit der nächstniedrigeren Stufe. GPT-5.6 kann die Qualität oft mit weniger Reasoning-Token halten oder verbessern. Die niedrigere Einstellung kann daher auch Latenz und Kosten senken.

Vergleiche bei den anspruchsvollsten Aufgaben, bei denen Qualität an erster Stelle steht, auch reasoning.mode: "pro" mit dem Standardmodus bei gleichem Reasoning-Aufwand. Reasoning-Modus und Reasoning-Aufwand sind voneinander unabhängig. Der Pro-Modus kann die Zuverlässigkeit verbessern, indem das Modell vor der Ausgabe einer einzigen abschließenden Antwort mehr Arbeit leistet. Allerdings steigen dadurch Latenz und Token-Verbrauch.

Den Reasoning-Aufwand an die Aufgabe anpassen
from openai import OpenAI

client = OpenAI()

prompt = """
Our CI job started failing after a dependency bump.

Error:
TypeError: Timeout.__init__() got an unexpected keyword argument 'connect'

Identify the likeliest root cause and the smallest safe fix.
"""

response = client.responses.create(
    model="gpt-6-astra",
    reasoning={"effort": "xhigh", "mode": "pro"},
    input=prompt,
)

print(response.output_text)

text.verbosity konfigurieren

Mit text.verbosity steuerst du vor allem das Verhältnis zwischen Kürze und Vollständigkeit. Wähle eine geringere Ausführlichkeit, wenn das Produkt eine schnelle, kompakte Antwort benötigt, und eine höhere Ausführlichkeit, wenn die Antwort detailliertere Erklärungen, eine klarere Struktur oder vollständigen Kontext enthalten soll. Eine geringere Ausführlichkeit bedeutet weniger Ausgabe-Token. Das Modell generiert also weniger Text und liefert die Ausgabe schneller.

Beim Programmieren führen medium und high meist zu längeren, besser gegliederten Ausgaben mit klarerer Struktur. Mit low bleibt die Antwort knapper und auf das Wesentliche beschränkt.

GPT-5.6 antwortet standardmäßig meist knapper als GPT-5.5. Prüfe bei der Migration, ob allgemeine Anweisungen wie „Fasse dich kurz“ noch hilfreich sind. In manchen Fällen können sie zu allzu knappen Antworten führen. Behalte sie nur bei, wenn sie weiterhin helfen, und steuere den standardmäßigen Detailgrad vorzugsweise mit text.verbosity. Lege dann im Prompt die erforderlichen Inhalte, die Struktur und gegebenenfalls eine genauere Länge fest.

Für kompakte Ausgaben eine geringere Ausführlichkeit einstellen
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    text={"verbosity": "low"},
    input="""
    Summarize this incident for the next on-call engineer.
    - checkout latency spiked from 220 ms to 4.8 s
    - only us-east-1 was affected
    - rollback is complete
    - likely trigger: cache stampede after deploy
    """,
)

print(response.output_text)

Den Parameter phase für den Assistenten konfigurieren

phase kennzeichnet Nachrichten des Assistenten im Gesprächsverlauf. Daran erkennt das Modell, ob eine frühere Nachricht des Assistenten ein Kommentar während der Bearbeitung oder die abschließende Antwort war. Verwende phase: "commentary" für Fortschrittsmeldungen, Hinweise vor Tool-Aufrufen und andere Zwischenmeldungen. Verwende phase: "final_answer" für die fertige Antwort.

Der Assistent könnte zum Beispiel Folgendes sagen:

Kommentar des Assistenten
{
  "role": "assistant",
  "phase": "commentary",
  "content": "I'm checking the logs and comparing them to the last successful deploy."
}

Das ist noch nicht die Antwort, sondern eine Fortschrittsmeldung. Später könnte der Assistent Folgendes sagen:

Nachricht mit der abschließenden Antwort des Assistenten
{
  "role": "assistant",
  "phase": "final_answer",
  "content": "The deploy failed because the migration referenced a column that does not exist in production."
}

Das ist bei lang andauernden Arbeitsabläufen oder solchen mit vielen Tool-Aufrufen nützlich, bei denen der Assistent vor dem Abschluss sichtbare Fortschrittsmeldungen ausgeben kann. Wenn du diesen Verlauf bei Folgeanfragen an gpt-5.3-codex und spätere Modelle erneut sendest, behalte phase in den Nachrichten des Assistenten bei und sende den Wert erneut mit , damit das Modell Fortschrittsmeldungen vom Endergebnis unterscheiden kann. Dadurch bricht der Agent seltener vorzeitig ab und arbeitet eher weiter, bis er die abschließende Antwort erreicht.

Statt bei jeder Anfrage den gesamten Tool-Katalog zu laden, verwende die Tool-Suche: Füge {"type": "tool_search"} hinzu und kennzeichne umfangreiche Tool-Definitionen mit defer_loading: true. Das Modell kann dann zur Laufzeit die benötigte Teilmenge laden. Zu Beginn der Anfrage sieht das Modell nur den Namen und die Beschreibung des Suchwerkzeugs. Wenn es entscheidet, dass es ein nachzuladendes Werkzeug benötigt, führt es die Tool-Suche aus. Erst dann werden die entsprechenden Tool-Definitionen in den Kontext geladen. Anschließend kann das Modell diese Werkzeuge aufrufen. Das spart Token und erhält die Cache-Leistung.

Die Tool-Suche bietet zwei Modi:

  • Die gehostete Tool-Suche ist die einfachere Option. Verwende sie, wenn du bereits weißt, welche Werkzeuge für die Anfrage verfügbar sein könnten.
  • Die clientseitig ausgeführte Tool-Suche eignet sich für Fälle, in denen deine App entscheiden muss, welche Werkzeuge verfügbar sind, etwa anhand des Mandanten, des Projekts, der Berechtigungen oder der internen Registry der jeweiligen Person.

Beginne mit der gehosteten Tool-Suche , sofern deine App die Suche nach Werkzeugen nicht tatsächlich selbst steuern muss.

Gruppiere deine Werkzeuge danach, was die Nutzenden erreichen wollen. Verwende nach Möglichkeit Namespaces oder MCP-Server. Dem Modell fällt die Auswahl zwischen wenigen klaren Gruppen leichter als aus einer langen, flachen Liste von Funktionen. Für eine optimale Token-Effizienz und Modellleistung empfehlen wir, jeden Namespace auf weniger als etwa 10 Funktionen zu beschränken.

Halte die Beschreibungen der Namespaces kurz und grenze sie klar voneinander ab. Hinterlege ausführliche Anweisungen in den nachzuladenden Tool-Definitionen. Vermeide einen einzigen riesigen Namespace für alles.

Verwende die gehostete Tool-Suche mit nachzuladenden Werkzeugen
from openai import OpenAI

client = OpenAI()

billing_namespace = {
    "type": "namespace",
    "name": "billing",
    "description": "Billing tools for invoices, payments, taxes, and credits.",
    "tools": [
        {
            "type": "function",
            "name": "lookup_invoice",
            "description": "Look up invoice state, taxes, credits, and payment attempts.",
            "parameters": {
                "type": "object",
                "properties": {
                    "invoice_id": {"type": "string"},
                },
                "required": ["invoice_id"],
                "additionalProperties": False,
            },
            "strict": True,
            "defer_loading": True,
        }
    ],
}

crm_namespace = {
    "type": "namespace",
    "name": "crm",
    "description": "CRM tools for account ownership, plans, health, and payment history.",
    "tools": [
        {
            "type": "function",
            "name": "get_account",
            "description": "Fetch account owner, plan, health, and payment history.",
            "parameters": {
                "type": "object",
                "properties": {
                    "account_id": {"type": "string"},
                },
                "required": ["account_id"],
                "additionalProperties": False,
            },
            "strict": True,
            "defer_loading": True,
        }
    ],
}

response = client.responses.create(
    model="gpt-6-astra",
    input=(
        "Find the right billing tool and explain why invoice INV-1043 still "
        "shows overdue after a payment yesterday."
    ),
    tools=[billing_namespace, crm_namespace, {"type": "tool_search"}],
)

print(response.output)

Verwende programmatische Tool-Aufrufe

Mit programmatischen Tool-Aufrufen kann GPT-5.6 JavaScript schreiben, das geeignete Werkzeuge aufruft und deren Zwischenergebnisse in einer gehosteten Laufzeitumgebung reduziert. Nutze diese Funktion für klar abgegrenzte Schritte, in denen Code umfangreiche Tool-Ergebnisse filtern, verknüpfen, nach Rang ordnen, von Duplikaten bereinigen, kombinieren oder prüfen kann, bevor er ein kleineres, strukturiertes Ergebnis an das Modell zurückgibt.

Füge das Werkzeug programmatic_tool_calling hinzu und aktiviere die Funktion für jedes geeignete Werkzeug. Verwende allowed_callers: ["programmatic"] für Werkzeuge, die nur über Programme aufgerufen werden sollen, oder allowed_callers: ["direct", "programmatic"], wenn das Modell das Werkzeug auch direkt aufrufen darf. Behalte direkte Aufrufe bei, wenn jedes Ergebnis die nächste Entscheidung des Modells beeinflussen kann, eine Aktion eine Genehmigung erfordert oder die abschließende Antwort Quellenangaben oder native Artefakte beibehalten muss. Dokumentiere die Rückgabefelder und das Fehlerverhalten der Werkzeuge, damit das Modell ein korrektes Programm schreiben kann, ohne zuvor ein Ergebnis prüfen zu müssen.

Deine Tool-Schleife muss Elemente vom Typ program und program_output sowie vom Programm erzeugte function_call-Elemente und deren function_call_output-Elemente verarbeiten. Behalte jede call_id bei und kopiere den caller-Wert des Funktionsaufrufs in dessen Ausgabe, damit der Dienst das richtige Programm fortsetzen kann.

Teste sowohl program_output als auch die abschließende Nachricht des Assistenten. Selbst ein korrektes Programmergebnis kann zu einer unvollständigen abschließenden Antwort führen. Vergleiche Aufgabenerfolg, erforderliche Belege, gesamten Token-Verbrauch, Latenz und Kosten mit demselben Arbeitsablauf bei direkten Tool-Aufrufen.

Nutze mehrere Agenten für parallele Arbeit

Mit der GPT-5.6-Funktion Mehrere Agenten kann ein Hauptagent unabhängige Arbeitsstränge an Subagenten delegieren und deren Ergebnisse zusammenführen. Nutze sie, wenn du Recherche, Analyse oder Implementierung in konkrete, klar abgegrenzte Aufgaben aufteilen kannst, die jeweils einen eigenen Kontext nutzen und parallel laufen.

Setze multi_agent.enabled in der Anfrage auf true. Verwende für HTTP das Responses SDK in der Betaversion mit client.beta.responses und übergib responses_multi_agent=v1 in betas. Sende bei direkten HTTP- oder WebSocket-Verbindungen OpenAI-Beta: responses_multi_agent=v1. Die Schemas der Elemente können sich ändern, solange die Funktion „Mehrere Agenten“ in der Betaphase ist.

Verwende vorzugsweise einen einzelnen Agenten für kurze Aufgaben, Abläufe, in denen jeder Schritt vom vorherigen abhängt, oder Arbeiten, die in dieselbe veränderbare Ressource schreiben. Subagenten können den Token-Verbrauch erhöhen. Beginne daher mit dem Standardwert 3 für max_concurrent_subagents und miss Qualität, Latenz und Kosten über den gesamten Ablauf. Bei Arbeitsabläufen mit mehreren Agenten, die lange dauern oder viele Tool-Aufrufe nutzen, kann der WebSocket-Modus den Aufwand für die Fortsetzung reduzieren.

Berücksichtige vor dem Aktivieren der Funktion „Mehrere Agenten“ ihre aktuellen Einschränkungen: /responses/compact, reasoning.summary und max_tool_calls werden nicht unterstützt. Der Server verdichtet automatisch den Kontext des Hauptagenten sowie den Kontext jedes Subagenten.

Nutze integrierte Werkzeuge

Integrierte Werkzeuge sind native Funktionen der API. Statt jedes Werkzeug selbst zu entwickeln, kannst du dem Modell Zugriff auf Werkzeuge geben, die bereits innerhalb der Responses API funktionieren. Das Modell kann dann selbst entscheiden, wann es sie verwendet.

OpenAI ergänzt laufend weitere native Werkzeuge. Beginne daher mit integrierten Werkzeugen, wenn sie zu deinem Arbeitsablauf passen. Entwickle eigene Werkzeuge, wenn die nativen Optionen die Aufgabe nicht abdecken. Zu den aktuellen integrierten Werkzeugen und verwandten Optionen gehören:

  • Websuche: Durchsuche das Web nach aktuellen Informationen
  • Dateisuche: Durchsuche hochgeladene Dateien oder Vektorspeicher
  • Code Interpreter: Führe Python für Analysen, Berechnungen, Diagramme und Dateiverarbeitung aus
  • Shell: Führe Shell-Befehle in einem gehosteten Container oder deiner eigenen Laufzeitumgebung aus
  • Computernutzung: Bediene eine Benutzeroberfläche mithilfe von Screenshots, Klicks, Texteingaben und Scrollen
  • Bildgenerierung: Generiere oder bearbeite Bilder
  • MCP/Konnektoren: Verbinde das Modell mit externen Diensten und Werkzeugen
  • Skills: Füge wiederverwendbare Anweisungspakete und Dateien für Arbeitsabläufe hinzu
  • Patch anwenden: Nimm strukturierte Codeänderungen vor

Auch die Qualität der Modellergebnisse spricht für integrierte Werkzeuge. Sie entsprechen der Datenverteilung unseres Nachtrainings: Die Modelle werden anhand der Formate, Verhaltensweisen und Ausgaben dieser Werkzeuge trainiert und evaluiert. Mit integrierten Werkzeugen wählen OpenAI-Modelle die passenden Werkzeuge besser aus, führen sie sauberer aus und verursachen weniger Fehler als mit neuen Werkzeugen.

Nutze Compaction (Kontextverdichtung)

Compaction (Kontextverdichtung) ist ein Werkzeug zur Kontextgestaltung: Es bestimmt, welche Informationen das Modell über viele Gesprächsrunden hinweg beibehält. Bei lang laufenden Agenten geht es nicht nur um die Frage: „Erreiche ich das Kontextlimit?“ Alte Nachrichten, Tool-Protokolle, Wiederholungsversuche und veraltete Details verdrängen zudem die Zustandsinformationen, die das Modell benötigt.

Mit Compaction (Kontextverdichtung) kannst du den Kontext kontrolliert verkleinern und dabei die Zustandsinformationen erhalten, die für nachfolgende Gesprächsrunden benötigt werden. Nach einem wichtigen Meilenstein, etwa dem Abschluss einer Debugging-Phase oder dem Eingrenzen einer Fehlerursache, kannst du das bisherige Kontextfenster verdichten und mit der verdichteten Ausgabe fortfahren. So bleibt das Modell fokussiert: Die nächste Gesprächsrunde baut auf den wichtigen Zustandsinformationen auf, statt auf jeder Zwischenüberlegung, jedem fehlgeschlagenen Befehl und jedem überholten Gedankengang.

Du kannst Compaction (Kontextverdichtung) auf zwei Arten nutzen:

  • Überlasse es dem Server: Wenn du previous_response_id verwendest, aktiviere context_management und lege einen compact_threshold fest. Der Server verdichtet die Unterhaltung automatisch, wenn sie zu groß wird. Du sendest weiterhin nur die neueste Nachricht der nutzenden Person.
  • Übernimm es selbst: Wenn du das gesamte Eingabearray selbst verwaltest, rufe client.responses.compact() auf. Du erhältst ein kleineres Kontextfenster zurück. Verwende diese zurückgegebene Ausgabe direkt beim nächsten Aufruf von responses.create().

Bearbeite die verdichtete Ausgabe nicht. Sie ist keine Zusammenfassung für Menschen, sondern enthält den Maschinenzustand, mit dem das Modell fortfahren kann. Übernimm sie unverändert und füge dann die nächste Nachricht der nutzenden Person hinzu.

Mit dem verdichteten Antwortzustand fortfahren
from openai import OpenAI

client = OpenAI()

# Full window collected from a long debugging session:
# user messages, assistant outputs, tool calls, and tool outputs.
long_window = session_items

compacted = client.responses.compact(
    model="gpt-6-astra",
    input=long_window,
)

next_response = client.responses.create(
    model="gpt-6-astra",
    store=False,
    input=[
        *compacted.output,  # Use compact output as-is.
        {
            "type": "message",
            "role": "user",
            "content": (
                "We found the bad cache invalidation path. Write the fix plan "
                "and the verification checklist."
            ),
        },
    ],
)

print(next_response.output_text)

Optimiere das Prompt-Caching

Prompt-Caching reduziert automatisch Latenz und Kosten, wenn Anfragen dasselbe lange Präfix wiederverwenden. Platziere unveränderliche Anweisungen, Beispiele und Referenzmaterial zuerst, gefolgt von dynamischen, benutzerspezifischen Inhalten. Halte Tool-Definitionen und deren Reihenfolge stabil und hänge neue Gesprächsrunden an, ohne den bisherigen Kontext umzuschreiben.

Mit GPT-5.6 wurde explizites Prompt-Caching eingeführt. Implizites Caching bleibt der Standard, aber GPT-5.6-Modelle und spätere Modellfamilien unterstützen auch explizite Cache-Breakpoints und eine Cache-Richtlinie für die gesamte Anfrage. Wenn auf ein unveränderliches Präfix ein veränderliches Suffix folgt, füge am Ende des wiederverwendbaren Abschnitts einen expliziten prompt_cache_breakpoint hinzu. Setze prompt_cache_options.mode nur dann auf explicit, wenn die Anfrage ausschließlich die von dir angegebenen Breakpoints und keinen impliziten Breakpoint verwenden soll. Frühere Modelle nutzen weiterhin nur automatisches Prompt-Caching.

Bei GPT-5.6-Modellen und späteren Modellfamilien kosten Cache-Schreibvorgänge das 1,25-Fache des Preises für nicht gecachte Eingabetoken. Protokolliere cached_tokens und cache_write_tokens und vergleiche dann das Schreibvolumen mit späteren Cache-Lesevorgängen, um die Nettokosten zu ermitteln und die Platzierung der Breakpoints zu optimieren.

Verwende einen gleichbleibenden Wert für prompt_cache_key bei Anfragen mit einem gemeinsamen, wiederverwendbaren Präfix. So lassen sich zusammengehörige Anfragen leichter an denselben Cache weiterleiten und die Cache-Trefferraten bei Modellen vor GPT-5.6 optimieren. Beachte bei Gruppen mit hohem Anfrageaufkommen die Empfehlungen zur Verteilung des Datenverkehrs auf mehr Schlüssel.

Ab GPT-5.6 ist prompt_cache_key optional: Du kannst auch ohne diesen Schlüssel optimale Cache-Trefferraten erzielen. Mit ihm kannst du die Cache-Nutzung getrennt nach Kundenkonten, nutzenden Personen oder Workspaces erfassen. Dadurch lassen sich die Nutzung gecachter Token und deren Abrechnung für jede Gruppe leichter nachvollziehen. Weise jedem Kundenkonto einen eigenen Schlüssel zu und behalte ihn für alle zusammengehörigen Anfragen dieses Kontos bei. Getrennte Schlüssel helfen außerdem, das gezielte Ausforschen von Cache-Treffern anderer Kundenkonten zu verhindern. Siehe Cache-Nutzung mit Schlüsseln getrennt erfassen.

Cache-Nutzung für ein Kundenkonto getrennt erfassen
from openai import OpenAI

client = OpenAI()

instructions = """
You are the support agent for Acme.
Follow the Acme support policy and escalation rubric.
Use the same tone, safety rules, and tool plan for each ticket.
"""

response = client.responses.create(
    model="gpt-6-astra",
    prompt_cache_key="tenant-acme-support-agent",
    instructions=instructions,
    input="Summarize the current escalation for the on-call lead.",
)

print(response.output_text)

Verwende reasoning.encrypted_content

GPT-5.6 kann Überlegungen über mehrere Aufrufe hinweg beibehalten. Verwende reasoning.context: "all_turns", wenn Ziele, Annahmen und Prioritäten der Aufgabe unverändert bleiben. Verwende current_turn, wenn frühere Überlegungen nicht mehr relevant sind und das Modell auf einen veralteten Ansatz festlegen könnten. Wenn du reasoning.context weglässt oder auf auto setzt, prüfe in der Antwort das Feld reasoning.context, um den tatsächlich verwendeten Modus zu bestätigen.

Das Beibehalten von Überlegungen funktioniert nur, wenn frühere Reasoning-Elemente verfügbar sind. Verwende previous_response_id für gespeicherte Antworten. Wenn deine Anforderungen an keine Datenaufbewahrung (ZDR) das Speichern von Antwortdaten nicht zulassen, ermöglichen verschlüsselte Reasoning-Inhalte eine zustandslose Übergabe.

Reasoning-Elemente in der Antwortausgabe enthalten standardmäßig verschlüsselte Reasoning-Inhalte. Auf diese Inhalte kannst du über die Eigenschaft encrypted_content des jeweiligen Reasoning-Elements zugreifen. Deine App muss diesen Wert nicht interpretieren. Sie behält jedes Reasoning-Element genau so bei, wie es zurückgegeben wurde, und sendet es in der nächsten Gesprächsrunde erneut, damit das Modell den Arbeitsablauf damit fortsetzen kann.

Verschlüsselte Reasoning-Inhalte zwischen zustandslosen Gesprächsrunden weitergeben
from openai import OpenAI

client = OpenAI()

history = [
    {
        "role": "user",
        "content": "Investigate why invoice INV-1043 has mismatched tax totals.",
    }
]

first = client.responses.create(
    model="gpt-6-astra",
    store=False,
    reasoning={"effort": "medium", "context": "current_turn"},
    input=history,
)

history.extend(item.model_dump(exclude={"status"}) for item in first.output)
history.append(
    {
        "role": "user",
        "content": "Now write the customer-facing explanation in plain English.",
    }
)

second = client.responses.create(
    model="gpt-6-astra",
    store=False,
    reasoning={"effort": "medium", "context": "all_turns"},
    input=history,
)

print(second.output_text)

Lege den Bilddetailgrad gezielt fest

Bei GPT-5.6-Modellen werden Bildgrößen bei fehlendem detail und bei detail: "auto" genauso behandelt wie bei original. Der Dienst behält die Eingabeabmessungen bei. Nur Bilder, deren Breite oder Höhe 65.535 Pixel überschreitet, werden so verkleinert, dass sie diese Grenze einhalten. Bilder, die weiterhin das Limit von 30.000 Patches überschreiten, lehnt die API ab, statt sie entsprechend zu verkleinern. Große Bilder können mehr Eingabetokens verbrauchen und dadurch die Latenz erhöhen.

Wähle detail passend zur Aufgabe. Passe die Bildgröße an, verwende low, wenn feine Bilddetails nicht wichtig sind, oder high für ein standardmäßiges, detailgetreues Bildverständnis. Verwende original für Aufgaben mit großen oder detailreichen Bildern, bei denen es auf genaue Koordinaten ankommt, sowie für OCR, Lokalisierung oder visuelle Inspektion, wenn die zusätzlichen Details die Qualität verbessern. Miss vor der Bereitstellung den Tokenverbrauch der Bilder und die Latenz im ungünstigsten Fall.

Sende eine Sicherheitskennung

Wenn deine Anwendung von einzelnen Personen genutzt wird, sende bei jeder Anfrage einen stabilen, datenschutzfreundlichen safety_identifier mit. Er hilft OpenAI, Missbrauch zu erkennen, und bietet deinem Team eine verlässliche Möglichkeit, Richtlinienverstöße nachzuverfolgen. Außerdem verringert er das Risiko, dass der Missbrauch durch eine einzelne Person den Zugriff für deine gesamte Organisation beeinträchtigt.

Bilde einen Hash aus dem Benutzernamen oder der E-Mail-Adresse der jeweiligen Person, statt identifizierende Informationen zu senden. Verwende bei einer Nutzung ohne Anmeldung eine stabile Sitzungs-ID.

Verwende background=True

Verwende background=True für Anfragen, die möglicherweise lange dauern. Die API startet einen Auftrag und gibt eine ID zurück, statt die Clientverbindung offen zu halten. Deine App kann den Status dieses Auftrags regelmäßig abfragen, bis er abgeschlossen ist, fehlschlägt oder abgebrochen wird. Nutze diese Option für umfangreiche Analysen, lange Werkzeugausführungen oder Aufgaben, die Statusabfragen und Wiederholungsversuche benötigen.

Eine Antwort im Hintergrund ausführen und ihren Status abfragen
# Replace the illustrative IDs and URLs below with your own resource values.
from openai import OpenAI
import time

client = OpenAI()
log_bundle_file_id = "file_123"

job = client.responses.create(
    model="gpt-6-astra",
    background=True,
    store=False,
    input="Analyze this large log bundle and cluster the primary failure modes.",
    tools=[
        {
            "type": "code_interpreter",
            "container": {
                "type": "auto",
                "file_ids": [log_bundle_file_id],
            },
        }
    ],
)

while job.status in {"queued", "in_progress"}:
    time.sleep(2)
    job = client.responses.retrieve(job.id)

print(job.output_text)

Du kannst die Option mit stream=True kombinieren, um Fortschrittsereignisse zu erhalten. Bis zum ersten Ereignis kann es allerdings länger dauern als bei einer normalen Anfrage.

Aus Sicht der Benutzeroberfläche signalisiert der Hintergrundmodus: „Die Aufgabe läuft. Hier siehst du den Status. Das Ergebnis erscheint hier, sobald es fertig ist.“

Verwende den WebSocket-Modus

Der WebSocket-Modus ist für lang andauernde Arbeitsabläufe mit vielen Werkzeugaufrufen ausgelegt. Dabei hältst du eine dauerhafte Verbindung offen und sendest zum Fortsetzen nur neue Eingabeelemente zusammen mit previous_response_id. Bei Durchläufen mit 20 oder mehr Werkzeugaufrufen ist dieser Ansatz über den gesamten Ablauf hinweg etwa 40 % schneller.

So funktioniert es: Die erste Nachricht sieht wie eine normale Responses-Anfrage aus: Modell, Anweisungen, Werkzeuge und Benutzereingabe. Der Server sendet Ereignisse als Stream zurück. Wenn das Modell ein Werkzeug anfordert, führt deine App es aus. Anschließend sendest du keine neue HTTP-Anfrage, sondern ein weiteres response.create-Ereignis über denselben Socket, mit dem bisherigen Wert für previous_response_id und dem neuen Element. Dadurch sinkt die Latenz. Bei reinem HTTP ist jede Folgeanfrage eine neue Anfrage. Im WebSocket-Modus bleibt die Verbindung offen, und der Zustand der letzten Antwort bleibt für diese Verbindung im Arbeitsspeicher verfügbar. Wenn der nächste Dialogschritt auf dieser Antwort aufbaut, muss das Backend weniger Vorbereitungsarbeit leisten.

Wenn dein Arbeitsablauf aus einer Anfrage und einer Antwort besteht, bleib bei HTTP. Wenn dein Arbeitsablauf wie ein über längere Zeit laufender Agent funktioniert, probiere den WebSocket-Modus aus.

Eine einzelne WebSocket-Verbindung verarbeitet jeweils nur eine laufende Antwort. Für parallele Arbeit sind daher mehrere Verbindungen erforderlich. Die Verbindungsdauer ist derzeit auf 60 Minuten begrenzt. Für das Fortsetzen gilt dieselbe Semantik für previous_response_id wie im HTTP-Modus, mit einem verbindungslokalen Cache für die letzte Antwort.

Hinweis: Der WebSocket-Modus ist mit ZDR kompatibel, da deine Daten nur im Arbeitsspeicher und nicht auf einem Datenträger gespeichert werden.

Das Python-Beispiel verwendet pip install "openai[realtime]>=3.8.0". Das JavaScript-Beispiel verwendet npm install openai@^7.10.0 ws. Das Ruby-Beispiel verwendet gem install openai async-websocket.

Eine WebSocket-Sitzung mit der Responses API starten
from openai import OpenAI

client = OpenAI()

with client.responses.connect() as connection:
    # Use the same typed parameters as client.responses.create(...).
    connection.response.create(
        model="gpt-6-astra",
        store=False,
        input=[
            {
                "type": "message",
                "role": "user",
                "content": [
                    {
                        "type": "input_text",
                        "text": (
                            "Find the flaky test in this run, call the tools "
                            "you need, and keep going until you can explain "
                            "the root cause."
                        ),
                    }
                ],
            }
        ],
        tools=[test_log_tool, code_search_tool],
    )
    first_event = connection.recv()
    print(first_event.type)

Fazit

Die Responses API ist die Grundlage für die Entwicklung intelligenterer, leistungsfähigerer OpenAI-Anwendungen. Ihr entscheidender Vorteil: Sie ermöglicht Entwickelnden den Übergang von einzelnen Prompts zu beständigen Arbeitsabläufen, die Werkzeuge nutzen, den Kontext berücksichtigen und sich an die Komplexität der Aufgabe anpassen können. Befolge diesen Leitfaden, um bei tatsächlichen Bereitstellungen eine höhere Leistung zu erzielen.