LLM프롬프트 엔지니어링 · 3기초

Chain-of-Thought — LLM이 단계별로 생각하게 만들기

LLM프롬프트엔지니어링ChainOfThought추론CoT

LLM도 '급하게 풀면' 틀린다

LLM에게 복잡한 수학 문제나 논리 추론을 던지면 즉답으로 틀리는 경우가 많습니다.

질문: "A 마트에서 사과 3개와 배 2개를 샀습니다. 사과는 개당 800원,
배는 개당 1,500원입니다. 10,000원을 냈을 때 거스름돈은?"

❌ 즉답 방식
→ "1,600원입니다"  (계산 오류)

✅ 단계별 사고 방식
→ 사과 합계: 800 × 3 = 2,400원
   배 합계: 1,500 × 2 = 3,000원
   총합: 2,400 + 3,000 = 5,400원
   거스름돈: 10,000 - 5,400 = 4,600원

"단계별로 생각해줘" — 이 한 마디가 정확도를 크게 높입니다.


Chain-of-Thought(CoT)란?

LLM이 최종 답변을 내기 전에 중간 추론 과정을 명시적으로 거치게 만드는 기법입니다.

flowchart LR
    subgraph STANDARD["일반 프롬프팅"]
        Q1["질문"] --> A1["즉시 답변\n(추론 생략)"]
    end

    subgraph COT["Chain-of-Thought"]
        Q2["질문\n+ '단계별로 생각해줘'"]
        Q2 --> S1["1단계 추론"]
        S1 --> S2["2단계 추론"]
        S2 --> S3["3단계 추론"]
        S3 --> A2["최종 답변\n(신뢰도 높음)"]
    end

CoT 활성화 방법

방법 1: 마법의 주문

문제: [복잡한 문제]

단계별로 생각해서 풀어줘.

또는 영어로:

Let's think step by step.
Think through this carefully.
Show your reasoning.

이 짧은 문구만으로 LLM의 추론 품질이 크게 향상됩니다.


방법 2: Few-shot CoT

예시를 통해 추론 방식 자체를 가르칩니다.

flowchart TB
    subgraph FEWSHOT_COT["Few-shot CoT 구조"]
        direction LR
        E1["예시 1\n문제 + 단계별 풀이 + 답"]
        E2["예시 2\n문제 + 단계별 풀이 + 답"]
        Q["실제 문제"]
    end

    FEWSHOT_COT -->|"패턴 학습"| LLM["LLM"]
    LLM --> OUT["단계별 풀이 + 정확한 답"]
[예시]
질문: 상품 원가가 5,000원이고 30% 마진을 붙이면 판매가는?

풀이:
- 마진 금액 = 5,000 × 0.3 = 1,500원
- 판매가 = 5,000 + 1,500 = 6,500원

답: 6,500원

[실제 문제]
질문: 월급 350만 원에서 소득세 3.3%를 공제하면 실수령액은?

CoT가 효과적인 상황

flowchart TD
    Q["이 문제에 CoT가 필요한가?"]
    
    Q -->|"수학·계산"| Y1["✅ 효과 큼"]
    Q -->|"논리 추론·분석"| Y2["✅ 효과 큼"]
    Q -->|"복잡한 의사결정"| Y3["✅ 효과 큼"]
    Q -->|"단순 번역·요약"| N1["⚠️ 불필요"]
    Q -->|"단순 사실 조회"| N2["⚠️ 오히려 느려짐"]
상황CoT 효과이유
수학 계산⭐⭐⭐⭐⭐중간 계산 검증 가능
논리 퍼즐⭐⭐⭐⭐⭐전제→결론 과정 명시
코드 디버깅⭐⭐⭐⭐오류 원인 단계적 추적
단순 번역추론 과정 불필요

실전 예시: 비즈니스 의사결정

CoT는 수학 문제만이 아니라 복잡한 판단 문제에도 효과적입니다.

상황: 스타트업 A가 Series A 투자를 검토 중입니다.
- 현재 ARR: 5억 원 (전년 대비 200% 성장)
- 팀: 15명, 소진율 월 5,000만 원
- 현금: 3억 원 남음
- 밸류에이션 요구: 100억 원

투자 여부를 단계별로 분석해줘.

단계 1: 재무 건전성 확인
단계 2: 성장률 평가
단계 3: 런웨이 계산
단계 4: 밸류에이션 적정성
단계 5: 종합 판단

자기 검증 CoT: 답을 스스로 확인하게 만들기

flowchart LR
    Q["질문"] --> R["풀이"]
    R --> CHECK["'답이 맞는지\n검증해줘'"]
    CHECK -->|"오류 발견"| FIX["수정된 답변"]
    CHECK -->|"검증 통과"| CONFIRM["✅ 확인된 답변"]
문제를 풀고, 풀이가 끝나면 답이 올바른지 검증하는 단계를 추가해줘.
검증 단계에서 오류가 발견되면 수정해줘.

이 패턴은 LLM이 자신의 실수를 스스로 잡아내게 만듭니다.


Zero-shot CoT vs Few-shot CoT

flowchart LR
    subgraph ZERO["Zero-shot CoT"]
        Z["문제\n+ '단계별로 생각해줘'"]
        Z --> ZR["LLM이 자체 추론\n방식으로 풀이"]
    end

    subgraph FEW["Few-shot CoT"]
        F1["예시 + 풀이 방식"]
        F2["문제"]
        F1 --> F2 --> FR["동일한 추론\n방식으로 풀이"]
    end

    ZERO -->|"장점"| ZP["구현 간단\n예시 불필요"]
    FEW -->|"장점"| FP["원하는 추론\n방식 통제 가능"]

실무에서는 보통 Zero-shot CoT(단계별로 생각해줘)로 시작하고, 결과가 마음에 안 들 때 Few-shot CoT로 전환합니다.


CoT 활용 시 주의사항

flowchart TD
    subgraph CAUTION["주의사항"]
        C1["추론이 그럴듯해 보여도\n결론이 틀릴 수 있음"]
        C2["단계가 많아질수록\n초기 오류가 증폭됨"]
        C3["간단한 문제에 사용하면\n불필요하게 복잡해짐"]
    end
  • 추론 과정을 반드시 검토하세요. 그럴듯한 과정이 잘못된 결론으로 이어질 수 있습니다.
  • 중요한 계산은 별도로 검증하세요.
  • CoT는 추론 과정을 투명하게 만들 뿐, 정확성을 보장하지 않습니다.

정리

개념내용
Chain-of-Thought중간 추론 과정을 명시하는 프롬프팅 기법
Zero-shot CoT"단계별로 생각해줘" 문구만으로 활성화
Few-shot CoT추론 예시를 함께 제공해 방식 통제
자기 검증풀이 후 스스로 답 확인하게 유도
적합한 상황수학·논리·복잡한 의사결정

다음 편에서는 시스템 프롬프트 설계 — LLM의 전반적인 행동 방식을 제어하는 시스템 레벨 프롬프트를 설계하는 방법을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.