Aracılığıyla paylaş


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ğerler 1
  • logprobs
  • presence_penalty değerinden büyük değerler 0
  • frequency_penalty değerinden büyük değerler 0
  • 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 MSFTBuzzdeğ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_tokensiç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='',)