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

Compaction (Kontextverdichtung)

Verwalte lang laufende Unterhaltungen mit serverseitiger und eigenständiger Compaction (Kontextverdichtung).

Übersicht

Für lang laufende Interaktionen kannst du mit Compaction (Kontextverdichtung) den Kontext verkleinern und dabei den Zustand erhalten, der für nachfolgende Gesprächsrunden benötigt wird.

Compaction (Kontextverdichtung) hilft dir, Qualität, Kosten und Latenz bei länger werdenden Unterhaltungen in Einklang zu bringen.

Serverseitige Compaction (Kontextverdichtung)

Du kannst die serverseitige Compaction (Kontextverdichtung) in einer Anfrage zum Erstellen einer Response (POST /responses oder client.responses.create) aktivieren, indem du context_management mit compact_threshold konfigurierst.

  • Wenn die Anzahl der gerenderten Token den konfigurierten Schwellenwert überschreitet, führt der Server eine serverseitige Compaction (Kontextverdichtung) aus.
  • In diesem Modus ist kein separater Aufruf von /responses/compact erforderlich.
  • Der Antwortstream enthält das verschlüsselte Element zur Compaction (Kontextverdichtung).
  • Hinweis zu ZDR: Die serverseitige Compaction (Kontextverdichtung) eignet sich für ZDR, wenn du store=false in deinen Anfragen zum Erstellen einer Response setzt.

Das zurückgegebene Element zur Compaction (Kontextverdichtung) überträgt wesentliche Informationen zum bisherigen Zustand und zu bisherigen Überlegungen mit weniger Token in den nächsten Durchlauf. Sein Inhalt ist nicht einsehbar und nicht dafür gedacht, von Menschen interpretiert zu werden.

Bei der zustandslosen Verkettung über Eingabe-Arrays hängst du wie gewohnt Ausgabeelemente an. Wenn du previous_response_id verwendest, übergib in jeder Gesprächsrunde nur die neue Nutzernachricht. In beiden Fällen enthält das Element zur Compaction (Kontextverdichtung) den Kontext, der für das nächste Fenster benötigt wird.

Tipp zur Latenz: Nachdem du die Ausgabeelemente an die bisherigen Eingabeelemente angehängt hast, kannst du Elemente entfernen, die vor dem neuesten Element zur Compaction (Kontextverdichtung) stehen. So bleiben Anfragen kleiner und besonders lange Antwortzeiten werden reduziert. Das neueste Element zur Compaction (Kontextverdichtung) enthält den Kontext, der zum Fortsetzen der Unterhaltung benötigt wird. Wenn du Anfragen über previous_response_id verkettest, entferne keine Elemente manuell.

Ablauf

  1. Rufe /responses wie gewohnt auf, gib aber context_management mit compact_threshold an, um die serverseitige Compaction (Kontextverdichtung) zu aktivieren.
  2. Wenn die Kontextgröße während des Antwortstreamings den Schwellenwert überschreitet, löst der Server einen Durchlauf zur Compaction (Kontextverdichtung) aus, gibt das entsprechende Ausgabeelement im selben Stream aus und kürzt den Kontext, bevor er die Inferenz fortsetzt.
  3. Setze deine Schleife mit einer der beiden Varianten fort: zustandslose Verkettung über Eingabe-Arrays (hänge die Ausgabe einschließlich der Elemente zur Compaction (Kontextverdichtung) an dein nächstes Eingabe-Array an) oder Verkettung über previous_response_id (übergib in jeder Gesprächsrunde nur die neue Nutzernachricht und verwende die jeweilige ID im nächsten Aufruf weiter).

Beispielablauf

import OpenAI from "openai";
import { toResponseInputItems } from "openai/lib/responses/ResponseInputItems";

const client = new OpenAI();

const conversation = [
  {
    type: "message",
    role: "user",
    content: "Let's begin a long coding task.",
  },
];

const response = await client.responses.create({
  model: "gpt-5.3-codex",
  input: conversation,
  store: false,
  context_management: [{ type: "compaction", compact_threshold: 200_000 }],
});

conversation.push(...toResponseInputItems(response.output));
console.log(response.output_text);

Separater Endpunkt zur Compaction (Kontextverdichtung)

Wenn du die Compaction (Kontextverdichtung) gezielt steuern möchtest, nutze den separaten Endpunkt zur Compaction (Kontextverdichtung) für die zustandslose Kontextverdichtung in lang laufenden Arbeitsabläufen.

Dieser Endpunkt ist vollständig zustandslos und eignet sich für ZDR.

Du sendest ein vollständiges Kontextfenster (Nachrichten, Tools und andere Elemente). Der Endpunkt gibt ein neues, verdichtetes Kontextfenster zurück, das du bei deinem nächsten Aufruf von /responses übergeben kannst.

Das zurückgegebene verdichtete Fenster enthält ein verschlüsseltes Element zur Compaction (Kontextverdichtung), das wesentliche Informationen zum bisherigen Zustand und zu bisherigen Überlegungen mit weniger Token weitergibt. Sein Inhalt ist nicht einsehbar und nicht dafür gedacht, von Menschen interpretiert zu werden.

Hinweis: Das verdichtete Fenster enthält in der Regel mehr als nur das Element zur Compaction (Kontextverdichtung). Es kann auch beibehaltene Elemente aus dem vorherigen Fenster enthalten.

Umgang mit der Ausgabe: Kürze die Ausgabe von /responses/compact nicht. Das zurückgegebene Fenster ist das maßgebliche nächste Kontextfenster. Übergib es daher unverändert bei deinem nächsten Aufruf von /responses als Eingabe.

Ablauf für die eigenständige Compaction (Kontextverdichtung)

  1. Verwende /responses wie gewohnt und sende Eingabeelemente, die Nutzernachrichten, Ausgaben des Assistenten und Tool-Interaktionen enthalten.
  2. Wenn dein Kontextfenster groß wird, rufe /responses/compact auf, um ein neues, verdichtetes Kontextfenster zu erzeugen. Das Fenster, das du an /responses/compact sendest, muss weiterhin in das Kontextfenster deines Modells passen.
  3. Übergib bei nachfolgenden Aufrufen von /responses das zurückgegebene verdichtete Fenster (einschließlich des Elements zur Compaction (Kontextverdichtung)) als Eingabe anstelle des vollständigen Gesprächsverlaufs.

Beispielablauf

import OpenAI from "openai";

const client = new OpenAI();

const conversation = [{ role: "user", content: "Plan a trip to Kyoto." }];

const compacted = await client.responses.compact({
  model: "gpt-6-astra",
  input: conversation,
});

const nextInput = [
  ...compacted.output.map((item) => item),
  { role: "user", content: "Add two more days to the itinerary." },
];

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: nextInput,
  store: false,
});

console.log(response.output_text);