Прогнозируемые выходные данные (предварительная версия)
Прогнозируемые выходные данные могут повысить задержку ответа модели для вызовов завершения чата, в которых минимальные изменения необходимы для большего текста. Если вы просите модель предоставить ответ, в котором большая часть ожидаемого ответа уже известна, прогнозируемые выходные данные могут значительно снизить задержку этого запроса. Эта возможность особенно хорошо подходит для сценариев написания кода, включая автозавершение, обнаружение ошибок и редактирование в режиме реального времени, где скорость и скорость реагирования критически важны для разработчиков и конечных пользователей. Вместо повторного создания модели все текст с нуля можно указать модели, что большая часть ответа уже известна путем передачи известного текста в 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
для замены экземпляра FizzBuzz
MSFTBuzz
. Мы передадим наш пример кода модели в двух местах. Сначала в составе сообщения пользователя в 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='',)