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
Theme

Compactação

Gerencie conversas de longa duração com compactação no servidor ou por meio de um endpoint independente.

Visão geral

Em 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 as próximas rodadas.

À medida que a conversa se prolonga, a compactação ajuda a equilibrar qualidade, custo e latência. Para saber como preservar o raciocínio ao alterar o histórico da conversa, consulte Mantenha o prefixo inalterado.

Compactação no servidor

Para ativar a compactação no servidor em uma solicitação de criação de resposta na API Responses (POST /responses ou client.responses.create), configure context_management com compact_threshold.

  • Quando a contagem de tokens do contexto renderizado 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.
  • A compactação no servidor é compatível com a política de zero retenção de dados (ZDR) quando você define store=false nas solicitações de criação de resposta na API Responses.

O item de compactação retornado preserva as informações essenciais do estado e do raciocínio anteriores para a próxima execução, usando menos tokens. Seu conteúdo é opaco e não foi projetado para interpretação humana.

Se você encadeia solicitações sem manter estado, acrescente os itens de saída ao array de entrada como de costume. Se usa previous_response_id, envie apenas a nova mensagem do usuário a cada rodada. Nos dois casos, o item de compactação preserva o contexto necessário para a próxima janela.

Depois de acrescentar os itens de saída aos itens de entrada anteriores, você pode descartar os itens que precedem o item de compactação mais recente. Isso diminui o tamanho das solicitações e reduz a latência das que mais demoram. O item de compactação mais recente contém o contexto necessário para continuar a conversa. Se você encadeia solicitações com previous_response_id, não remova itens manualmente.

Passo a passo

  1. Chame /responses como de costume e inclua context_management com compact_threshold para ativar a compactação no servidor.
  2. Durante a transmissão da resposta, se o tamanho do contexto ultrapassar o limite, o servidor executa a compactação, envia o item de compactação como saída no mesmo fluxo e remove itens do contexto antes de continuar a inferência.
  3. Para continuar o loop, escolha uma forma de encadear as solicitações. No encadeamento sem estado, acrescente os itens de saída, inclusive os de compactação, ao próximo array de entrada. No encadeamento com previous_response_id, envie apenas a nova mensagem do usuário a cada rodada e passe o ID da resposta para a próxima chamada.

Exemplo de uso

import OpenAI from "openai";
import { toResponseInputItems } from "openai/lib/responses/ResponseInputItems";
import { createInterface } from "node:readline";

const client = new OpenAI();

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

// Subscribe before generation so piped follow-up turns are not lost.
const lines = createInterface({ input: process.stdin, crlfDelay: Infinity });
const turns = lines[Symbol.asyncIterator]();

async function respond() {
  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);
}

try {
  await respond();
  for await (const line of turns) {
    if (!line.trim()) continue;
    conversation.push({ type: "message", role: "user", content: line });
    await respond();
  }
} finally {
  lines.close();
}

Endpoint de compactação independente

Para controlar explicitamente quando compactar o contexto em fluxos de trabalho de longa duração, use o endpoint de compactação independente, que permite executar a compactação sem manter estado.

Esse endpoint não mantém nenhum 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 enviar na próxima chamada a /responses.

A janela compactada retornada inclui um item de compactação criptografado que preserva as informações essenciais do estado e do raciocínio anteriores usando menos tokens. O conteúdo desse item é opaco e não foi projetado para interpretação humana.

Em geral, a janela compactada contém mais do que o item de compactação. Ela também pode incluir itens preservados da janela anterior.

Ao processar a saída de /responses/compact, não remova itens. A janela retornada é a janela de contexto canônica para a próxima chamada a /responses, portanto envie-a exatamente como a recebeu.

Passo a passo da compactação independente

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

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