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

Compactage

Gérez les conversations de longue durée grâce au compactage côté serveur et au compactage autonome.

Vue d’ensemble

Pour gérer les interactions de longue durée, vous pouvez utiliser le compactage afin de réduire la taille du contexte tout en préservant l’état nécessaire aux échanges suivants.

Le compactage vous aide à trouver un équilibre entre qualité, coût et latence à mesure que les conversations s’allongent.

Compactage côté serveur

Vous pouvez activer le compactage côté serveur dans une requête de création Responses (POST /responses ou client.responses.create) en configurant context_management avec compact_threshold.

  • Lorsque le nombre de tokens après rendu dépasse le seuil configuré, le serveur exécute le compactage côté serveur.
  • Ce mode ne nécessite aucun appel distinct à /responses/compact.
  • Le flux de réponse inclut l’élément de compactage chiffré.
  • Remarque sur la ZDR : le compactage côté serveur est compatible avec la ZDR lorsque vous définissez store=false dans vos requêtes de création Responses.

L’élément de compactage renvoyé transmet les informations essentielles de l’état et du raisonnement antérieurs à l’exécution suivante en utilisant moins de tokens. Il est opaque et n’est pas conçu pour être interprété par un humain.

Pour le chaînage sans état par tableau d’entrée, ajoutez les éléments de sortie comme d’habitude. Si vous utilisez previous_response_id, transmettez uniquement le nouveau message utilisateur à chaque échange. Dans les deux cas, l’élément de compactage contient le contexte nécessaire à la fenêtre suivante.

Conseil pour réduire la latence : après avoir ajouté les éléments de sortie aux éléments d’entrée précédents, vous pouvez supprimer les éléments qui précèdent l’élément de compactage le plus récent afin de réduire la taille des requêtes et la latence des requêtes les plus lentes. Le dernier élément de compactage contient le contexte nécessaire pour poursuivre la conversation. Si vous utilisez le chaînage avec previous_response_id, ne supprimez pas d’éléments manuellement.

Parcours utilisateur

  1. Appelez /responses comme d’habitude, mais incluez context_management avec compact_threshold pour activer le compactage côté serveur.
  2. Pendant la diffusion de la réponse, si la taille du contexte dépasse le seuil, le serveur déclenche une opération de compactage, émet un élément de sortie de compactage dans le même flux, puis supprime une partie du contexte avant de poursuivre l’inférence.
  3. Poursuivez votre boucle en suivant une seule méthode : le chaînage sans état par tableau d’entrée (ajoutez la sortie, y compris les éléments de compactage, à votre prochain tableau d’entrée) ou le chaînage avec previous_response_id (transmettez uniquement le nouveau message utilisateur à chaque échange et réutilisez cet identifiant à l’échange suivant).

Exemple de parcours utilisateur

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

Point de terminaison de compactage autonome

Pour contrôler explicitement le compactage, utilisez le point de terminaison de compactage autonome afin d’effectuer un compactage sans état dans les workflows de longue durée.

Ce point de terminaison est entièrement sans état et compatible avec la ZDR.

Vous envoyez une fenêtre de contexte complète (messages, outils et autres éléments), et le point de terminaison renvoie une nouvelle fenêtre de contexte compactée que vous pouvez transmettre à votre prochain appel à /responses.

La fenêtre compactée renvoyée inclut un élément de compactage chiffré qui conserve les informations essentielles de l’état et du raisonnement antérieurs en utilisant moins de tokens. Cet élément est opaque et n’est pas conçu pour être interprété par un humain.

Remarque : la fenêtre compactée contient généralement plus que le seul élément de compactage. Elle peut aussi inclure des éléments conservés de la fenêtre précédente.

Traitement de la sortie : ne supprimez aucun élément de la sortie de /responses/compact. La fenêtre renvoyée constitue la prochaine fenêtre de contexte de référence ; transmettez-la donc telle quelle à votre prochain appel à /responses .

Parcours utilisateur pour le compactage autonome

  1. Utilisez /responses normalement, en envoyant des éléments d’entrée qui incluent les messages utilisateur, les sorties de l’assistant et les interactions avec les outils.
  2. Lorsque votre fenêtre de contexte devient volumineuse, appelez /responses/compact pour générer une nouvelle fenêtre de contexte compactée. La fenêtre que vous envoyez à /responses/compact doit toujours tenir dans la fenêtre de contexte de votre modèle.
  3. Pour les appels suivants à /responses, transmettez en entrée la fenêtre compactée renvoyée (y compris l’élément de compactage) à la place de la transcription complète.

Exemple de parcours utilisateur

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