문제 해결가이드
temperature, top_p, top_k에서 발생하는 Claude API 400 오류: 해결 방법
Claude 요청이 API 버전 2026-10-21에서 400을 반환하기 시작했나요? temperature, top_p, top_k를 제거하거나 이전 버전에 고정하세요. 단계별 안내입니다.

이 페이지의 내용
어제까지 잘 동작하던 Claude 요청을 API 버전 2026-10-21(anthropic- 헤더 또는 이를 지원하는 SDK 릴리스)로 옮겼더니 이제 400이 돌아옵니다. 요청 본문을 보세요. temperature, top_p 또는 top_k이 있으면 그게 원인입니다. 이 세 필드를 삭제하면 요청이 통과됩니다.
Anthropic의 버전 2026-10-21 마이그레이션 가이드(https://platform.claude.com/docs/en/api/migration-2026-10-21,, 2026년 10월 24일 확인)에 따르면, 이 세 가지 중 하나라도 보내는 Messages 또는 Message Batches 요청은 400 오류를 반환합니다. 값이 해당 파라미터의 기본값이더라도 마찬가지입니다. 요청에서 400 상태와 해당 필드 이름을 찾아보세요.
실패하는 요청의 모습#
Claude에게 티켓 요약을 요청하고 낮은 temperature로 답변을 일정하게 유지하는 작은 스크립트가 있다고 해봅시다:
import anthropic
client = anthropic.Anthropic()
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
temperature=0.2, # <- this line now causes the 400
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)일반 HTTP에서도 마찬가지입니다. 버전 헤더를 직접 설정한다면, 다음 줄이 새 동작으로 넘어가게 하는 줄입니다:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
"messages": [{"role": "user", "content": "Hello"}]}'해결책: 세 파라미터 제거#
모든 Messages 및 Message Batches 요청에서 temperature, top_p, top_k을 삭제하세요. 이것들이 없으면 모델은 기본값(temperature 1.0)으로 샘플링하며, 이는 이들을 생략한 2023-06-01 요청과 정확히 동일합니다.
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
최신 주요 SDK 버전과 ant CLI(2.0.0)에는 이 파라미터가 아예 없으므로, 업그레이드 후에는 코드에서 제거해야 합니다. 400은 anthropic-으로 나가면서 세 필드 중 하나를 여전히 포함하는 요청에서 발생합니다. .NET IChatClient 어댑터는 더 완화된 방식을 취합니다. 이제 ChatOptions., TopK, TopP을 무시합니다. 언어별 정확한 SDK 버전 번호는 가이드의 Upgrade steps 탭에 있습니다.
SDK 없이 API를 호출한다면 버전은 anthropic- 헤더이며, 2026-10-21가 새 규칙을 켜는 값입니다.
제거하면 답변이 바뀔까요?#
모델에 따라 다르며, 가이드가 이 부분을 구체적으로 설명합니다.
- Claude 4.7 이상은 이미 기본 샘플링 값만 허용합니다. 달라지는 것은 없습니다. 이전에도 기본값으로 샘플링했고 지금도 그렇습니다.
- 다른 값을 허용하는 모델, 예를 들어 Claude Sonnet 4.6: 더 일관된 출력을 얻으려고
temperature을 낮췄다면 그 효과는 사라지며, 이를 대체하는 다른 설정은 없습니다.
특정 요청이 정말로 비기본 값에 의존한다면, 가이드에서 두 가지 선택지가 있습니다. 파라미터 전송을 중단하고 기본 샘플링을 받아들이거나, 그 요청 하나만 anthropic-에 고정하는 것입니다.
답변이 엄격하게 일관되어야 한다면, 일관성을 프롬프트에 넣으세요. 고정된 출력 형식, 원하는 답변의 짧은 예시, 그리고 형식을 벗어난 것을 거부하는 코드 내 검사입니다. 숫자 하나보다 작업은 많지만, 샘플링 노브에 의존하지 않습니다.
400이 보일 때 빠른 체크리스트#
- 프로젝트에서
temperature,top_p,top_k을 검색하세요. 래퍼와 공유 설정 파일도 포함해서요. - 배치 작업을 확인하세요. 이 규칙은 2026-10-21로 생성된 Message Batch 내부의 각 요청에 적용되므로, 배치에 있는 모든 요청의 파라미터를 살펴보세요.
- 무엇이 바뀌었는지 확인하세요. SDK 주요 버전, CLI 버전, 또는
anthropic-헤더입니다.version - 필드를 제거하거나, 비기본 값이 필요하면 그 요청을
2023-06-01에 고정하세요. - 대규모 배치를 다시 시작하기 전에 요청 하나를 실행해보세요.
Claude와 OpenAI 스타일 API를 위한 하나의 코드 경로#
흔한 구성: 요청을 만들어 Anthropic Messages 또는 OpenAI 스타일 Chat Completions 엔드포인트로 보내는 단일 헬퍼입니다. 가장 간단한 해결책은 파라미터를 분리하는 것입니다. temperature은 OpenAI 스타일 분기에만 유지하고, Messages 분기에는 추가하지 마세요.
Chat Completions 형식에서 이 설정은 일반적인 요청 필드입니다. CheapTokens에서는 OpenAI 호환 주소 https:/을 통해 동작합니다. 다음은 DeepSeek-V4-Flash(380K 컨텍스트, 답변당 최대 32,768 출력 토큰)에 대한 요청으로, CheapTokens 문서의 전체 모델 id를 사용합니다:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"temperature": 0.2,
"max_tokens": 300,
"messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
}'입력 토큰 1,000개와 출력 토큰 300개를 사용하는 그런 요청은 현재 가격으로 $0.000045입니다. DeepSeek-V4-Flash는 하루 중 언제든 하나의 가격이며 피크 시간이 없고, 하나의 잔액으로 모든 모델을 커버합니다. 390K 컨텍스트 윈도우로 동일한 코드 경로를 사용하려면 GLM-5.3-Flash(zai-, 최대 8,192 출력 토큰)도 있습니다. 모든 모델의 현재 가격은 가격 페이지에 있습니다.
이 설정이 어떻게 동작하는지 보려면 시스템 프롬프트와 temperature: 하는 일과 설정 방법을 읽어보세요. Python에서 Claude 형식 Messages를 호출하려면 CheapTokens와 함께하는 Anthropic Python SDK를 참고하세요. 기본 주소와 키 설정은 CheapTokens 문서에 있습니다.



