effidevFlutter · Cloudflare 엣지 · 클라우드 비용 최적화
한국어

Claude Sonnet 5 적응형 사고(Adaptive Thinking)와 Effort 파라미터로 토큰 비용 최적화하기

Claude Sonnet 5 적응형 사고 API 및 토큰 비용 최적화

2026년 AI 프론티어 모델 시장의 새로운 표준으로 자리 잡은 Claude Sonnet 5는 이전 세대(Claude Sonnet 4.6)와 API 요청/응답 구조가 동일한 드롭인 업그레이드지만, 사고(Thinking) 제어 방식에서 만큼은 이전과 완전히 다르다. Claude Sonnet 4.6까지 쓰이던 수동 확장 사고(thinking: { type: "enabled", budget_tokens: N })는 Sonnet 5에서 완전히 제거되어 400 에러를 반환하며, 대신 기본으로 켜진 **적응형 사고(Adaptive Thinking)**와 output_config.effort 파라미터로 사고 깊이·토큰 소비를 제어한다.

본 가이드에서는 Claude Sonnet 5 API의 thinking: { type: "adaptive" } + effort 조합 제어 구조, 신규 토크나이저가 토큰 비용 산정에 미치는 영향, 그리고 프로덕션 파이프라인에서 요청 단위로 비용을 최적화하는 실전 패턴을 다룬다.

핵심 요약

  • Claude Sonnet 5는 요청에 thinking 필드를 생략하면 기본으로 적응형 사고가 켜진 채 동작한다(Sonnet 4.6까지는 반대로 기본이 꺼짐이었다). 끄려면 thinking: { type: "disabled" }를 명시해야 한다.
  • 사고 깊이는 더 이상 budget_tokens 정수값이 아니라 output_config: { effort: "low" | "medium" | "high" | "xhigh" | "max" } 레벨로 제어한다. 기본값은 high.
  • temperature/top_p/top_k를 기본값이 아닌 값으로 설정하면 400 에러를 반환한다 — Sonnet 4.6에는 없던 새 제약이다.
  • Sonnet 5는 신규 토크나이저를 써서 동일 텍스트가 Sonnet 4.6 대비 약 30% 더 많은 토큰으로 계산된다. 요금은 토큰당 단가가 아니라 토큰 수 자체가 늘어나는 방식으로 비용에 영향을 준다.
  • 도입가 입력 $2 / 출력 $10(백만 토큰당)가 2026년 8월 31일까지 적용되고, 이후 표준가 $3 / $15로 전환된다.

Claude Sonnet 5 사고 제어 아키텍처

파라미터 / 모드 effort: "low" effort: "high" (기본값) effort: "xhigh"
적용 유스케이스 단순 분류, 챗봇 응답, 고빈도 저지연 요청 복잡한 추론, 어려운 코딩 문제, 에이전틱 작업 30분 이상 걸리는 장기 코딩/에이전틱 작업
사고 방식 적응형 사고가 대부분의 요청에서 생략됨 필요할 때 적응형 사고 발동 더 깊고 잦은 사고
속도/비용 특성 가장 빠르고 저렴 균형점(파라미터 생략과 동일 동작) 토큰 소비가 크게 증가

effort를 명시하지 않으면 high와 동일하게 동작한다. max는 토큰 소비 제한 없이 최고 성능을 내는 레벨로, 정말 어려운 문제에만 쓴다.


Claude Sonnet 5 API 호출 실전 코드

Node.js / TypeScript 환경에서 Anthropic SDK로 effort를 태스크 난이도에 따라 동적으로 조절하는 실전 코드다. Sonnet 4.6 이하에서 쓰던 thinking.budget_tokens를 그대로 가져오면 400 에러가 난다 — 마이그레이션 시 반드시 아래처럼 바꿔야 한다.

import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
});

type Effort = 'low' | 'medium' | 'high' | 'xhigh' | 'max';

async function runAdaptiveThinking(prompt: string, effort: Effort) {
  const response = await anthropic.messages.create({
    model: 'claude-sonnet-5',
    max_tokens: 8192,
    // Sonnet 4.6까지 쓰던 { type: 'enabled', budget_tokens: N } 은
    // Sonnet 5에서 제거되어 400 에러를 반환한다. 끄고 싶을 때만 명시하면 되고,
    // 생략하면 적응형 사고가 기본으로 켜진 채 동작한다.
    thinking: { type: 'adaptive' },
    output_config: { effort },
    messages: [
      {
        role: 'user',
        content: prompt,
      },
    ],
  });

  for (const block of response.content) {
    if (block.type === 'thinking') {
      console.log('[Claude Sonnet 5 Thinking]:', block.thinking);
    } else if (block.type === 'text') {
      console.log('[Claude Sonnet 5 Response]:', block.text);
    }
  }
}

// 단순 태스크는 low, 복잡한 리팩토링/에이전틱 작업은 xhigh
await runAdaptiveThinking('이 JSON을 스키마에 맞게 정규화해줘', 'low');
await runAdaptiveThinking('이 레포의 순환 의존성을 찾아서 리팩토링 계획을 세워줘', 'xhigh');

사고를 완전히 끄고 싶은 요청(지연 시간이 절대적으로 중요한 단순 응답)에는 thinking: { type: 'disabled' }를 명시한다. temperaturetop_p를 함께 조정하려는 유혹이 들 수 있는데, Sonnet 5에서는 기본값이 아닌 샘플링 파라미터를 보내는 순간 400 에러이므로 톤 조절은 시스템 프롬프트 지시로 대체해야 한다.


신규 토크나이저와 프로덕션 비용 최적화 전략

  1. 토큰 재측정 (Recount, Don’t Reuse): Sonnet 4.6 기준으로 측정해 둔 토큰 수/예산을 그대로 재사용하면 안 된다. 동일 텍스트가 신규 토크나이저에서 약 30% 더 많은 토큰으로 잡히므로, max_tokens를 포함해 토큰 예산과 관련된 모든 값을 Token Counting API로 다시 측정해야 한다.
  2. Effort 동적 라우팅 (Task Complexity Router): 사용자 요청이나 코드 변경 건수의 복잡도를 측정해 effort 값을 자동으로 매핑한다. 고빈도·단순 응답은 low로 비용을 낮추고, 에이전틱 코딩·심층 분석에는 xhigh로 승격한다.
  3. 프롬프트 캐싱 (Prompt Caching): 대용량 코드베이스나 라이브러리 타입 정의를 System Prompt로 전달할 때 cache_control: { type: "ephemeral" }을 지정해 캐시 히트 시 최대 90% 토큰 할인을 받는다. 단, 동일 대화 안에서 effort 값을 바꾸면 캐시된 프리픽스가 무효화되므로, 세션 시작 시 정한 effort는 그 세션 안에서 유지하는 편이 캐시 적중률에 유리하다.
  4. 도입가 기간 활용: 2026년 8월 31일까지는 입력 $2 / 출력 $10(백만 토큰당) 도입가가 적용된다. 이후 표준가 $3 / $15로 전환되므로, 대규모 마이그레이션 테스트나 백필 작업은 이 기간 안에 몰아서 처리하는 편이 비용상 유리하다.

Claude Sonnet 5의 적응형 사고와 effort 파라미터를 프로덕션 시스템에 맞게 라우팅하면, Sonnet 4.6 대비 늘어난 토큰 단가 부담을 상쇄하면서도 예측 가능한 파이프라인 비용을 유지할 수 있다.