Predikované výstupy (Preview)
Predikované výstupy můžou zlepšit latenci odezvy modelu při voláních dokončení chatu, kde jsou potřeba minimální změny většího textu. Pokud žádáte model, aby poskytl odpověď, ve které je už známá velká část očekávané odpovědi, predikované výstupy můžou výrazně snížit latenci tohoto požadavku. Tato funkce je obzvláště vhodná pro scénáře psaní kódu, včetně automatického dokončování, detekce chyb a úprav v reálném čase, kde rychlost a rychlost odezvy jsou pro vývojáře a koncové uživatele zásadní. Namísto opětovného vygenerování veškerého textu od nuly můžete označit modelem, že většina odpovědí je již známa předáním známého textu parametru prediction
.
Podpora modelů
-
gpt-4o-mini
verze:2024-07-18
-
gpt-4o
verze:2024-08-06
-
gpt-4o
verze:2024-11-20
Podpora rozhraní API
2025-01-01-preview
Nepodporované funkce
Predikované výstupy jsou aktuálně jen pro text. Tyto funkce nelze použít ve spojení s parametrem prediction
a predikovanými výstupy.
- Nástroje nebo volání funkcí
- zvukové modely/vstupy a výstupy
-
n
hodnoty vyšší než1
logprobs
-
presence_penalty
hodnoty větší než0
-
frequency_penalty
hodnoty větší než0
max_completion_tokens
Poznámka:
Funkce predikovaných výstupů je momentálně pro modely v oblasti Jihovýchodní Asie nedostupná.
Začínáme
Abychom si ukázali základy předpovídaného výstupu, začneme tím, že požádáme model, aby refaktoroval kód z běžného programovacího FizzBuzz
FizzBuzz
MSFTBuzz
problému, aby nahradil instanci . Vzorový kód předáme modelu na dvou místech. První jako součást zprávy uživatele v messages
poli/seznamu a druhý čas jako součást obsahu nového prediction
parametru.
Možná budete muset upgradovat klientskou knihovnu OpenAI pro přístup k parametru 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))
Výstup
{
"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"
}
}
}
]
}
Všimněte si ve výstupu nových parametrů odpovědi pro accepted_prediction_tokens
a 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
}
Pomáhá accepted_prediction_tokens
snížit latenci odezvy modelu, ale všechny rejected_prediction_tokens
mají stejné náklady jako další výstupní tokeny vygenerované modelem. Z tohoto důvodu mohou predikované výstupy zlepšit dobu odezvy modelu, což může vést k vyšším nákladům. Budete muset vyhodnotit a vyvážit vyšší výkon modelu oproti potenciálnímu nárůstu nákladů.
Je také důležité pochopit, že použití prediktivních výstupů nezaručuje snížení latence. Velký požadavek s větším procentem odmítnutých prediktivních tokenů než akceptovaných prediktivních tokenů může vést k nárůstu latence odezvy modelu, nikoli snížení.
Poznámka:
Na rozdíl od ukládání do mezipaměti , která funguje jenom v případě, že je stejný minimální počet počátečních tokenů na začátku požadavku, nejsou predikované výstupy omezeny umístěním tokenu. I když text odpovědi obsahuje nový výstup, který se vrátí před predikovaným výstupem, accepted_prediction_tokens
může dojít i nadále.
Streamování
Predikované výstupy zvýšení výkonu je často zřejmé, pokud vracíte odpovědi s povoleným streamováním.
Možná budete muset upgradovat klientskou knihovnu OpenAI pro přístup k parametru 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='',)