k
korAI
중급 전체
중급2026-09-046분

AI가 논리를 건너뛸 때: Chain-of-Thought로 추론 과정 강제하기

복잡한 문제에서 Claude가 결론만 툭 던질 때, CoT 프롬프트를 적용하면 단계별 추론을 유도해 정확도와 검증 가능성을 동시에 높일 수 있습니다.

prompt-engineeringchain-of-thoughtreasoning

왜 CoT가 필요한가?

Claude 같은 LLM은 단순 질문엔 잘 답하지만, 다단계 계산·논리·인과 추론이 필요한 문제에서는 중간 과정을 생략하고 틀린 결론을 자신 있게 내놓는 경향이 있습니다. Chain-of-Thought(CoT) 기법은 모델에게 '답 전에 생각을 펼쳐라' 라고 명시적으로 요청해 이 문제를 완화합니다.

Few-shot CoT vs. Zero-shot CoT

| 방식 | 프롬프트 형태 | 적합한 상황 | |---|---|---| | Zero-shot CoT | "단계별로 생각해 보세요." 한 줄 추가 | 빠른 실험, 범용 질문 | | Few-shot CoT | 예시 Q→추론→A 2~3개 삽입 | 도메인 특화, 출력 포맷 고정 필요 시 |

아래는 Anthropic TypeScript SDK로 Zero-shot CoT를 적용하는 최소 예제입니다.

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

const client = new Anthropic();

async function solveWithCoT(problem: string): Promise<void> {
  const response = await client.messages.create({
    model: "claude-haiku-4-5",
    max_tokens: 1024,
    system:
      "당신은 꼼꼼한 분석가입니다. " +
      "문제를 풀기 전에 반드시 단계별 추론(Step-by-step reasoning)을 먼저 작성하고, " +
      "마지막 줄에 '최종 답:' 으로 결론을 명시하세요.",
    messages: [
      {
        role: "user",
        content: problem,
      },
    ],
  });

  const content = response.content[0];
  if (content.type === "text") {
    console.log(content.text);

    // 최종 답만 파싱
    const finalAnswer = content.text
      .split("\n")
      .find((line) => line.startsWith("최종 답:"));
    console.log("\n--- 파싱된 결론 ---");
    console.log(finalAnswer ?? "최종 답 줄을 찾지 못했습니다.");
  }
}

const problem = `
어떤 창고에 박스가 3층으로 쌓여 있습니다.
1층: 박스 12개, 2층: 1층의 절반, 3층: 2층보다 3개 적음.
전체 박스 수는?
`;

solveWithCoT(problem);

실전 적용 팁

출력 파싱을 안정적으로 만들려면 시스템 프롬프트에서 구분자(예: <reasoning>, <answer> XML 태그)를 강제하세요. Claude는 지시한 태그를 잘 따르므로 정규식 파싱보다 훨씬 견고합니다.

<reasoning> ... </reasoning>
<answer> ... </answer>

temperature 조정: CoT는 결정론적 추론이 목적이므로 temperature: 0 ~ 0.3 범위를 권장합니다. 창의적 브레인스토밍이 아님을 명심하세요.

체크리스트

  • [ ] 시스템 프롬프트에 "단계별로" 또는 "추론 후 결론" 표현을 명시했는가?
  • [ ] Few-shot 예시가 필요한 도메인이라면 Q→추론→A 예시를 2개 이상 삽입했는가?
  • [ ] 출력 파싱을 위해 XML 태그 또는 고정 접두사("최종 답:")를 지정했는가?
  • [ ] temperature를 0.3 이하로 설정해 추론 일관성을 확보했는가?
  • [ ] 긴 추론 체인이 예상된다면 max_tokens를 충분히(1024+) 늘렸는가?