⚡ 중급2026-05-076분
Claude가 틀린 답을 낼 때: Chain-of-Thought로 추론 과정 끄집어내기
복잡한 문제에서 Claude가 엉뚱한 결과를 반환할 때, CoT 프롬프트로 중간 추론 단계를 명시하면 정확도가 눈에 띄게 올라갑니다. few-shot 예시와 역할 지정을 함께 쓰면 효과가 배가됩니다.
prompt-engineeringchain-of-thoughtfew-shot
왜 단순 질문은 실패하는가
Claude에게 "3개 상품의 할인가 합계를 구해줘"처럼 단순히 묻으면, 내부 계산 과정 없이 바로 숫자를 출력하다가 연산 오류가 생깁니다. 모델은 토큰을 순차 예측하기 때문에 '생각하는 공간'을 프롬프트 안에 명시적으로 만들어줘야 합니다.
CoT + few-shot + 역할 지정 3단 콤보
아래 TypeScript 예시는 세 기법을 한 번에 적용합니다.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
async function calcWithCoT(items: { name: string; price: number; discount: number }[]) {
const itemList = items
.map((i) => `- ${i.name}: 정가 ${i.price}원, 할인율 ${i.discount}%`)
.join("\n");
const message = await client.messages.create({
model: "claude-haiku-4-5",
max_tokens: 1024,
system:
// 역할 지정
"당신은 꼼꼼한 재무 계산 전문가입니다. " +
"반드시 단계별로 계산 과정을 먼저 서술한 뒤 최종 답을 제시하세요.",
messages: [
{
role: "user",
// few-shot 예시
content:
`예시:\n` +
`상품: A 정가 10000원 할인율 10%\n` +
`풀이: 10000 × (1 - 0.10) = 9000원\n` +
`답: 9000원\n\n` +
// 실제 문제
`이제 아래 상품들의 할인가 합계를 같은 방식으로 구해주세요.\n${itemList}`,
},
],
});
const result = message.content[0];
if (result.type === "text") {
console.log(result.text);
}
}
calcWithCoT([
{ name: "노트북 파우치", price: 25000, discount: 15 },
{ name: "USB 허브", price: 38000, discount: 20 },
{ name: "마우스패드", price: 12000, discount: 5 },
]);
포인트
system프롬프트에서 역할('재무 계산 전문가')과 출력 형식('단계 먼저, 답 나중')을 동시에 규정합니다.user메시지 앞부분의 few-shot 예시가 모델에게 원하는 포맷을 보여줍니다.- 두 규칙이 충돌하지 않도록 system과 user 지시를 일관성 있게 작성하세요.
언제 CoT를 쓰고 언제 생략할까
| 상황 | 권장 여부 | |---|---| | 다단계 수학·논리 문제 | ✅ 필수 | | 코드 버그 원인 분석 | ✅ 권장 | | 단순 번역·요약 | ❌ 오버헤드만 증가 | | 창의적 글쓰기 | ❌ 흐름 방해 |
비용 주의: CoT는 출력 토큰을 2~4배 늘립니다. 반복 호출 시
claude-haiku-4-5처럼 저비용 모델을 선택하거나max_tokens를 적절히 제한하세요.
적용 체크리스트
- [ ] system 프롬프트에 역할과 출력 순서('과정 → 답')를 명시했는가?
- [ ] few-shot 예시가 실제 문제와 동일한 형식을 사용하는가?
- [ ] 예시 개수는 1~3개로 제한해 토큰 낭비를 줄였는가?
- [ ] 단순 작업에는 CoT를 제거해 응답 속도를 확보했는가?
- [ ] 응답에서 '최종 답' 부분만 파싱하는 후처리 로직을 준비했는가?