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

Compactación

Gestiona conversaciones de larga duración con compactación del lado del servidor e independiente.

Descripción general

Para mantener interacciones de larga duración, puedes usar la compactación para reducir el tamaño del contexto sin perder el estado necesario para los turnos posteriores.

La compactación te ayuda a equilibrar la calidad, el costo y la latencia a medida que las conversaciones crecen.

Compactación del lado del servidor

Puedes habilitar la compactación del lado del servidor en una solicitud de creación de Responses (POST /responses o client.responses.create) al configurar context_management con compact_threshold.

  • Cuando la cantidad de tokens renderizados supera el umbral configurado, el servidor ejecuta la compactación del lado del servidor.
  • En este modo no se requiere una llamada independiente a /responses/compact.
  • El flujo de respuesta incluye el elemento de compactación cifrado.
  • Nota sobre ZDR: la compactación del lado del servidor es compatible con ZDR cuando configuras store=false en tus solicitudes de creación de Responses.

El elemento de compactación devuelto conserva los aspectos clave del estado y el razonamiento previos para la siguiente ejecución usando menos tokens. Es opaco y no está diseñado para que lo interpreten personas.

Para el encadenamiento sin estado mediante arreglos de entrada, agrega los elementos de salida como de costumbre. Si usas previous_response_id, pasa solo el nuevo mensaje del usuario en cada turno. En ambos casos, el elemento de compactación contiene el contexto necesario para la siguiente ventana.

Consejo sobre latencia: después de agregar los elementos de salida a los elementos de entrada anteriores, puedes eliminar los elementos que preceden al elemento de compactación más reciente para reducir el tamaño de las solicitudes y la latencia de las respuestas más lentas. El elemento de compactación más reciente contiene el contexto necesario para continuar la conversación. Si usas el encadenamiento mediante previous_response_id, no elimines elementos manualmente.

Flujo de uso

  1. Llama a /responses como de costumbre, pero incluye context_management con compact_threshold para habilitar la compactación del lado del servidor.
  2. Durante la transmisión de la respuesta, si el tamaño del contexto supera el umbral, el servidor inicia una pasada de compactación, emite un elemento de salida de compactación en el mismo flujo y recorta el contexto antes de continuar la inferencia.
  3. Continúa el bucle con uno de estos patrones: encadenamiento sin estado mediante arreglos de entrada (agrega la salida, incluidos los elementos de compactación, al siguiente arreglo de entrada) o encadenamiento mediante previous_response_id (pasa solo el nuevo mensaje del usuario en cada turno y usa ese ID en el siguiente).

Ejemplo de flujo de uso

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);

Punto de acceso de compactación independiente

Para tener un control explícito, usa el punto de acceso de compactación independiente para realizar la compactación sin estado en flujos de trabajo de larga duración.

Este punto de acceso funciona completamente sin estado y es compatible con ZDR.

Envías una ventana de contexto completa (mensajes, herramientas y otros elementos), y el punto de acceso devuelve una nueva ventana de contexto compactada que puedes pasar a tu siguiente llamada a /responses.

La ventana compactada devuelta incluye un elemento de compactación cifrado que conserva los aspectos clave del estado y el razonamiento previos usando menos tokens. Es opaco y no está diseñado para que lo interpreten personas.

Nota: la ventana compactada generalmente contiene más que el elemento de compactación. También puede incluir elementos conservados de la ventana anterior.

Manejo de la salida: no elimines elementos de la salida de /responses/compact. La ventana devuelta es la siguiente ventana de contexto canónica, así que pásala a tu siguiente llamada a /responses sin modificarla.

Flujo de uso de la compactación independiente

  1. Usa /responses como de costumbre, enviando elementos de entrada que incluyan mensajes del usuario, salidas del asistente e interacciones con herramientas.
  2. Cuando tu ventana de contexto alcance un tamaño considerable, llama a /responses/compact para generar una nueva ventana de contexto compactada. La ventana que envíes a /responses/compact debe seguir cabiendo en la ventana de contexto de tu modelo.
  3. En las llamadas posteriores a /responses, pasa la ventana compactada devuelta (incluido el elemento de compactación) como entrada en lugar de la transcripción completa.

Ejemplo de flujo de uso

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);