Voorspelde uitvoer (preview)
Voorspelde uitvoer kan de latentie van het modelantwoord voor chat-voltooiingen verbeteren, waarbij minimale wijzigingen nodig zijn voor een grotere teksttekst. Als u het model vraagt om een antwoord te geven waarin een groot deel van het verwachte antwoord al bekend is, kunnen voorspelde uitvoer de latentie van deze aanvraag aanzienlijk verminderen. Deze mogelijkheid is met name geschikt voor coderingsscenario's, waaronder automatisch aanvullen, foutdetectie en realtime bewerken, waarbij snelheid en reactiesnelheid essentieel zijn voor ontwikkelaars en eindgebruikers. In plaats van dat het model alle tekst helemaal opnieuw genereert, kunt u aan het model aangeven dat het grootste deel van het antwoord al bekend is door de bekende tekst door te geven aan de prediction
parameter.
Modelondersteuning
-
gpt-4o-mini
Versie:2024-07-18
-
gpt-4o
Versie:2024-08-06
-
gpt-4o
Versie:2024-11-20
API-ondersteuning
2025-01-01-preview
Niet-ondersteunde functies
Voorspelde uitvoer is momenteel alleen tekst. Deze functies kunnen niet worden gebruikt in combinatie met de prediction
parameter en voorspelde uitvoer.
- Hulpprogramma's/functie-aanroepen
- audiomodellen/invoer en uitvoer
-
n
waarden hoger dan1
logprobs
-
presence_penalty
waarden groter dan0
-
frequency_penalty
waarden groter dan0
max_completion_tokens
Notitie
De voorspelde uitvoerfunctie is momenteel niet beschikbaar voor modellen in de regio Azië - zuidoost.
Aan de slag
Om de basisbeginselen van voorspelde uitvoer te demonstreren, vragen we eerst een model om de code te herstructureren van het veelvoorkomende programmeerprobleem FizzBuzz
om het exemplaar te MSFTBuzz
FizzBuzz
vervangen door . We geven onze voorbeeldcode op twee plaatsen door aan het model. Eerst als onderdeel van een gebruikersbericht in de messages
matrix/lijst en een tweede keer als onderdeel van de inhoud van de nieuwe prediction
parameter.
Mogelijk moet u uw OpenAI-clientbibliotheek upgraden om toegang te krijgen tot de prediction
parameter.
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))
Uitvoer
{
"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"
}
}
}
]
}
U ziet in de uitvoer de nieuwe antwoordparameters voor accepted_prediction_tokens
en 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
}
De accepted_prediction_tokens
hulp bij het verminderen van de latentie van het modelrespons, maar eventuele rejected_prediction_tokens
dezelfde kostenimplicatie als extra uitvoertokens die door het model worden gegenereerd. Om deze reden kunnen voorspelde uitvoer de reactietijden van het model verbeteren, maar dit kan leiden tot hogere kosten. U moet de verbeterde modelprestaties evalueren en verdelen tegen de potentiële toename van de kosten.
Het is ook belangrijk om te begrijpen dat het gebruik van voorspellende uitvoer geen vermindering van de latentie garandeert. Een grote aanvraag met een groter percentage geweigerde voorspellingstokens dan geaccepteerde voorspellingstokens kan leiden tot een toename van de latentie van het modelantwoord in plaats van een afname.
Notitie
In tegenstelling tot het in de cache opslaan van prompts, wat alleen werkt wanneer een ingesteld minimumaantal initiële tokens aan het begin van een aanvraag identiek is, worden voorspelde uitvoer niet beperkt door de tokenlocatie. Zelfs als uw antwoordtekst nieuwe uitvoer bevat die vóór de voorspelde uitvoer wordt geretourneerd, accepted_prediction_tokens
kan dit nog steeds gebeuren.
Streaming
Voorspelde prestatieverbeteringen voor de prestaties zijn vaak het meest voor de hand liggend als u uw antwoorden retourneert met streaming ingeschakeld.
Mogelijk moet u uw OpenAI-clientbibliotheek upgraden om toegang te krijgen tot de prediction
parameter.
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='',)