예측 출력은 더 큰 텍스트 본문에 최소한의 변경이 필요한 채팅 완료 호출에 대한 모델 응답 대기 시간을 향상시킬 수 있습니다. 모델에 예상 응답의 상당 부분이 이미 알려진 응답을 제공하도록 요청하는 경우 예측된 출력은 이 요청의 대기 시간을 크게 줄일 수 있습니다. 이 기능은 특히 개발자와 최종 사용자에게 속도와 응답성이 중요한 자동 완성, 오류 검색 및 실시간 편집을 비롯한 코딩 시나리오에 적합합니다. 모델이 모든 텍스트를 처음부터 다시 생성하도록 하는 대신, 알려진 텍스트를 prediction
매개 변수에 전달하여 대부분의 응답이 이미 알려져 있음을 모델에 나타낼 수 있습니다.
모델 지원
gpt-4o-mini
버전:2024-07-18
gpt-4o
버전:2024-08-06
gpt-4o
버전:2024-11-20
gpt-4.1
버전:2025-04-14
gpt-4.1-nano
버전:2025-04-14
gpt-4.1-mini
버전:2025-04-14
API 지원
2025-01-01-preview
에 처음 도입되었습니다. 모든 후속 릴리스에서 지원됩니다.
지원되지 않는 기능
예측 출력은 현재 텍스트 전용입니다. 이러한 기능은 prediction
매개 변수 및 예측 출력과 함께 사용할 수 없습니다.
- 도구/함수 호출
- 오디오 모델/입력 및 출력
1
보다 높은n
값logprobs
0
보다 큰presence_penalty
값0
보다 큰frequency_penalty
값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='',)