k
korAI
중급 전체
중급2026-07-156분

Claude가 '왜'를 설명하게 만드는 CoT 프롬프트 기법

Chain-of-Thought 프롬프팅으로 Claude가 단계별 추론 과정을 출력하게 유도하면, 복잡한 문제에서 정확도가 크게 올라갑니다. Few-shot 예시와 역할 지정을 함께 쓰면 효과가 배가됩니다.

prompt-engineeringchain-of-thoughtfew-shot

왜 CoT가 필요한가?

단순히 "답을 알려줘"라고 하면 Claude는 최단 경로로 응답합니다. 하지만 수학 계산, 법률 해석, 버그 분석처럼 중간 추론이 틀리면 결과도 틀리는 문제에서는 모델이 '생각하는 과정'을 텍스트로 펼치도록 강제해야 합니다. CoT는 모델의 내부 계산을 출력 토큰으로 외부화하는 전략입니다.

Few-shot + 역할 지정 + CoT 조합

세 가지를 함께 쓰는 것이 핵심입니다.

  • 역할 지정: 당신은 시니어 백엔드 엔지니어입니다.처럼 페르소나를 부여하면 응답 스타일과 어휘 수준이 고정됩니다.
  • Few-shot 예시: 원하는 추론 포맷을 1~2개 보여줍니다.
  • CoT 트리거: 단계별로 생각한 뒤 최종 답을 주세요.를 프롬프트 끝에 붙입니다.
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const FEW_SHOT_EXAMPLE = `
문제: 배열에서 두 번째로 큰 값을 찾아라. 입력: [3, 1, 4, 1, 5, 9, 2, 6]

추론 과정:
1. 배열을 내림차순 정렬하면 [9, 6, 5, 4, 3, 2, 1, 1]
2. 중복을 제거하면 [9, 6, 5, 4, 3, 2, 1]
3. 인덱스 1의 값 = 6

최종 답: 6
`;

async function solveWithCoT(problem: string): Promise<void> {
  const response = await client.messages.create({
    model: "claude-haiku-4-5",
    max_tokens: 1024,
    system:
      "당신은 시니어 알고리즘 엔지니어입니다. 항상 추론 과정을 단계별로 먼저 서술한 뒤 최종 답을 제시합니다.",
    messages: [
      {
        role: "user",
        content: `아래 예시처럼 단계별로 추론하세요.\n\n예시:\n${FEW_SHOT_EXAMPLE}\n\n새 문제: ${problem}\n\n단계별로 생각한 뒤 최종 답을 주세요.`,
      },
    ],
  });

  const content = response.content[0];
  if (content.type === "text") {
    console.log("=== CoT 응답 ===");
    console.log(content.text);
    console.log(`\n사용 토큰: ${response.usage.input_tokens} in / ${response.usage.output_tokens} out`);
  }
}

solveWithCoT(
  "리스트 [7, 2, 8, 3, 8, 1]에서 중앙값을 구하라."
);

실전 적용 시 주의사항

claude-haiku-4-5는 빠르고 저렴하지만 매우 복잡한 다단계 추론에서는 claude-sonnet-4-6으로 업그레이드를 고려하세요. CoT는 출력 토큰을 늘리므로 max_tokens를 충분히 설정해야 추론 중간에 잘리지 않습니다.


적용 체크리스트

  • [ ] system 프롬프트에 역할(페르소나)을 명시했다
  • [ ] user 메시지에 few-shot 예시를 1개 이상 포함했다
  • [ ] "단계별로 생각한 뒤" 같은 CoT 트리거 문구를 붙였다
  • [ ] max_tokens를 1024 이상으로 설정해 추론이 잘리지 않게 했다
  • [ ] 복잡도가 높으면 claude-sonnet-4-6 전환을 검토했다