"LLM 추론 모드 (3/6) — Claude effort 완전 해부: low·medium·high·xhigh·max"

2편이 Claude의 Thinking(사고를 켤지·언제 할지)을 다뤘다면, 3편은 그 사고의 깊이와 응답 전체를 조절하는 다이얼 — effort — 를 정면으로 해부한다. low / medium / high / xhigh / max 각 레벨이 무엇을, 사고뿐 아니라 도구 호출과 프리앰블까지 어떻게 바꾸는지를 본다.

Claude의 추론 제어는 두 층이다 — Thinking(사고를 켤지·언제)과 effort(얼마나 깊게·응답 전체에 토큰을 얼마나). 2편이 앞쪽을 봤다면, 3편은 effort를 끝까지 분해한다. effort가 특이한 이유는 단 하나의 다이얼이 사고 깊이만이 아니라 응답에 들어가는 모든 토큰을 조절하기 때문이다.

한 문단 요약

Claude의 effortoutput_config: {effort: "low"|"medium"|"high"|"xhigh"|"max"}로 설정하는 GA 파라미터다(베타 헤더 불필요). Opus 4.5에서 처음 도입됐고(당시 베타 effort-2025-11-24), 4.6부터 GA다. 기본값은 high이며 — API에서도 Claude Code에서도 — high로 두는 것은 파라미터를 생략한 것과 동일하다. effort의 정체성은 사고뿐 아니라 응답의 모든 토큰(텍스트·설명, 도구 호출과 함수 인자, 사고 깊이)을 함께 조절한다는 점이다. 엄격한 토큰 상한이 아니라 행동 신호다 — 낮은 effort에서도 어려운 문제엔 여전히 생각하되, 같은 문제를 높은 effort로 풀 때보다 덜 생각한다.


1. 파라미터: 무엇을, 어떻게

effort는 메시지 요청의 output_config 안에 들어간다.

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    output_config={"effort": "medium"},
    messages=[{"role": "user", "content": "..."}],
)

사실 관계를 못 박으면 이렇다.

  • 파라미터: output_config: {effort: "low"|"medium"|"high"|"xhigh"|"max"}. GA, 베타 헤더 불필요.
  • 처음 도입: Opus 4.5(초기엔 베타 헤더 effort-2025-11-24 뒤에 있었다). 4.6부터 GA.
  • 기본값 = high. high로 설정하는 것은 파라미터를 생략한 것과 완전히 동일하다. 이 기본값은 API와 Claude Code 양쪽 모두에 적용된다.

2. effort가 조절하는 것 — 응답의 모든 토큰

effort가 단순한 "사고 손잡이"가 아닌 이유가 여기다. effort는 응답에 들어가는 모든 토큰을 함께 조절한다.

  • (a) 텍스트·설명: 답변 본문이 얼마나 자세한지, 얼마나 길게 풀어쓰는지.
  • (b) 도구 호출과 함수 인자: 도구를 몇 번, 어떻게 호출하는지.
  • (c) extended/adaptive thinking 깊이: 사고를 얼마나 깊게 하는지.

이 세 가지를 하나의 다이얼로 묶는다는 점이 effort를 순수한 사고 제어와 구분 짓는다. 사고 깊이만 바꾸는 것이 아니라, 같은 손잡이가 설명의 장황함과 도구 사용 패턴까지 동시에 움직인다.

그리고 effort는 엄격한 토큰 예산이 아니라 행동 신호(behavioral signal)다. low로 둔다고 해서 어려운 문제에서 사고가 금지되는 게 아니다 — 어려운 문제엔 여전히 생각하되, 같은 문제를 높은 effort로 풀 때보다 생각할 뿐이다. effort는 모델에게 "이 작업에 얼마나 공을 들일 기조인가"를 알려주는 신호이지, 토큰 카운터를 강제로 끊는 상한이 아니다.

3. effort와 도구 사용 — 같은 다이얼이 에이전트 행동을 바꾼다

effort가 도구 호출까지 조절한다는 점은 에이전트 워크플로에서 가장 체감이 크다. 낮은 effort와 높은 effort는 같은 작업을 두고도 행동 패턴이 갈린다.

낮은 effort 높은 effort
도구 호출 수 여러 작업을 더 적은 호출로 묶음, 호출 총량도 적음 호출을 더 자주, 더 세분화
착수 방식 프리앰블 없이 바로 작업 시작 계획을 먼저 설명한 뒤 착수
완료 보고 간결한 확인 자세한 변경 요약
코드 주석 최소 더 많은 주석

즉 낮은 effort는 "말 줄이고 묶어서 빨리", 높은 effort는 "계획을 펼치고 꼼꼼하게"의 기조다. 같은 effort 다이얼이 사고 깊이와 도구 행동을 동시에 끌어당기므로, effort를 내리면 응답이 짧아지는 동시에 도구 호출도 통합·축소된다.

4. 레벨별 가이드 — Anthropic effort 문서

각 레벨의 권장 용처는 Anthropic effort 문서를 그대로 따르면 이렇다.

레벨 설명 용처
max 절대 최대 역량, 토큰 소비에 제약 없음, 가장 깊은 추론 진짜 프런티어 문제에만 예약. 대부분 워크로드에선 작은 이득에 큰 비용이 붙고, 구조화 출력·지능 민감도가 낮은 작업에선 overthinking으로 이어질 수 있음
xhigh 긴 호흡 작업을 위한 확장 역량 약 30분 이상 이어지는 에이전트/코딩 런, 토큰 예산이 수백만 단위인 작업. Opus 4.7/4.8에서 코딩·에이전트의 권장 시작점
high 높은 역량(= 기본값) 복잡한 추론, 어려운 코딩, 에이전트. 품질 대 토큰 효율의 스위트 스폿인 경우가 많음
medium 균형, 적당한 토큰 절감 평균적인 워크플로의 드롭인
low 가장 효율적, 상당한 절감, 약간의 역량 손실 단순 작업, 서브에이전트, 대량 처리, 지연 민감 작업

핵심은 1편부터 반복된 원칙 그대로다 — "항상 최대로"가 아니라 작업 난이도에 다이얼을 맞춘다. max조차도 만능이 아니며, 좁은 출력 공간에서는 오히려 품질을 깎을 수 있다.

5. 4.7/4.8은 effort를 더 엄격히 따른다

세대가 올라가며 effort 해석도 달라졌다. Opus 4.7/4.8은 4.6보다 effort를 더 엄격하게 따른다 — 특히 low/medium에서, 요청된 범위에 작업을 정확히 한정한다. 시키지 않은 일까지 확장하지 않는다는 뜻이다.

여기서 실무 규칙이 나온다.

  • 어려운 작업에서 추론이 얕다면, 프롬프트로 우회하지 말고 effort를 올려라. "더 깊게 생각해"라고 프롬프트를 비트는 것보다 effort를 한 단계 올리는 것이 직접적이고 의도대로 동작한다.
  • xhigh/max에서는 max_tokens를 크게 잡아라(약 64k에서 시작). 모델이 도구 호출과 서브에이전트를 가로질러 생각하고 또 행동할 공간이 필요하기 때문이다. 높은 effort로 다이얼을 올려놓고 max_tokens를 좁게 두면, 모델이 충분히 펼치기 전에 응답이 잘린다.

6. effort와 thinking의 상호작용 — 모델별

effort와 Thinking(2편)은 별개의 손잡이지만 모델마다 맞물리는 방식이 다르다.

모델 thinking 방식 effort와의 관계
Fable 5 / Mythos 5 adaptive 항상 켜짐 effort가 사고 깊이를 조절. {type:"disabled"}는 400
Opus 4.8 / 4.7 adaptive thinking 깊이 제어는 effort 권장. 수동 budget_tokens는 400
Opus 4.6 adaptive thinking effort 권장. budget_tokens는 deprecated이나 아직 허용
Sonnet 4.6 adaptive thinking effort가 사고 깊이를 조절
Opus 4.5 수동 thinking(budget_tokens) effort가 사고 예산과 함께 동작

읽는 법은 단순하다. 현행 모델(4.6~4.8, Fable 5)에서 사고 깊이를 키우거나 줄이는 정식 손잡이는 effort다. budget_tokens로 직접 사고량을 못 박는 방식은 Opus 4.5에서만 남아 있고, 그 위 세대에서는 제거됐다(2편 참조).

7. 모델 지원 매트릭스

effort 레벨은 모델마다 지원 범위가 다르다. 보내기 전에 확인해야 할 표다.

effort 레벨 지원 모델
low / medium / high Opus 4.5, Opus 4.6, Opus 4.7, Opus 4.8, Sonnet 4.6, Fable 5
max Opus 4.6 이상, Sonnet 4.6, Fable 5 — Opus 4.5 불가, Haiku 불가, 구형 Sonnet 불가
xhigh Opus 4.7에서 추가, Opus 4.8, Fable 5 (highmax 사이에 위치)

추가 주의:

  • Sonnet 4.5 / Haiku 4.5에 effort를 보내면 에러가 난다.
  • xhighhigh보다 깊고 max보다 가벼운 중간 단계다 — Opus 4.7에서 처음 들어왔다.
  • max는 Opus 4.5에는 없다(4.6부터).

8. Task Budgets — effort와 별개의 보완 제어

effort가 턴 단위 깊이를 조절한다면, 누적 루프 전체의 토큰 소비를 다루는 별도 손잡이가 있다 — Task Budgets다.

  • 파라미터: output_config: {task_budget: {type: "tokens", total: N}}. 베타 헤더 task-budgets-2026-03-13, 최소 20,000.
  • 동작: 모델에게 에이전트 루프 전체에 쓸 수 있는 토큰 예산을 알려준다. 모델은 줄어드는 카운트다운을 스스로 인지하며 그에 맞춰 행동을 조절한다.
  • max_tokens와의 차이: max_tokens는 모델이 인지하지 못하는 응답 단위 강제 상한이다. Task Budget은 모델이 인지하고 스스로 조절하는 루프 단위 예산이다.

정리하면 — effort = 턴마다의 깊이, Task Budget = 루프 전체의 누적 소비. 둘은 경쟁하지 않고 보완한다. 깊이는 effort로 잡고, 긴 에이전트 런의 총량 상한은 Task Budget으로 자기 조절시키는 식이다.

이어지는 글

여기까지가 API 표면에서 본 effort다. 다음 편(4/6)은 같은 effort를 Claude Code의 실전에서 본다 — CLI의 다섯 레벨, /effortCLAUDE_CODE_EFFORT_LEVEL 환경변수, 세션 지속성, 그리고 메뉴에 보이지만 API 레벨이 아닌 ultracode의 정체.


이 글의 파라미터 값·기본값·모델별 지원은 Anthropic 공식 effort 문서와 모델 마이그레이션 가이드를 1차 자료로 정리했다.

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"