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.

Önkoşullar

  • Azure OpenAI modeli dağıtıldı

  • OpenAI Python kitaplığını yükseltin:

    pip install --upgrade openai
    
  • Microsoft Entra ID kullanıyorsanız azure-identity aynı zamanda yükleyin:

    pip install --upgrade azure-identity
    

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
  • gpt-4.1 Sürüm: 2025-04-14
  • gpt-4.1-nano Sürüm: 2025-04-14
  • gpt-4.1-mini Sürüm: 2025-04-14

API desteği

İlk olarak 2025-01-01-preview tarihinde kullanıma sunulmuştur. Sonraki tüm sürümlerde desteklenir.

Desteklenmeyen özellikler

Tahmin edilen çıktılar şu anda sadece metin olarak verilmektedir. Bu özellikler prediction parametresi ve tahmin edilen çıkışlarla birlikte kullanılamaz.

  • Araçlar/İşlev çağrısı
  • ses modelleri/girişler ve çıkışlar
  • n 1'den daha yüksek değerler
  • logprobs
  • presence_penalty değerinden büyük değerler 0
  • frequency_penalty değerinden büyük değerler 0
  • max_completion_tokens

Uyarı

Öngörülen çıktılar özelliği şu anda Güneydoğu Asya bölgesindeki modeller için kullanılamıyor.

Başlarken

Modelden ortak bir programlama FizzBuzz sorunundaki kodun yeniden düzenlenmesini isteyerek ve FizzBuzz örneğini MSFTBuzz ile değiştirterek tahmin edilen çıktının temellerini göstereceğ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.

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)

client = OpenAI(
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=token_provider,
)

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="YOUR-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"
        }
      }
    }
  ]
}

Verilen çıktıda accepted_prediction_tokens ve rejected_prediction_tokens için 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 bir rejected_prediction_tokens, model tarafından üretilen 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.

Uyarı

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. Cevap metniniz, tahmin edilen çıktıdan önce döndürülecek yeni bir çıktı içerse bile, accepted_prediction_tokens yine de meydana gelebilir.

Yayın

tr-TR: Yanıtlarınızı akış etkinleştirildiğinde döndürüyorsanız, tahmin edilen çıkışların performans artışı genellikle en belirgin şekilde görülür.

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)

client = OpenAI(
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=token_provider,
)

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="YOUR-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='',)

Sorun giderme

  • 401/403: Microsoft Entra ID kullanıyorsanız, kimliğinizin Azure OpenAI kaynağına access olduğunu onaylayın. get_bearer_token_provider kullanıyorsanız https://ai.azure.com/.default için bir belirteç isteyin.
  • 404: onaylayın base_url Azure OpenAI kaynak adınızı kullanır ve model dağıtım adınızı kullanır.
  • 400: Desteklenmeyen özellikler bölümünde listelenen isteğe bağlı parametreleri ve özellikleri kaldırın ve yeniden deneyin.