For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegação principal

Compactação

Gerencie conversas de longa duração com compactação no servidor e compactação independente.

Visão geral

Para viabilizar interações de longa duração, você pode usar a compactação para reduzir o tamanho do contexto e preservar o estado necessário para os turnos seguintes.

A compactação ajuda a equilibrar qualidade, custo e latência à medida que as conversas crescem.

Compactação no servidor

Você pode habilitar a compactação no servidor em uma solicitação de criação da API Responses (POST /responses ou client.responses.create) configurando context_management com compact_threshold.

  • Quando a contagem de tokens renderizados ultrapassa o limite configurado, o servidor executa a compactação.
  • Nesse modo, não é necessário fazer uma chamada separada a /responses/compact.
  • O fluxo de resposta inclui o item de compactação criptografado.
  • Observação sobre ZDR: a compactação no servidor é compatível com ZDR quando você define store=false nas solicitações de criação da API Responses.

O item de compactação retornado leva os principais elementos do estado e do raciocínio anteriores para a próxima execução usando menos tokens. Ele é opaco e não foi projetado para ser interpretado por pessoas.

Para encadear arrays de entrada sem estado, acrescente os itens de saída como de costume. Se estiver usando previous_response_id, passe apenas a nova mensagem do usuário a cada turno. Em ambos os casos, o item de compactação carrega o contexto necessário para a próxima janela.

Dica de latência: depois de acrescentar os itens de saída aos itens de entrada anteriores, você pode descartar os itens que vieram antes do item de compactação mais recente para manter as solicitações menores e reduzir a latência das solicitações mais lentas. O item de compactação mais recente carrega o contexto necessário para continuar a conversa. Se você usa encadeamento com previous_response_id, não remova itens manualmente.

Jornada do usuário

  1. Chame /responses como de costume, mas inclua context_management com compact_threshold para habilitar a compactação no servidor.
  2. Durante a transmissão da resposta, se o tamanho do contexto ultrapassar o limite, o servidor aciona uma etapa de compactação, emite um item de saída de compactação no mesmo fluxo e remove parte do contexto antes de continuar a inferência.
  3. Continue seu loop usando um dos padrões: encadeamento de arrays de entrada sem estado (acrescente a saída, incluindo os itens de compactação, ao próximo array de entrada) ou encadeamento com previous_response_id (passe apenas a nova mensagem do usuário a cada turno e leve esse ID para o turno seguinte).

Exemplo de fluxo do usuário

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

Endpoint independente de compactação

Para ter controle explícito, use o endpoint independente de compactação para compactação sem estado em fluxos de trabalho de longa duração.

Esse endpoint é totalmente sem estado e compatível com ZDR.

Você envia uma janela de contexto completa (mensagens, ferramentas e outros itens), e o endpoint retorna uma nova janela de contexto compactada que você pode passar para a próxima chamada a /responses.

A janela compactada retornada inclui um item de compactação criptografado que preserva os principais elementos do estado e do raciocínio anteriores usando menos tokens. Esse item é opaco e não foi projetado para ser interpretado por pessoas.

Observação: a janela compactada geralmente contém mais do que apenas o item de compactação. Ela também pode incluir itens preservados da janela anterior.

Tratamento da saída: não remova itens da saída de /responses/compact. A janela retornada é a próxima janela de contexto canônica, portanto, passe-a para a próxima chamada a /responses sem alterações.

Jornada do usuário para compactação independente

  1. Use /responses normalmente, enviando itens de entrada que incluam mensagens do usuário, saídas do assistente e interações com ferramentas.
  2. Quando sua janela de contexto ficar grande, chame /responses/compact para gerar uma nova janela de contexto compactada. A janela que você envia para /responses/compact ainda deve caber na janela de contexto do modelo.
  3. Nas chamadas seguintes a /responses, passe a janela compactada retornada (incluindo o item de compactação) como entrada, em vez da transcrição completa.

Exemplo de fluxo do usuário

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