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

Sorties prédites

Réduisez la latence des réponses du modèle lorsqu’une grande partie de leur contenu est connue à l’avance.

Les sorties prédites permettent d’accélérer les réponses de l’API Chat Completions lorsque de nombreux tokens de sortie sont connus à l’avance. C’est notamment le cas lorsque vous régénérez un fichier texte ou un fichier de code en y apportant des modifications mineures. Vous pouvez fournir votre prédiction à l’aide du paramètre de requête prediction de Chat Completions.

Les sorties prédites sont disponibles dès aujourd’hui avec les dernières versions des modèles gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini et gpt-4.1-nano. Poursuivez votre lecture pour découvrir comment les utiliser afin de réduire la latence de vos applications.

Exemple de refactorisation de code

Les sorties prédites sont particulièrement utiles pour régénérer des documents texte et des fichiers de code en y apportant de petites modifications. Supposons que vous souhaitiez demander au modèle GPT-4o de refactoriser du code JavaScript et de renommer la propriété username de la classe User en email :

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

export default User;

Le fichier restera en grande partie inchangé, à l’exception de la ligne 4 ci-dessus. En utilisant le texte actuel du fichier de code comme prédiction, vous pouvez régénérer l’intégralité du fichier avec une latence réduite. Ces gains de temps s’accumulent rapidement pour les fichiers plus volumineux.

L’exemple ci-dessous utilise le paramètre prediction dans nos SDK pour indiquer que la sortie finale du modèle devrait être très proche de notre fichier de code d’origine, dont le contenu sert de texte de prédiction.

Refactorisation d’une classe JavaScript avec une sortie prédite
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);

En plus du code refactorisé, la réponse du modèle contient des données d’utilisation comme celles-ci, présentées dans une version abrégée sans le champ 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"
}

Notez les champs accepted_prediction_tokens et rejected_prediction_tokens dans l’objet usage. Dans cet exemple, 14 tokens de la prédiction ont été utilisés pour accélérer la réponse, tandis que 2 ont été rejetés.

Les tokens rejetés restent facturés comme les autres tokens de complétion générés par l’API. Les sorties prédites peuvent donc augmenter le coût de vos requêtes.

Exemple avec streaming

Les gains de latence des sorties prédites sont encore plus importants lorsque vous utilisez le streaming pour les réponses de l’API. Voici le même exemple de refactorisation de code, cette fois avec le streaming dans les SDK OpenAI.

Sorties prédites avec 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 || "");
}

Position du texte prédit dans la réponse

Le texte de prédiction que vous fournissez peut apparaître n’importe où dans la réponse générée et tout de même en réduire la latence. Supposons que votre texte prédit soit le code du serveur Hono simple présenté ci-dessous :

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

Vous pourriez demander au modèle de régénérer le fichier avec un prompt comme celui-ci :

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.

La réponse au prompt pourrait ressembler à ceci :

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

Une version abrégée de la réponse du modèle, sans le champ choices, indiquerait tout de même des tokens de prédiction acceptés, même si le texte de prédiction apparaît à la fois avant et après le nouveau contenu ajouté à la réponse :

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

Cette fois, aucun token de prédiction n’a été rejeté, car tout le contenu du fichier fourni comme prédiction a été utilisé dans la réponse finale. Parfait ! 🔥

Limitations

Lorsque vous utilisez les sorties prédites, tenez compte des facteurs et limitations suivants.

  • Les sorties prédites sont uniquement prises en charge par les séries de modèles GPT-4o, GPT-4o-mini, GPT-4.1, GPT-4.1-mini et GPT-4.1-nano.
  • Lorsque vous fournissez une prédiction, les tokens qui ne figurent pas dans la complétion finale restent facturés au tarif des tokens de complétion. Consultez la propriété rejected_prediction_tokens de l’objet usage pour connaître le nombre de tokens non utilisés dans la réponse finale.
  • Les paramètres de l’API suivants ne sont pas pris en charge avec les sorties prédites :
    • n : les valeurs supérieures à 1 ne sont pas prises en charge
    • logprobs : non pris en charge
    • presence_penalty : les valeurs supérieures à 0 ne sont pas prises en charge
    • frequency_penalty : les valeurs supérieures à 0 ne sont pas prises en charge
    • audio : les sorties prédites ne sont pas compatibles avec les entrées et sorties audio
    • modalities : seules les modalités text sont prises en charge
    • max_completion_tokens : non pris en charge
    • tools : l’appel de fonction n’est actuellement pas pris en charge avec les sorties prédites