Tahmin edilen çıkışlar (önizleme)
Tahmin edilen çıkışlar, daha büyük bir metin gövdesinde çok az değişiklik yapılması gereken sohbet tamamlama çağrıları için model yanıt gecikme süresini iyileştirebilir. Modelden beklenen yanıtın büyük bir bölümünün zaten bilindiği bir yanıt sağlamasını istiyorsanız, tahmin edilen çıkışlar bu isteğin gecikme süresini önemli ölçüde azaltabilir. Bu özellik, otomatik tamamlama, hata algılama ve gerçek zamanlı düzenleme gibi kodlama senaryoları için özellikle uygundur; burada hız ve yanıt hızı geliştiriciler ve son kullanıcılar için kritik önem taşır. Modelin tüm metni sıfırdan yeniden oluşturmasını sağlamak yerine, modele bilinen metni prediction
parametresine geçirerek yanıtın çoğunun zaten bilindiğini belirtebilirsiniz.
Model desteği
-
gpt-4o-mini
Sürüm:2024-07-18
-
gpt-4o
Sürüm:2024-08-06
-
gpt-4o
Sürüm:2024-11-20
API desteği
2025-01-01-preview
Desteklenmeyen özellikler
Tahmin edilen çıkışlar şu anda yalnızca metindir. Bu özellikler parametre ve tahmin edilen çıkışlarla prediction
birlikte kullanılamaz.
- Araçlar/İşlev çağrısı
- ses modelleri/girişler ve çıkışlar
-
n
daha yüksek değerler1
logprobs
-
presence_penalty
değerinden büyük değerler0
-
frequency_penalty
değerinden büyük değerler0
max_completion_tokens
Not
Tahmin edilen çıkışlar özelliği şu anda Güney Doğu Asya bölgesindeki modeller için kullanılamıyor.
Başlarken
Tahmin edilen çıktıların temellerini göstermek için bir modelden ortak programlama FizzBuzz
sorunundan kodu yeniden düzenlemesini FizzBuzz
isteyerek başlayacağız ve örneğini ile MSFTBuzz
değiştireceğiz. Örnek kodumuzu modele iki yerde geçireceğiz. İlk olarak dizideki/listedeki bir kullanıcı iletisinin messages
parçası, ikinci kez de yeni prediction
parametrenin içeriğinin bir parçası olarak.
Parametresine erişmek prediction
için OpenAI istemci kitaplığınızı yükseltmeniz gerekebilir.
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))
Çıktı
{
"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"
}
}
}
]
}
Çıktıda ve rejected_prediction_tokens
için accepted_prediction_tokens
yeni yanıt parametrelerine dikkat edin:
"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
}
Bu accepted_prediction_tokens
yardım, model yanıt gecikme süresini azaltır ancak herhangi biri rejected_prediction_tokens
, model tarafından oluşturulan ek çıkış belirteçleriyle aynı maliyet etkisine sahiptir. Bu nedenle, tahmin edilen çıkışlar model yanıt sürelerini iyileştirebilirken, daha fazla maliyete neden olabilir. Artan model performansını maliyetteki olası artışlara karşı değerlendirmeniz ve dengelemeniz gerekir.
Tahmine dayalı çıkışları kullanmanın gecikme süresini azaltmayı garanti etmediğini anlamak da önemlidir. Reddedilen tahmin belirteçlerinin yüzdesi kabul edilen tahmin belirteçlerinden daha yüksek olan büyük bir istek, model yanıt gecikme süresinde azalma yerine artışa neden olabilir.
Not
Yalnızca isteğin başındaki en az sayıda ilk belirtecin aynı olması halinde çalışan istem önbelleğe alma işleminden farklı olarak, tahmin edilen çıkışlar belirteç konumuyla kısıtlanmamıştır. Yanıt metniniz, tahmin edilen çıktıdan önce döndürülecek yeni bir çıkış accepted_prediction_tokens
içerse bile yine de oluşabilir.
Akışlar
Akış etkin yanıtlarınızı döndürüyorsanız, tahmin edilen çıkışların performans artışı çoğu zaman açıktır.
Parametresine erişmek prediction
için OpenAI istemci kitaplığınızı yükseltmeniz gerekebilir.
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='',)