k
korAI
중급 전체
중급2026-05-286분

AI가 틀린 답을 내놓을 때 — Chain-of-Thought로 사고 과정 강제하기

복잡한 추론 문제에서 Claude가 오답을 반복한다면, CoT 프롬프트로 단계별 사고를 유도하면 정확도가 크게 올라갑니다. 언제, 어떻게 적용할지 실전 패턴을 정리합니다.

prompt-engineeringchain-of-thoughtfew-shot

왜 CoT가 필요한가?

단순 질문에는 직접 답변이 빠르지만, 다단계 계산·논리 추론·조건 분기가 섞인 문제에서는 모델이 중간 과정을 생략하면서 오류를 냅니다. Chain-of-Thought(CoT)는 모델에게 "답 전에 생각부터 써라"고 지시해 내부 추론을 외부로 드러내는 기법입니다.

핵심 효과:

  • 오답률 감소 (특히 수학·코드 디버깅·법률 해석)
  • 중간 추론이 보이므로 어디서 틀렸는지 디버깅 가능
  • 같은 모델로 더 어려운 문제를 해결

세 가지 CoT 패턴 비교

| 패턴 | 프롬프트 예시 | 적합한 상황 | |------|-------------|------------| | Zero-shot CoT | "단계별로 생각하세요." | 빠른 적용, 간단한 추론 | | Few-shot CoT | 예시 문제+풀이 2~3개 제공 | 도메인 특화, 형식 통일 | | Self-consistency | 동일 질문 N회 → 다수결 | 정확도 최우선, 비용 감수 |


실전 코드: Few-shot CoT + claude-sonnet-4-6

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

const client = new Anthropic();

const COT_SYSTEM = `당신은 단계별 추론 전문가입니다.
반드시 다음 형식으로 답하세요:
<thinking>
  1. [첫 번째 분석]
  2. [두 번째 분석]
  ...
</thinking>
<answer>[최종 답변]</answer>`;

const FEW_SHOT_EXAMPLES = [
  {
    role: "user" as const,
    content: "창고에 사과 48개가 있습니다. 6명이 똑같이 나눠 가진 뒤, 각자 3개씩 먹었습니다. 남은 사과는 총 몇 개인가요?",
  },
  {
    role: "assistant" as const,
    content: `<thinking>
  1. 48 ÷ 6 = 8개씩 분배
  2. 각자 3개 섭취 → 8 - 3 = 5개 잔여
  3. 6명 × 5개 = 30개
</thinking>
<answer>30개</answer>`,
  },
];

async function solveWithCoT(problem: string): Promise<string> {
  const response = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 1024,
    system: COT_SYSTEM,
    messages: [
      ...FEW_SHOT_EXAMPLES,
      { role: "user", content: problem },
    ],
  });

  const text =
    response.content[0].type === "text" ? response.content[0].text : "";

  // <answer> 태그만 추출해 최종 답변 반환
  const match = text.match(/<answer>(.*?)<\/answer>/s);
  return match ? match[1].trim() : text;
}

// 실행
const problem =
  "팀원 4명이 프로젝트를 완료하는 데 12일 걸립니다. 팀원을 3명 추가하면 며칠 걸릴까요?";
solveWithCoT(problem).then((answer) => console.log("정답:", answer));

포인트:

  • <thinking> 블록을 파싱하면 디버깅용 로그로 활용 가능
  • Few-shot 예시는 실제 도메인 데이터로 교체할수록 효과 상승
  • 답변 형식이 중요한 서비스라면 XML 태그보다 JSON 스키마 지정 권장

적용 전 체크리스트

  • [ ] 문제가 다단계 추론을 요구하는가? (단순 사실 질문엔 CoT 불필요)
  • [ ] System 프롬프트에 출력 형식을 명시했는가?
  • [ ] Few-shot 예시가 실제 입력과 같은 난이도·형식인가?
  • [ ] <thinking> 로그를 저장해 오답 패턴을 분석하고 있는가?
  • [ ] 토큰 소비가 늘어나므로 max_tokens를 여유 있게 설정했는가?