Бөлісу құралы:


Прогнозируемые выходные данные (предварительная версия)

Прогнозируемые выходные данные могут повысить задержку ответа модели для вызовов завершения чата, в которых минимальные изменения необходимы для большего текста. Если вы просите модель предоставить ответ, в котором большая часть ожидаемого ответа уже известна, прогнозируемые выходные данные могут значительно снизить задержку этого запроса. Эта возможность особенно хорошо подходит для сценариев написания кода, включая автозавершение, обнаружение ошибок и редактирование в режиме реального времени, где скорость и скорость реагирования критически важны для разработчиков и конечных пользователей. Вместо повторного создания модели все текст с нуля можно указать модели, что большая часть ответа уже известна путем передачи известного текста в prediction параметр.

Поддержка моделей

  • gpt-4o-mini Версия: 2024-07-18
  • gpt-4o Версия: 2024-08-06
  • gpt-4o Версия: 2024-11-20

поддержка API

  • 2025-01-01-preview

Неподдерживаемые функции

Прогнозируемые выходные данные в настоящее время доступны только для текста. Эти функции нельзя использовать в сочетании с параметром prediction и прогнозируемыми выходными данными.

  • Вызовы средств и функций
  • звуковые модели и входные данные и выходные данные
  • n значения выше 1
  • logprobs
  • presence_penalty значения больше 0
  • frequency_penalty значения больше 0
  • max_completion_tokens

Примечание.

Функция прогнозируемых выходных данных в настоящее время недоступна для моделей в регионе Юго-Восточной Азии.

Начало работы

Чтобы продемонстрировать основы прогнозируемых выходных данных, мы начнем с запроса модели рефакторинг кода из общей проблемы программирования FizzBuzz для замены экземпляра FizzBuzzMSFTBuzz. Мы передадим наш пример кода модели в двух местах. Сначала в составе сообщения пользователя в messages массиве или списке и во второй раз в составе содержимого нового prediction параметра.

Для доступа к prediction параметру может потребоваться обновить клиентская библиотека OpenAI.

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))

Выходные данные

{
  "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"
        }
      }
    }
  ]
}

Обратите внимание, что в выходных данных новые параметры ответа для accepted_prediction_tokens и 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
    }

Задержка accepted_prediction_tokens отклика модели снижается, но все rejected_prediction_tokens они имеют те же последствия, что и дополнительные выходные маркеры, созданные моделью. По этой причине прогнозируемые выходные данные могут повысить время отклика модели, что может привести к более большим затратам. Вам потребуется оценить и сбалансировать повышенную производительность модели с учетом потенциальных увеличений затрат.

Также важно понимать, что использование прогнозных выходных данных не гарантирует сокращение задержки. Большой запрос с большим процентом отклоненных маркеров прогнозирования, чем принятые маркеры прогнозирования, может привести к увеличению задержки отклика модели, а не уменьшению.

Примечание.

В отличие от кэширования запросов, которое работает только в том случае, если заданное минимальное количество начальных маркеров в начале запроса идентичны, прогнозируемые выходные данные не ограничиваются расположением маркера. Даже если текст ответа содержит новые выходные данные, которые будут возвращены до прогнозируемых выходных данных, accepted_prediction_tokens по-прежнему могут возникнуть.

Потоковая передача

Прогнозируемые показатели производительности выходных данных часто наиболее очевидны, если вы возвращаете ответы с включенной потоковой передачей.

Для доступа к prediction параметру может потребоваться обновить клиентская библиотека OpenAI.

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