예측된 출력(미리 보기)
예측 출력은 더 큰 텍스트 본문에 최소한의 변경이 필요한 채팅 완료 호출에 대한 모델 응답 대기 시간을 향상시킬 수 있습니다. 모델에 예상 응답의 상당 부분이 이미 알려진 응답을 제공하도록 요청하는 경우 예측된 출력은 이 요청의 대기 시간을 크게 줄일 수 있습니다. 이 기능은 특히 개발자와 최종 사용자에게 속도와 응답성이 중요한 자동 완성, 오류 검색 및 실시간 편집을 비롯한 코딩 시나리오에 적합합니다. 모델이 모든 텍스트를 처음부터 다시 생성하도록 하는 대신, 알려진 텍스트를 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"
}
}
}
]
}
출력에서 다음과 같은 새 응답 매개 변수를 확인합니다rejected_prediction_tokens
.accepted_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
이 포함되어 있더라도 계속 발생할 수 있습니다.
Streaming
스트리밍을 사용하도록 설정된 응답을 반환하는 경우 예측 출력 성능 향상이 가장 분명합니다.
매개 변수에 액세스 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='',)