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

Saídas previstas

Reduza a latência das respostas do modelo quando grande parte da resposta já é conhecida.

As Saídas previstas permitem acelerar as respostas da API de Chat Completions quando muitos dos tokens de saída já são conhecidos. Isso é mais comum ao gerar novamente um arquivo de texto ou código com pequenas modificações. Você pode fornecer sua previsão usando o parâmetro de requisição prediction em Chat Completions.

As Saídas previstas já estão disponíveis nas versões mais recentes dos modelos gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini e gpt-4.1-nano. Continue lendo para saber como usar as Saídas previstas para reduzir a latência nas suas aplicações.

Exemplo de refatoração de código

As Saídas previstas são especialmente úteis para gerar novamente documentos de texto e arquivos de código com pequenas modificações. Digamos que você queira que o modelo GPT-4o refatore um trecho de código JavaScript e altere a propriedade username da classe User para email:

class User {
  firstName = "";
  lastName = "";
  username = "";
}

export default User;

A maior parte do arquivo permanecerá inalterada, exceto pela linha 4 acima. Se você usar o texto atual do arquivo de código como previsão, poderá gerar novamente o arquivo inteiro com menor latência. Em arquivos maiores, essa economia de tempo se acumula rapidamente.

Veja abaixo um exemplo de uso do parâmetro prediction nos nossos SDKs para prever que a saída final do modelo será muito semelhante ao nosso arquivo de código original, que usamos como texto da previsão.

Refatore uma classe JavaScript com uma saída prevista
import OpenAI from "openai";

const code = `
class User {
  firstName = "";
  lastName = "";
  username = "";
}

export default User;
`.trim();

const openai = new OpenAI();

const refactorPrompt = `
Replace the "username" property with an "email" property. Respond only
with code, and with no markdown formatting.
`;

const completion = await openai.chat.completions.create({
  model: "gpt-4.1",
  messages: [
    {
      role: "user",
      content: refactorPrompt,
    },
    {
      role: "user",
      content: code,
    },
  ],
  store: true,
  prediction: {
    type: "content",
    content: code,
  },
});

// Inspect returned data
console.log(completion);
console.log(completion.choices[0].message.content);

Além do código refatorado, a resposta do modelo contém dados de uso como os mostrados nesta versão abreviada, sem o campo choices:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1786652188,
  "model": "gpt-4.1-2025-04-14",
  "usage": {
    "prompt_tokens": 59,
    "completion_tokens": 24,
    "total_tokens": 83,
    "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 14,
      "rejected_prediction_tokens": 2
    }
  },
  "system_fingerprint": "fp_6ddb4f7408"
}

Observe os campos accepted_prediction_tokens e rejected_prediction_tokens no objeto usage. Neste exemplo, 14 tokens da previsão foram usados para acelerar a resposta, enquanto 2 foram rejeitados.

Observe que os tokens rejeitados continuam sendo cobrados como os demais tokens de conclusão gerados pela API. Por isso, as Saídas previstas podem aumentar o custo das suas requisições.

Exemplo de streaming

A redução de latência com as Saídas previstas é ainda maior quando você usa streaming nas respostas da API. Veja um exemplo do mesmo caso de uso de refatoração de código, agora usando streaming nos SDKs da OpenAI.

Saídas previstas com streaming
import OpenAI from "openai";

const code = `
class User {
  firstName = "";
  lastName = "";
  username = "";
}

export default User;
`.trim();

const openai = new OpenAI();

const refactorPrompt = `
Replace the "username" property with an "email" property. Respond only
with code, and with no markdown formatting.
`;

const completion = await openai.chat.completions.create({
  model: "gpt-4.1",
  messages: [
    {
      role: "user",
      content: refactorPrompt,
    },
    {
      role: "user",
      content: code,
    },
  ],
  store: true,
  prediction: {
    type: "content",
    content: code,
  },
  stream: true,
});

// Inspect returned data
for await (const chunk of completion) {
  process.stdout.write(chunk.choices[0]?.delta?.content || "");
}

Posição do texto previsto na resposta

O texto que você fornece como previsão pode aparecer em qualquer parte da resposta gerada e ainda assim reduzir a latência da resposta. Digamos que o texto previsto seja o servidor Hono simples mostrado abaixo:

import { serve } from "@hono/node-server";
import { serveStatic } from "@hono/node-server/serve-static";
import { Hono } from "hono";

const app = new Hono();

app.get("/api", (c) => {
  return c.text("Hello Hono!");
});

// You will need to build the client code first: `pnpm run ui:build`.
app.use(
  "/*",
  serveStatic({
    rewriteRequestPath: (path) => `./dist${path}`,
  })
);

const port = 3000;
console.log(`Server is running on port ${port}`);

serve({
  fetch: app.fetch,
  port,
});

Você poderia pedir ao modelo para gerar novamente o arquivo com um prompt como este:

Add a get route to this application that responds with
the text "hello world". Generate the entire application
file again with this route added, and with no other
markdown formatting.

A resposta ao prompt poderia ser algo assim:

import { serve } from "@hono/node-server";
import { serveStatic } from "@hono/node-server/serve-static";
import { Hono } from "hono";

const app = new Hono();

app.get("/api", (c) => {
  return c.text("Hello Hono!");
});

app.get("/hello", (c) => {
  return c.text("hello world");
});

// You will need to build the client code first: `pnpm run ui:build`.
app.use(
  "/*",
  serveStatic({
    rewriteRequestPath: (path) => `./dist${path}`,
  })
);

const port = 3000;
console.log(`Server is running on port ${port}`);

serve({
  fetch: app.fetch,
  port,
});

Uma versão abreviada da resposta do modelo, sem o campo choices, ainda mostraria tokens de previsão aceitos, mesmo com o texto da previsão aparecendo tanto antes quanto depois do novo conteúdo adicionado à resposta:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1731014771,
  "model": "gpt-4o-2024-08-06",
  "usage": {
    "prompt_tokens": 203,
    "completion_tokens": 159,
    "total_tokens": 362,
    "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 60,
      "rejected_prediction_tokens": 0
    }
  },
  "system_fingerprint": "fp_9ee9e968ea"
}

Desta vez, nenhum token de previsão foi rejeitado, pois todo o conteúdo do arquivo fornecido como previsão foi usado na resposta final. Boa! 🔥

Limitações

Ao usar as Saídas previstas, considere os seguintes fatores e limitações.

  • As Saídas previstas são compatíveis apenas com as séries de modelos GPT-4o, GPT-4o-mini, GPT-4.1, GPT-4.1-mini e GPT-4.1-nano.
  • Ao fornecer uma previsão, os tokens fornecidos que não fizerem parte da conclusão final ainda serão cobrados pelas tarifas de tokens de conclusão. Consulte a propriedade rejected_prediction_tokens do objeto usage para saber quantos tokens não foram usados na resposta final.
  • Os seguintes parâmetros da API não são compatíveis com as Saídas previstas:
    • n: valores maiores que 1 não são aceitos
    • logprobs: não há suporte
    • presence_penalty: valores maiores que 0 não são aceitos
    • frequency_penalty: valores maiores que 0 não são aceitos
    • audio: as Saídas previstas não são compatíveis com entradas e saídas de áudio
    • modalities: somente modalidades text são aceitas
    • max_completion_tokens: não há suporte
    • tools: atualmente, a chamada de função não é compatível com as Saídas previstas