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

AI가 왜 틀렸는지 스스로 말하게 만드는 CoT 디버깅 기법

Chain-of-Thought 프롬프트로 Claude의 추론 과정을 외부로 꺼내면, 오답의 원인을 즉시 파악하고 수정할 수 있다. 단순히 '답을 내놔'가 아니라 '과정을 보여줘'로 바꾸는 것만으로 정확도가 크게 달라진다.

chain-of-thoughtprompt-engineeringdebugging

CoT가 필요한 순간

기초 단계에서는 Claude에게 질문을 던지고 답만 받는다. 그런데 복잡한 로직(수학 계산, 다단계 조건 분기, 법률·의료 판단 등)에서는 틀린 답이 나와도 왜 틀렸는지 알 수 없다. CoT(Chain-of-Thought)는 모델이 중간 추론 단계를 텍스트로 출력하도록 유도해, 사람이 오류 지점을 정확히 짚을 수 있게 한다.

핵심 원리: 토큰을 '생각하는 공간'으로 사용하게 하면 모델은 더 정확한 답에 도달한다.

프롬프트 설계 패턴 3가지

| 패턴 | 프롬프트 예시 | 효과 | |------|-------------|------| | 단순 CoT | "단계별로 생각한 뒤 답하라" | 기본 정확도 향상 | | 구조적 CoT | "① 가정 ② 추론 ③ 결론 순서로" | 출력 파싱 용이 | | 자기검증 CoT | "답을 낸 뒤 반례를 하나 찾아라" | 오류 자가수정 |

아래 코드는 구조적 CoT를 Anthropic SDK로 구현하고, 추론 섹션만 파싱해 로그로 남기는 예제다.

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

const client = new Anthropic();

const COT_SYSTEM = `
당신은 단계별 추론을 반드시 출력해야 합니다.
모든 답변을 다음 XML 태그로 감싸세요:
<reasoning>여기에 단계별 추론</reasoning>
<answer>여기에 최종 답변</answer>
`.trim();

async function askWithCoT(userQuestion: string) {
  const response = await client.messages.create({
    model: "claude-haiku-4-5",
    max_tokens: 1024,
    system: COT_SYSTEM,
    messages: [{ role: "user", content: userQuestion }],
  });

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

  // 추론 과정과 최종 답 분리
  const reasoning = raw.match(/<reasoning>([\s\S]*?)<\/reasoning>/)?.[1]?.trim();
  const answer    = raw.match(/<answer>(([\s\S]*?))<\/answer>/)?.[1]?.trim();

  if (!reasoning || !answer) {
    throw new Error("CoT 형식 파싱 실패 — 시스템 프롬프트를 확인하세요");
  }

  console.log("[추론 과정]\n", reasoning);
  console.log("\n[최종 답변]\n", answer);

  return { reasoning, answer };
}

// 사용 예
awkWithCoT(
  "월급 320만원, 소득세율 15%, 4대보험 9%일 때 실수령액은?"
).catch(console.error);

실전 활용 및 주의사항

언제 CoT를 켜야 하나?

  • 수치 계산·비교가 포함된 경우
  • 여러 조건이 중첩된 비즈니스 로직
  • 답에 대한 근거를 사용자에게 보여줘야 하는 경우

언제 꺼야 하나?

  • 단순 분류·번역·요약 → 토큰 낭비
  • 응답 속도가 UX에 직결되는 실시간 채팅

claude-haiku-4-5는 속도 우선, claude-sonnet-4-6은 복잡한 추론 우선으로 모델을 선택하라.


체크리스트

  • [ ] 시스템 프롬프트에 <reasoning> 태그 형식을 명시했다
  • [ ] 파싱 실패 시 예외 처리를 추가했다
  • [ ] CoT가 필요 없는 단순 엔드포인트에서는 제거해 토큰을 아꼈다
  • [ ] 추론 로그를 DB에 저장해 반복 오류 패턴을 분석하고 있다
  • [ ] 자기검증 패턴(반례를 찾아라)을 고위험 판단에 적용했다