블로그 목록
ai

Claude 확장된 사고(Extended Thinking)로 복잡한 추론 시키기 — 답 대신 과정을 먼저 뽑게 하기

여러 단계로 나눠서 생각해야 풀리는 문제를 Claude에 던지면, 가끔 성급하게 결론부터 내버린다. 수학 계산이나 코드 디버깅, 조건이 얽힌 로직 판단 같은 데서 특히 그렇다. 프롬프트에 "단계별로 생각해봐"를 붙이는 것도 방법이지만, Claude API에는 아예 이걸 위한 기능이 따로 있다. extended thinking(확장된 사고) 이다.

뭐가 다른가

켜면 Claude가 최종 답을 내기 전에 내부적으로 추론 과정을 먼저 생성한다. 사람이 어려운 문제를 풀 때 스크래치 종이에 끄적이는 것과 비슷하다. 이 추론이 응답에 thinking 블록으로 따로 담겨 오고, 그 다음에 진짜 답변인 text 블록이 나온다.

핵심은 budget_tokens다. 추론에 쓸 토큰 예산을 내가 정해준다. 예산이 크면 더 오래 곱씹고, 작으면 빨리 결론 낸다.

써보기

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

const client = new Anthropic();

const msg = await client.messages.create({
  model: 'claude-opus-4-8',
  max_tokens: 16000,
  thinking: {
    type: 'enabled',
    budget_tokens: 10000, // 추론에 쓸 예산
  },
  messages: [
    {
      role: 'user',
      content: '37 * 43에서 한 자리씩 곱셈이 몇 번 일어나는지 세고, 최종 곱도 구해줘.',
    },
  ],
});

for (const block of msg.content) {
  if (block.type === 'thinking') {
    console.log('[추론]', block.thinking);
  } else if (block.type === 'text') {
    console.log('[답변]', block.text);
  }
}

budget_tokensmax_tokens보다 작아야 한다. 답변에 쓸 여유를 남겨둬야 하니까. 나는 보통 전체의 절반 정도를 추론에 배정한다.

실제로 쓰면서 알게 된 것

몇 가지 걸렸던 부분.

  • 쉬운 질문엔 오히려 손해다. "오늘 날씨 알려줘" 같은 데 켜면 토큰만 더 쓰고 응답도 느려진다. 진짜 어려운 추론 문제에만 켜는 게 맞다.
  • thinking 블록을 대화에 그대로 돌려줘야 한다. 멀티턴 대화나 tool use를 섞을 때, 이전 응답의 thinking 블록을 다음 요청 히스토리에 빼먹지 말고 넣어야 한다. 잘라내면 서명 검증에서 에러가 난다.
  • temperature를 못 만진다. extended thinking을 켜면 temperature 같은 샘플링 파라미터가 제한된다. 그동안 온도로 창의성 조절하던 습관이 있으면 당황할 수 있다.

정리

extended thinking은 "생각을 더 하게 하는" 스위치다. 복잡한 수학, 다단계 코드 분석, 조건이 꼬인 판단 같은 데서 답 품질이 눈에 띄게 올라간다. 대신 쉬운 요청엔 켜지 말고, thinking 블록은 히스토리에 꼭 유지하자. 이 두 가지만 지키면 어려운 문제에서 든든한 한 방이 된다.