Adaptive Thinking Killed My Token Budget Code: Migrating Off budget_tokens

개요

Anthropic의 Claude Opus 4.8 및 Fable 5 모델 출시와 함께 budget_tokens 파라미터가 제거되고 adaptiveeffort 파라미터로 대체되면서, 기존의 토큰 예산 기반 사고 모델에서 벗어나 모델이 스스로 사고량을 결정하는 방식으로 마이그레이션하는 과정과 새로운 모델의 장점을 설명합니다.

주요 내용

* 기존 budget_tokens의 문제점: Opus 4.5 이전 모델에서는 thinking: { type: "enabled", budget_tokens: N } 설정을 통해 모델의 사고 공간을 토큰 예산으로 할당할 수 있었으나, Opus 4.7, 4.8 및 Fable 5에서는 이 방식이 400 오류를 발생시키며 더 이상 지원되지 않습니다.
* 새로운 adaptive 사고 방식: Opus 4.8 및 Fable 5에서는 thinking: { type: "adaptive" } 설정을 통해 모델이 문제 해결에 필요한 사고량을 스스로 결정합니다.
* effort 파라미터 도입: output_config: { effort: "..." } 파라미터가 추가되어 전반적인 토큰 사용량 조절이 가능하며, low, medium, high, xhigh, max 등의 레벨로 설정할 수 있습니다.
* budget_tokens에서 effort로의 전환: 기존의 budget_tokens는 사고량 자체를 제어하는 데 초점을 맞췄지만, effort는 사고량과 행동(output)에 대한 전반적인 토큰 소비를 제어하며, 1:1 직접적인 매핑은 존재하지 않습니다.
* effort 레벨 선택 가이드:
* low: 분류, 라우팅 등 빠르고 범위가 제한적이며 지능 민감도가 낮은 작업.
* medium ~ high: 대부분의 앱 트래픽 및 일반적인 작업.
* xhigh: 코딩, 에이전트 루프 등 복잡한 작업 (Claude Code의 기본값).
* max: 정확성이 매우 중요하고 지연 시간에 덜 민감한 작업.
* effort 레벨에 따른 비용 변화: 높은 effort 설정이 에이전트 작업에서 초기에는 더 많은 토큰을 사용할 것처럼 보이지만, 모델의 계획 능력을 향상시켜 결과적으로 총 비용을 절감하는 경우도 있었습니다.
* 마이그레이션 절차:
1. budget_tokens를 코드베이스에서 검색합니다.
2. thinking: { type: "enabled", budget_tokens: N }thinking: { type: "adaptive" }로 교체합니다.
3. output_config: { effort: "..." }를 추가하고 각 호출 지점에 맞는 effort 레벨을 선택합니다.
4. 기존 budget_tokens 계산 헬퍼 함수를 삭제합니다.
5. temperature, top_p, top_k 등의 파라미터를 제거합니다 (Opus 4.7+에서 400 오류 발생).
6. 모델별 테스트 요청을 실행하고 response.model을 검증합니다.
* thinking 디스플레이 변경: Opus 4.7+ 및 Fable 5에서는 thinking 블록이 기본적으로 비어있는 summarized 상태로 스트리밍되어, 사고 과정을 UI에 렌더링하던 경우 멈춤 현상으로 오해할 수 있습니다. thinking: { type: "adaptive", display: "summarized" }를 통해 이전처럼 보이게 할 수 있습니다.
* 교훈: 플랫폼에서 제거될 수 있는 파라미터 위에 추상화를 구축하는 것은 위험하며, budget_tokens가 인시덴탈(incidental)한 파라미터였던 반면, "모델이 도움이 될 때 생각하게 하라"는 근본적인 요구사항은 adaptive 사고 방식으로 직접 표현되었습니다.

시사점

budget_tokens와 같은 특정 파라미터에 의존한 자체 로직은 플랫폼 업데이트 시 유지보수 부담을 증가시킬 수 있으며, adaptive 사고 방식과 effort 파라미터는 모델의 내부 판단력을 활용하여 더 나은 결과와 효율성을 얻을 수 있는 새로운 방향을 제시합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions