가이드 목록으로
문제 해결·2026년 9월 23일·6분 분량

“Unsupported value: 'temperature' does not support … with this model” — 추론 모델에서는 effort와 verbosity를 대신 사용하세요

추론 모델에 대한 요청에서 temperature와 top_p를 제거하고 logprobs와 top_logprobs도 함께 제거하세요. OpenAI의 모델 지침에 따르면 GPT-5.1, 5.2, 5.4 및 GPT-6 Sol과 Luna에서는 reasoning effort가 none일 때만 샘플링을 허용합니다. gpt-5, gpt-5-mini 및 gpt-5-nano는 어떤 설정에서도 이를 거부하며 GPT-6 Astra에는 사용할 none 설정이 없습니다. 대신 reasoning effort, verbosity 및 프롬프트로 출력을 조정하세요.

마지막 검토일: .

추론 모델에 대한 요청에서 temperature와 top_p를 제거하고 logprobs와 top_logprobs도 함께 제거하세요. OpenAI의 모델 지침에 따르면 GPT-5.1, 5.2, 5.4 및 GPT-6 Sol과 Luna에서는 reasoning effort가 none일 때만 샘플링을 허용합니다. gpt-5, gpt-5-mini 및 gpt-5-nano는 어떤 설정에서도 이를 거부하며 GPT-6 Astra에는 사용할 none 설정이 없습니다. 대신 reasoning effort, verbosity 및 프롬프트로 출력을 조정하세요.

오류

response (HTTP 400)
{
  "error": {
    "message": "Unsupported value: 'temperature' does not support 0.2 with this model. Only the default (1) value is supported.",
    "type": "invalid_request_error",
    "param": "temperature",
    "code": "unsupported_value"
  }
}

# 0.2 is whatever your code sent; reports show 0 and 0.7 too.
# Some models reject the field at any value instead:
#   "Unsupported parameter: 'temperature' is not supported with this model."
#   "Unsupported parameter: 'top_p' is not supported with this model."
#   (code "unsupported_parameter")

원인과 해결 방법 한눈에 보기

원인해결 방법
none보다 높은 reasoning effort로 실행되는 추론 모델요청에서 temperature, top_p, logprobs 및 top_logprobs를 제거하세요.
none 설정이 없는 모델 — gpt-5, gpt-5-mini, gpt-5-nano, GPT-6 Astra샘플링 매개변수를 절대 전송하지 말고 effort와 verbosity로 조정하세요.
설정하지 않았지만 스택에 존재하는 기본값 (LangChain에서는 0.7, Cline에서는 0)요청이 전송되기 전에 모델별 기본값을 재정의하거나 제거하세요.
안전을 위해 기본값 1 전송대신 필드를 생략하세요. 일부 모델은 어떤 값에서도 매개변수를 거부합니다.

샘플링 매개변수 제거

이는 새 값을 설정하는 것이 아니라 삭제하는 것입니다. reasoning-model 호출에서 temperature와 top_p를 완전히 제외하고, 동일한 규칙이 적용되는 logprobs와 top_logprobs도 함께 제외하세요. 모델이 수행하는 작업량을 변경하려면 남아 있는 조절 장치인 reasoning effort를 사용하세요.

fix.py
from openai import OpenAI

client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")
msgs = [{"role": "user", "content": "Summarize this diff as three changelog bullets."}]

# Before — sampling parameters on a reasoning model
resp = client.chat.completions.create(
    model="gpt-6-astra", temperature=0.2, top_p=0.9, messages=msgs)

# After — removed; reasoning effort is the control that remains
resp = client.chat.completions.create(
    model="gpt-6-astra", reasoning_effort="low", messages=msgs)

샘플링을 허용하는 모델 확인

OpenAI는 모델 계열별로 규칙을 명시하며, 이 규칙은 reasoning effort에 따라 달라집니다. 이는 2026년 9월 23일에 확인한 모델 지침입니다. GPT-5.5 및 GPT-5.6 페이지에는 이 규칙이 다시 명시되어 있지 않으므로 침묵을 허용으로 해석하지 말고 테스트해야 할 이유로 보세요. o-series 행은 문서가 아니라 오류 보고에서 가져왔습니다.

sampling parameters by model
gpt-5, gpt-5-mini, gpt-5-nano   error, whatever the reasoning setting
GPT-5.1, GPT-5.2, GPT-5.4       accepted only with reasoning effort "none"
GPT-6 Sol, GPT-6 Luna           remove them unless reasoning effort is "none"
GPT-6 Astra                     remove them: Astra has no "none" effort
GPT-5.5, GPT-5.6                not stated on their guidance pages
o1-preview, o3-mini             rejected (reported errors, not docs)

이를 대체한 제어 기능으로 조정

OpenAI의 지침은 reasoning이 활성화된 경우 세 가지 대체 수단을 제시합니다. reasoning depth(reasoning.effort: 모델에 따라 값이 다르며 none 및 minimal부터 xhigh 및 max까지), output verbosity(text.verbosity: low, medium 또는 high이며 기본값은 medium), output length(max_output_tokens: 추론 토큰과 표시되는 토큰을 모두 계산)입니다. Chat Completions에서는 처음 두 항목을 reasoning_effort 및 verbosity로 표기합니다. 지침에는 temperature 0을 대체하는 샘플링 수준의 방법이 없습니다. 출력을 반복 가능하게 만들기 위해 사용했다면 형태를 고정하세요. 스키마에는 Structured Outputs를 사용하고 나머지에는 프롬프트를 사용합니다.

steer.py
# client as in fix.py above
resp = client.responses.create(
    model="gpt-5-6-sol",
    input="Summarize this diff as three changelog bullets.",
    reasoning={"effort": "low"},   # how much it thinks
    text={"verbosity": "low"},     # how much it says
    max_output_tokens=2000,        # hard cap, reasoning tokens included
)
print(resp.output_text)

규칙을 하나의 헬퍼에 넣으세요

모든 호출 지점에서 분기하면 다음 모델 계열이 등장할 때 또 다른 편집 작업이 발생합니다. 전송하려는 모델과 effort를 기준으로 샘플링 매개변수를 한 번만 필터링하세요. effort none을 지원하는 모델에서 none을 요청하면 해당 매개변수는 그대로 통과합니다.

sampling.py
SAMPLING = ("temperature", "top_p", "logprobs", "top_logprobs")
REASONING = ("gpt-5", "gpt-6", "o1", "o3", "o4")  # extend as you adopt models

def sampling_params(model: str, effort: str | None, **params) -> dict:
    """Keep sampling parameters only where they are accepted: effort "none"."""
    if model.startswith(REASONING) and effort != "none":
        return {k: v for k, v in params.items() if k not in SAMPLING}
    return params

effort = "low"  # client and msgs as in fix.py above
resp = client.chat.completions.create(
    model="gpt-5-6-terra",
    messages=msgs,
    reasoning_effort=effort,
    **sampling_params("gpt-5-6-terra", effort, temperature=0.2, top_p=0.9),
)

Kunavo를 통해 호출하는 경우

Kunavo는 어느 엔드포인트에서도 GPT 모델에 대해 temperature 또는 top_p를 제거하거나 다시 작성하지 않습니다. /v1/chat/completions에서는 Responses 업스트림을 위해 요청을 재구성합니다. temperature와 top_p는 변경 없이 복사되고, reasoning_effort는 reasoning.effort가 되며, 두 가지 토큰 제한 표기 중 하나는 max_output_tokens가 됩니다. 반면 이 매핑에 포함되지 않는 verbosity, logprobs, top_logprobs, seed 및 stop 등은 전혀 전달되지 않으므로 verbosity는 /v1/responses를 통해 설정하세요. 해당 엔드포인트에서는 text.verbosity를 포함한 샘플링 및 text 필드가 전송된 그대로 통과합니다. 모델이 값을 거부하면 400 응답에 Kunavo의 봉투 내부에 메시지가 한 글자도 바뀌지 않고 포함됩니다(type upstream_error, code upstream_400). 따라서 code "unsupported_value"가 아니라 상태 또는 메시지로 일치시키세요. 실패한 호출에는 요금이 부과되지 않습니다. temperature를 설정한 호출이 성공했다고 해서 해당 값이 적용되었다는 뜻은 아닙니다. Kunavo는 Anthropic이 제거한 6개의 Claude 모델(claude-fable-5-1, claude-fable-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7 및 claude-sonnet-5)에 대해서만 temperature, top_p 및 top_k를 직접 제거하며, 모든 엔드포인트에서 그렇게 처리합니다. 동일한 마이그레이션의 다른 절반인 max_tokens와 max_completion_tokens의 차이는 다음에서 다룹니다 max_tokens 가이드.

자주 묻는 질문

GPT-5에서 temperature를 설정할 수 있나요?

gpt-5, gpt-5-mini 또는 gpt-5-nano에서는 설정할 수 없습니다. OpenAI에 따르면 이를 포함한 요청은 오류를 발생시킵니다. GPT-5.1, 5.2 및 5.4는 reasoning effort가 none으로 설정된 경우에만 temperature, top_p 및 logprobs를 허용하며, OpenAI의 GPT-6 가이드에서는 reasoning effort가 none이 아닐 때마다 이를 제거하라고 안내합니다.

추론 모델에서 temperature를 대신하는 것은 무엇인가요?

모델이 얼마나 깊이 생각할지를 정하는 reasoning effort, 얼마나 많이 말할지를 정하는 text.verbosity(채팅 완료의 verbosity), 그리고 하드 상한인 max_output_tokens를 사용합니다. Kunavo를 통해 /v1/responses에서 verbosity를 설정하세요. 채팅 엔드포인트는 이를 GPT 모델로 전달하지 않습니다. 반복 가능한 구조가 필요하다면 Structured Outputs와 프롬프트의 명시적인 형식 규칙을 사용하세요.

그냥 temperature=1을 보내면 되나요?

생략하세요. Unsupported value 메시지는 기본값 1이 해당 메시지를 생성한 모델에서는 허용된다고 말하지만, 다른 모델은 어떤 값에서도 이 매개변수를 거부합니다("Unsupported parameter: 'temperature' is not supported with this model"). OpenAI의 지침도 해당 필드를 제거하라고 안내합니다.

코드에서 temperature를 설정하지 않았는데 왜 이 오류가 발생하나요?

스택의 무언가가 이를 설정한 것입니다. jupyter-ai 사용자의 o1-preview 호출에는 0.7이 포함되어 있었고, 이는 jupyter-ai 내부에서 사용하는 LangChain의 ChatOpenAI 클래스 기본값입니다. 또 다른 Cline 기여자는 GPT-5 사용자가 겪은 0을 하드코딩된 기본값 때문이라고 설명했습니다. SDK나 프레임워크가 실제로 전송하는 내용을 확인한 다음, 모델별로 재정의하거나 제거하세요.

Kunavo가 대신 temperature를 제거하나요?

GPT 모델에서는 제거하지 않습니다. Kunavo는 /v1/chat/completions와 /v1/responses 모두에서 사용자가 보낸 temperature와 top_p를 그대로 전달합니다. Anthropic이 해당 매개변수를 제거한 6개 Claude 모델에서는 temperature, top_p 및 top_k를 제거합니다.

관련 가이드

오류 의미에 대한 자세한 내용은 오류 참조에서 확인할 수 있습니다. 가입 및 인증 가이드를 통해 1분이면 키를 받을 수 있습니다.