Förutsagda utdata (förhandsversion)
Förutsagda utdata kan förbättra svarsfördröjningen för modellen för chattavslutningar där minimala ändringar krävs för en större texttext. Om du ber modellen att ge ett svar där en stor del av det förväntade svaret redan är känt kan förutsagda utdata avsevärt minska svarstiden för den här begäran. Den här funktionen passar särskilt bra för kodningsscenarier, inklusive automatisk komplettering, felidentifiering och realtidsredigering, där hastighet och svarstider är viktiga för utvecklare och slutanvändare. I stället för att modellen återskapar all text från grunden kan du ange för modellen att det mesta av svaret redan är känt genom att skicka den kända texten till parametern prediction
.
Modellstöd
-
gpt-4o-mini
version:2024-07-18
-
gpt-4o
version:2024-08-06
-
gpt-4o
version:2024-11-20
API-stöd
2025-01-01-preview
Funktioner som inte stöds
Förutsagda utdata är för närvarande endast text. Dessa funktioner kan inte användas tillsammans med parametern prediction
och förutsagda utdata.
- Verktyg/funktionsanrop
- ljudmodeller/indata och utdata
-
n
värden som är högre än1
logprobs
-
presence_penalty
värden som är större än0
-
frequency_penalty
värden som är större än0
max_completion_tokens
Kommentar
Funktionen för förutsagda utdata är för närvarande inte tillgänglig för modeller i regionen Sydostasien.
Komma igång
För att demonstrera grunderna i förutsagda utdata börjar vi med att be en modell att omstrukturera koden från det vanliga programmeringsproblemet FizzBuzz
för att ersätta instansen av FizzBuzz
med MSFTBuzz
. Vi skickar vår exempelkod till modellen på två platser. Först som en del av ett användarmeddelande i matrisen messages
/listan och en andra gång som en del av innehållet i den nya prediction
parametern.
Du kan behöva uppgradera OpenAI-klientbiblioteket för att få åtkomst till parametern prediction
.
pip install openai --upgrade
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2025-01-01-preview"
)
code = """
for number in range(1, 101):
if number % 3 == 0 and number % 5 == 0:
print("FizzBuzz")
elif number % 3 == 0:
print("Fizz")
elif number % 5 == 0:
print("Buzz")
else:
print(number)
"""
instructions = """
Replace string `FizzBuzz` with `MSFTBuzz`. Respond only
with code, and with no markdown formatting.
"""
completion = client.chat.completions.create(
model="gpt-4o-mini", # replace with your unique model deployment name
messages=[
{
"role": "user",
"content": instructions
},
{
"role": "user",
"content": code
}
],
prediction={
"type": "content",
"content": code
}
)
print(completion.model_dump_json(indent=2))
Output
{
"id": "chatcmpl-AskZk3P5QGmefqobDw4Ougo6jLxSP",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "for number in range(1, 101):\n if number % 3 == 0 and number % 5 == 0:\n print(\"MSFTBuzz\")\n elif number % 3 == 0:\n print(\"Fizz\")\n elif number % 5 == 0:\n print(\"Buzz\")\n else:\n print(number)",
"refusal": null,
"role": "assistant",
"audio": null,
"function_call": null,
"tool_calls": null
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"protected_material_code": {
"filtered": false,
"detected": false
},
"protected_material_text": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"created": 1737612112,
"model": "gpt-4o-mini-2024-07-18",
"object": "chat.completion",
"service_tier": null,
"system_fingerprint": "fp_5154047bf2",
"usage": {
"completion_tokens": 77,
"prompt_tokens": 124,
"total_tokens": 201,
"completion_tokens_details": {
"accepted_prediction_tokens": 6,
"audio_tokens": 0,
"reasoning_tokens": 0,
"rejected_prediction_tokens": 4
},
"prompt_tokens_details": {
"audio_tokens": 0,
"cached_tokens": 0
}
},
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"jailbreak": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
]
}
Observera i utdata de nya svarsparametrarna för accepted_prediction_tokens
och rejected_prediction_tokens
:
"usage": {
"completion_tokens": 77,
"prompt_tokens": 124,
"total_tokens": 201,
"completion_tokens_details": {
"accepted_prediction_tokens": 6,
"audio_tokens": 0,
"reasoning_tokens": 0,
"rejected_prediction_tokens": 4
}
Hjälp till accepted_prediction_tokens
att minska svarsfördröjningen för modellen, men alla rejected_prediction_tokens
har samma kostnadskonsekvenser som ytterligare utdatatoken som genereras av modellen. Därför kan förutsagda utdata förbättra modellens svarstider, men det kan leda till större kostnader. Du måste utvärdera och balansera den ökade modellprestandan mot potentiella kostnadsökningar.
Det är också viktigt att förstå att användning av förutsägande utdata inte garanterar en minskning av svarstiden. En stor begäran med en större procentandel avvisade förutsägelsetoken än accepterade förutsägelsetoken kan leda till en ökning av svarstiderna för modellen i stället för en minskning.
Kommentar
Till skillnad från promptcachelagring som bara fungerar när ett visst minsta antal initiala token i början av en begäran är identiska, begränsas inte förutsagda utdata av tokenplats. Även om svarstexten innehåller nya utdata som returneras före de förutsagda utdata kan accepted_prediction_tokens
det fortfarande inträffa.
Strömning
Prestandaökningar för förutsagda utdata är ofta tydligast om du returnerar dina svar med strömning aktiverat.
Du kan behöva uppgradera OpenAI-klientbiblioteket för att få åtkomst till parametern prediction
.
pip install openai --upgrade
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2025-01-01-preview"
)
code = """
for number in range(1, 101):
if number % 3 == 0 and number % 5 == 0:
print("FizzBuzz")
elif number % 3 == 0:
print("Fizz")
elif number % 5 == 0:
print("Buzz")
else:
print(number)
"""
instructions = """
Replace string `FizzBuzz` with `MSFTBuzz`. Respond only
with code, and with no markdown formatting.
"""
completion = client.chat.completions.create(
model="gpt-4o-mini", # replace with your unique model deployment name
messages=[
{
"role": "user",
"content": instructions
},
{
"role": "user",
"content": code
}
],
prediction={
"type": "content",
"content": code
},
stream=True
)
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end='',)