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
Theme

Salidas predichas

Reduce la latencia cuando ya conoces gran parte de la respuesta del modelo.

Las salidas predichas te permiten obtener respuestas más rápidas de la API de Chat Completions cuando ya conoces muchos de los tokens de salida. El caso más común es cuando vuelves a generar un archivo de texto o de código con cambios menores. Puedes proporcionar tu predicción con el parámetro de solicitud prediction de Chat Completions.

Las salidas predichas están disponibles en las versiones más recientes de los modelos gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini y gpt-4.1-nano. Sigue leyendo para aprender a usarlas y reducir la latencia en tus aplicaciones.

Ejemplo de refactorización de código

Las salidas predichas son especialmente útiles para volver a generar documentos de texto y archivos de código con cambios menores. Supongamos que quieres que el modelo GPT-4o refactorice un fragmento de código JavaScript y cambie el nombre de la propiedad username de la clase User a email:

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

export default User;

La línea 4 es la única que cambiará en el archivo anterior. Si usas el contenido actual del archivo de código como predicción, puedes volver a generar todo el archivo con menor latencia. En archivos más grandes, el ahorro de tiempo se acumula rápidamente.

El siguiente ejemplo muestra cómo usar el parámetro prediction en nuestros SDK para predecir que la salida final del modelo será muy similar al archivo de código original. Usamos el contenido de ese archivo como texto de la predicción.

Refactoriza una clase de JavaScript con una salida predicha
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);

Además del código refactorizado, la respuesta del modelo incluye datos de uso como los que se muestran en esta versión abreviada, que omite el 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"
}

Observa los campos accepted_prediction_tokens y rejected_prediction_tokens del objeto usage. En este ejemplo, se usaron 14 tokens de la predicción para acelerar la respuesta y se rechazaron 2.

Los tokens rechazados se cobran a la misma tarifa que los demás tokens de salida que genera la API, por lo que usar salidas predichas puede aumentar el costo de tus solicitudes.

Ejemplo con streaming

Las salidas predichas reducen aún más la latencia cuando recibes las respuestas de la API mediante streaming. Este ejemplo muestra la misma refactorización de código, esta vez con streaming en los SDK de OpenAI.

Salidas predichas con 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 || "");
}

Posición del texto predicho en la respuesta

El texto que proporcionas como predicción puede aparecer en cualquier parte de la respuesta generada y aun así reducir la latencia. Supongamos que el texto predicho es el código de este servidor sencillo de Hono:

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

Puedes pedirle al modelo que vuelva a generar el archivo con un prompt como este:

Agrega a esta aplicación una ruta GET que responda con el texto
“hello world”. Vuelve a generar el archivo completo de la aplicación
con la nueva ruta y sin agregar formato Markdown.

La respuesta al prompt podría ser similar a esta:

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

La respuesta abreviada del modelo, sin el campo choices, seguiría mostrando tokens aceptados de la predicción, aunque el texto predicho aparezca tanto antes como después del contenido nuevo en la respuesta:

{
  "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"
}

Esta vez no se rechazó ningún token de la predicción porque la respuesta final incluyó todo el contenido del archivo que usamos como predicción. ¡Genial! 🔥

Limitaciones

Al usar salidas predichas, ten en cuenta los siguientes factores y limitaciones.

  • Solo las series de modelos GPT-4o, GPT-4o-mini, GPT-4.1, GPT-4.1-mini y GPT-4.1-nano admiten salidas predichas.
  • Si proporcionas una predicción, los tokens de esa predicción que no aparezcan en la respuesta final también se cobran a la tarifa de los tokens de salida. Consulta la propiedad rejected_prediction_tokens del objeto usage para saber cuántos tokens no se usaron en la respuesta final.
  • Al usar salidas predichas, se aplican las siguientes restricciones a los parámetros de la API:
    • n: no se admiten valores mayores que 1
    • logprobs: no se admite
    • presence_penalty: no se admiten valores mayores que 0
    • frequency_penalty: no se admiten valores mayores que 0
    • audio: las salidas predichas no son compatibles con las entradas y salidas de audio
    • modalities: solo se admite la modalidad text
    • max_completion_tokens: no se admite
    • tools: actualmente, las salidas predichas no admiten la llamada a funciones