Claude API에서 budget_tokens 넣으면 400 에러 나는데 extended thinking 어떻게 켜나요
사내 코드 리뷰 자동화 파이프라인을 Opus로 돌리고 있습니다. 기존에 Sonnet 4.5에서 쓰던 코드를 최신 Opus로 올리니까 thinking 관련해서 계속 400이 떨어집니다.
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 8000},
messages=[...],
)
에러 메시지는 대충 thinking.type: enabled is not supported 비슷하게 나옵니다. 예전 문서 보고 짠 코드라 그런 건지... 최신 Opus(4.7/4.8)나 그 위 모델에서는 thinking budget을 어떻게 잡는 게 맞나요? 토큰 상한을 걸고 싶은 의도였습니다.
답변 2개
- 채택된 답변에디터 검증
Opus 4.7부터
thinking: {type: "enabled", budget_tokens: N}자체가 빠졌습니다. 고정 토큰 버짓이 없어지고 adaptive thinking으로 통합됐어요. 그래서 지금 그 코드는 무조건 400 납니다. 사고 깊이는output_config.effort로 조절하는 걸로 바뀌었어요.response = client.messages.create( model="claude-opus-4-8", max_tokens=16000, thinking={"type": "adaptive"}, output_config={"effort": "high"}, # low | medium | high | xhigh | max messages=[...], )주의할 점:
budget_tokens는 Opus 4.7/4.8/Fable 5에 보내면 400. 대체재 없음(effort는 토큰 버짓이 아니라 출력 레벨 컨트롤이라 의미가 다름).temperature/top_p/top_k도 같이 제거됐으니 남아 있으면 그것들도 400 떨어집니다. 보통 마이그레이션할 때 이거 같이 안 지워서 한 번 더 막혀요.- 4.7/4.8에서
thinking필드 아예 빼면 thinking 꺼진 상태로 돕니다. 켜려면 명시적으로{type: "adaptive"}.
참고로 4.6대(Opus 4.6/Sonnet 4.6)에선
budget_tokens가 deprecated이긴 해도 아직 동작은 합니다. 마이그레이션 중에 하드 실링이 꼭 필요하면 거기서만 임시로 버틸 수 있는데, 4.7/4.8엔 안 통하니 새 코드는 그냥 adaptive로 가세요. 코드 리뷰 자동화면 effort는
high나xhigh가 무난합니다.xhigh가 코딩/에이전트 용도에서 제일 좋다고 안내돼 있고(Claude Code 기본도 그쪽), 저희 리뷰 파이프라인도 xhigh로 돌립니다.그리고 질문에서 진짜 원하던 게 "토큰 상한"이었으면 이 둘은 다른 거라 구분해야 해요:
max_tokens→ 응답당 강제 실링(모델은 이 값을 모름)output_config.task_budget→ 에이전트 루프 전체에 주는 예산(모델이 카운트다운 보고 스스로 조절). 베타 헤더task-budgets-2026-03-13필요, 최소 20,000 토큰.
단발성 리뷰 호출이면 effort + max_tokens로 충분하고, 멀티스텝 루프로 키울 거면 그때 task_budget 붙이세요. 단발 호출에 task_budget 넣으면 오히려 최소값 제약 때문에 귀찮아집니다.