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

Vorhergesagte Ausgaben

Reduziere die Latenz bei Modellantworten, deren Inhalt größtenteils schon im Voraus bekannt ist.

Mit vorhergesagten Ausgaben kannst du API-Antworten von Chat Completions beschleunigen, wenn viele der Ausgabetokens bereits im Voraus bekannt sind. Das ist besonders häufig der Fall, wenn du eine Text- oder Codedatei mit kleinen Änderungen neu generierst. Deine Vorhersage kannst du über den Anfrageparameter prediction in Chat Completions übergeben.

Vorhergesagte Ausgaben sind bereits mit den neuesten Modellen gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini und gpt-4.1-nano verfügbar. Im Folgenden erfährst du, wie du damit die Latenz in deinen Anwendungen reduzierst.

Beispiel für Code-Refactoring

Vorhergesagte Ausgaben sind besonders nützlich, um Textdokumente und Codedateien mit kleinen Änderungen neu zu generieren. Angenommen, du möchtest mit dem Modell GPT-4o JavaScript-Code überarbeiten und dabei die Eigenschaft username der Klasse User in email umbenennen:

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

export default User;

Abgesehen von Zeile 4 oben bleibt der Großteil der Datei unverändert. Wenn du den aktuellen Inhalt der Codedatei als Vorhersage verwendest, kannst du die gesamte Datei mit geringerer Latenz neu generieren. Bei größeren Dateien summieren sich diese Zeitersparnisse schnell.

Das folgende Beispiel zeigt, wie du den Parameter prediction in unseren SDKs verwendest. Damit gibst du vor, dass die endgültige Modellausgabe unserer ursprünglichen Codedatei sehr ähnlich sein wird. Deren Inhalt verwenden wir als Vorhersagetext.

Eine JavaScript-Klasse mit einer vorhergesagten Ausgabe überarbeiten
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);

Neben dem überarbeiteten Code enthält die Modellantwort Nutzungsdaten wie die folgenden. Hier ist die Antwort ohne das Feld choices dargestellt:

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

Beachte die beiden Felder accepted_prediction_tokens und rejected_prediction_tokens im Objekt usage. In diesem Beispiel wurden 14 Token aus der Vorhersage verwendet, um die Antwort zu beschleunigen, während 2 verworfen wurden.

Beachte, dass auch verworfene Token wie andere von der API generierte Ausgabetokens abgerechnet werden. Vorhergesagte Ausgaben können daher die Kosten deiner Anfragen erhöhen.

Streaming-Beispiel

Vorhergesagte Ausgaben senken die Latenz noch stärker, wenn du API-Antworten per Streaming überträgst. Das folgende Beispiel zeigt dasselbe Code-Refactoring, diesmal mit Streaming in den OpenAI SDKs.

Vorhergesagte Ausgaben mit 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 des vorhergesagten Textes in der Antwort

Wenn du Vorhersagetext übergibst, kann dieser an beliebiger Stelle in der generierten Antwort erscheinen und trotzdem deren Latenz reduzieren. Angenommen, dein vorhergesagter Text ist der unten gezeigte einfache Hono-Server:

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

Du könntest das Modell mit einem Prompt wie diesem auffordern, die Datei neu zu generieren:

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.

Die Antwort auf den Prompt könnte etwa so aussehen:

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

Eine gekürzte Modellantwort ohne das Feld choices würde weiterhin akzeptierte Vorhersagetokens ausweisen, obwohl der Vorhersagetext sowohl vor als auch nach dem neu eingefügten Inhalt in der Antwort erscheint:

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

Diesmal wurden keine Vorhersagetokens verworfen, da der gesamte als Vorhersage übergebene Dateiinhalt in der endgültigen Antwort verwendet wurde. Schön! 🔥

Einschränkungen

Wenn du vorhergesagte Ausgaben verwendest, solltest du die folgenden Faktoren und Einschränkungen berücksichtigen.

  • Vorhergesagte Ausgaben werden nur von den Modellreihen GPT-4o, GPT-4o-mini, GPT-4.1, GPT-4.1-mini und GPT-4.1-nano unterstützt.
  • Wenn du eine Vorhersage übergibst, werden auch die darin enthaltenen Token, die nicht in der endgültigen Ausgabe vorkommen, zum Preis für Ausgabetokens abgerechnet. Die Eigenschaft rejected_prediction_tokens des Objekts usage zeigt dir, wie viele Token nicht in der endgültigen Antwort verwendet wurden.
  • Die folgenden API-Parameter werden bei vorhergesagten Ausgaben nicht unterstützt:
    • n: Werte größer als 1 werden nicht unterstützt
    • logprobs: nicht unterstützt
    • presence_penalty: Werte größer als 0 werden nicht unterstützt
    • frequency_penalty: Werte größer als 0 werden nicht unterstützt
    • audio: Vorhergesagte Ausgaben sind nicht mit Audioeingaben und -ausgaben kompatibel
    • modalities: Es werden nur Modalitäten vom Typ text unterstützt
    • max_completion_tokens: nicht unterstützt
    • tools: Funktionsaufrufe werden bei vorhergesagten Ausgaben derzeit nicht unterstützt