⚡ 중급2026-06-266분
AI가 틀린 답을 낼 때 — Chain-of-Thought로 추론 과정을 끌어내는 법
복잡한 문제에서 Claude가 엉뚱한 결론을 내놓는다면, 답이 아닌 '사고 과정'을 먼저 요청하는 CoT 기법으로 정확도를 극적으로 높일 수 있습니다.
prompt-engineeringchain-of-thoughtreasoning
왜 CoT가 필요한가
LLM은 토큰을 순서대로 생성하기 때문에, 결론을 먼저 쓰도록 유도하면 그 결론에 맞춰 근거를 짜맞추는 경향이 생깁니다. Chain-of-Thought(CoT)는 모델이 중간 추론 단계를 명시적으로 출력하게 만들어, 각 단계에서 오류를 스스로 교정할 기회를 줍니다. 특히 수학 계산, 다단계 논리, 법률·의료 판단처럼 순서가 중요한 문제에서 효과가 두드러집니다.
Zero-shot CoT vs Few-shot CoT
| 방식 | 프롬프트 예시 | 적합한 상황 |
|---|---|---|
| Zero-shot CoT | "단계별로 생각해보세요." 한 줄 추가 | 빠른 프로토타이핑, 범용 질문 |
| Few-shot CoT | 올바른 추론 예시 2~3개를 직접 제공 | 도메인 특화, 형식 일관성이 중요한 경우 |
Few-shot CoT는 예시의 추론 스타일까지 학습시키므로, 동일한 포맷으로 반복 처리해야 하는 배치 작업에 특히 유리합니다.
TypeScript 코드 예시 — Few-shot CoT 구현
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const FEW_SHOT_EXAMPLES = `
Q: 창고에 박스가 24개 있습니다. 오전에 절반을 출고하고, 오후에 6개를 입고했습니다. 남은 박스는?
생각: 처음 24개 → 절반 출고: 24 ÷ 2 = 12개 남음 → 6개 입고: 12 + 6 = 18개
답: 18개
Q: 직원 5명이 하루 8시간씩 3일 동안 일했습니다. 총 근무 시간은?
생각: 1명의 하루 근무 = 8시간 → 3일 = 8 × 3 = 24시간 → 5명 = 24 × 5 = 120시간
답: 120시간
`;
async function solveWithCoT(question: string): Promise<void> {
const response = await client.messages.create({
model: "claude-haiku-4-5",
max_tokens: 512,
messages: [
{
role: "user",
content: `다음 예시처럼 단계별 생각 후 답을 제시하세요.\n\n${FEW_SHOT_EXAMPLES}\nQ: ${question}\n생각:`,
},
],
});
const result = response.content[0];
if (result.type === "text") {
console.log("=== 추론 과정 + 답 ===");
console.log(result.text);
console.log(`\n토큰 사용: ${response.usage.input_tokens} in / ${response.usage.output_tokens} out`);
}
}
// 실행 예시
solveWithCoT(
"팀원 3명이 각각 하루에 보고서 4장을 작성합니다. 5일 후 총 몇 장이 완성되나요?"
);
팁:
생각:으로 끝나는 프롬프트는 모델이 추론 토큰을 먼저 채우도록 강제 앵커 역할을 합니다.답:레이블을 파싱 포인트로 활용하면 최종 결론만 추출하기도 쉽습니다.
적용 체크리스트
- [ ] 프롬프트 마지막에
"단계별로 생각한 뒤 답하세요"를 추가했는가 - [ ] 도메인 특화 문제라면 Few-shot 예시 2개 이상을 준비했는가
- [ ] 예시의 추론 스타일이 실제 문제와 동일한 패턴인지 확인했는가
- [ ] 최종 답 파싱을 위해
답:같은 고정 레이블을 설정했는가 - [ ] CoT 결과물의 중간 단계가 논리적으로 연결되는지 샘플 10건 이상 검증했는가