Home [AI 실전] Zero-shot, Few-shot, CoT 비교 및 선택 가이드
Post
Cancel

[AI 실전] Zero-shot, Few-shot, CoT 비교 및 선택 가이드

1. 기법 비교 요약

구분Zero-shotFew-shotChain of Thought (CoT)
특징빠르고 간단함출력 형식 준수 필요, 일관성 유지논리적 추론 필요, 복잡한 계산
예시 필요❌ 불필요✅ 2~5개❌ 불필요
복잡도낮음중간높음
정확도낮음높음매우 높음
일관성낮음매우 높음높음
토큰 수적음중간많음
비용낮음중간높음
지연 시간빠름중간느림
적합한 작업단순 지식 검색, 짧은 번역데이터 추출, 스타일 모방, JSON 포맷팅알고리즘 설계, 아키텍처 제안, 복잡한 비즈니스 로직

2. 선택 가이드 (Decision Tree)

의사결정 로직

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
작업이 주어짐
    │
    ▼
┌─────────────────────┐
│ 단순 지식 질문인가?  │
│ (검색, 번역, 설명)   │
└────┬─────────────────┘
     │
     ├─ YES → Zero-shot
     │         예: "JPA 영속성 컨텍스트 설명해줘"
     │
     └─ NO
        │
        ▼
   ┌─────────────────────┐
   │ 특정 포맷/JSON이     │
   │ 필요한가?            │
   └────┬─────────────────┘
        │
        ├─ YES → Few-shot
        │         예: "우리 팀 API Response 형식으로 작성해줘"
        │         (예시 2~3개 제공)
        │
        └─ NO
           │
           ▼
      ┌─────────────────────┐
      │ 단계별 추론이       │
      │ 필요한가?            │
      └────┬─────────────────┘
           │
           ├─ YES → Chain of Thought
           │         예: "주문 취소 로직 구현해줘"
           │         "단계별로 생각해봐:"
           │
           └─ NO
              │
              ▼
         ┌─────────────────────┐
         │ 매우 복잡하고 긴    │
         │ 작업인가?            │
         └────┬─────────────────┘
              │
              └─ YES → CoT + Few-shot (혼합)
                       예: "우리 팀 스타일로 복잡한 로직 구현해줘"
                       (Few-shot 예시 + CoT 단계별 사고)

코드로 표현한 선택 로직

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class PromptTechniqueSelector {
    
    public PromptTechnique selectTechnique(Task task) {
        
        // 1. Zero-shot: 단순 지식 질문
        if (task.isSimpleKnowledgeQuery()) {
            return PromptTechnique.ZERO_SHOT;
            // 예시: "JPA 영속성 컨텍스트 설명해줘"
        }
        
        // 2. Few-shot: 특정 포맷/JSON 필요
        if (task.requiresSpecificFormat() || task.needsJSONStructure()) {
            return PromptTechnique.FEW_SHOT;
            // 예시: "우리 팀 API Response 형식으로 작성해줘"
        }
        
        // 3. CoT: 단계별 추론 필요
        if (task.requiresStepByStepReasoning()) {
            return PromptTechnique.CHAIN_OF_THOUGHT;
            // 예시: "주문 취소 로직 구현해줘 (단계별로 생각해봐)"
        }
        
        // 4. 혼합: 매우 복잡하고 긴 작업
        if (task.isVeryComplex() && task.requiresConsistency()) {
            return PromptTechnique.COT_WITH_FEW_SHOT;
            // 예시: "우리 팀 스타일로 복잡한 로직 구현해줘"
        }
        
        return PromptTechnique.ZERO_SHOT; // default
    }
}

3. Cost & Latency 고려사항

토큰 수 비교

기법입력 토큰출력 토큰총 토큰상대 비용
Zero-shot50~200100~500150~7001x (기준)
Few-shot500~2000100~500600~25003~4x
CoT200~500500~3000700~35004~5x
CoT + Few-shot1000~3000500~30001500~60008~10x

실무 팁: Iterative Approach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 1단계: Zero-shot으로 시작 (최소 비용)
String result1 = llm.generate("User API 만들어줘");
// → 기본 코드 생성 (150 토큰)

// 2단계: 결과가 마음에 안들면 Few-shot으로 개선
if (!isSatisfied(result1)) {
    String result2 = llm.generate("""
        다음 스타일로 개선해줘:
        [예시 1]
        [예시 2]
        [내 코드] """ + result1);
    // → 개선된 코드 (800 토큰)
}

// 3단계: 복잡한 로직이면 CoT 추가
if (requiresComplexLogic(result2)) {
    String result3 = llm.generate("""
        이 코드를 단계별로 검토하고 개선해줘:
        [코드] """ + result2 + """
        
        1. 요구사항 분석
        2. 예외 케이스 정리
        3. 최종 개선 코드
        """);
    // → 완성도 높은 코드 (2000 토큰)
}

비용 최적화 전략

  • 처음엔 Zero-shot으로 시도: 빠르고 저렴하게 프로토타입 생성
  • 실패 시 Few-shot으로 고도화: 일관성과 정확도 향상
  • 복잡한 작업은 CoT 적용: 체계적 접근으로 버그 감소
  • 반복 개선보다는 처음부터 적절한 기법 선택: 총 비용 절감

4. 실전 예시

Zero-shot 적합 사례

1
2
3
4
5
6
7
// ✅ 적합: 단순 지식 검색
String prompt = "JPA 영속성 컨텍스트가 뭔지 설명해줘";
// → 빠르고 정확한 설명 (150 토큰)

// ✅ 적합: 짧은 번역
String prompt2 = "다음 문장을 영어로 번역해줘: '안녕하세요'";
// → 즉시 번역 (100 토큰)

Few-shot 적합 사례

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// ✅ 적합: JSON 포맷팅
String prompt = """
다음 예시를 참고하여 동일한 형식으로 작성해줘:

[예시 1]
입력: "사용자 정보 조회"
출력: {
    "success": true,
    "data": {"id": 1, "name": "홍길동"},
    "timestamp": "2024-01-15T10:30:00"
}

[예시 2]
입력: "주문 목록 조회"
출력: {
    "success": true,
    "data": [{"id": 1, "amount": 10000}],
    "timestamp": "2024-01-15T10:31:00"
}

[내 작업]
입력: "상품 상세 조회"
출력: ?
""";
// → 일관된 JSON 형식 (800 토큰)

CoT 적합 사례

1
2
3
4
5
6
7
8
9
10
11
// ✅ 적합: 복잡한 비즈니스 로직
String prompt = """
주문 취소 로직을 구현해줘.

단계별로 생각해봐:
1. 비즈니스 요구사항 분석 (재고 복구, 결제 취소, 포인트 복구)
2. 예외 상황 정리 (배송 시작, 기한 초과)
3. 데이터 정합성 (트랜잭션 범위)
4. 최종 코드 작성
""";
// → 완성도 높은 코드 (2000 토큰)

혼합 사용 사례

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// ✅ 적합: 복잡하고 일관성도 중요한 작업
String prompt = """
우리 팀의 에러 핸들링 패턴으로 작성해줘.

[예시 1: UserService]
@Service
public class UserService {
    public UserDto createUser(SignupRequest request) {
        try {
            // 비즈니스 로직
            return UserDto.from(user);
        } catch (DuplicateEmailException e) {
            throw new BusinessException(ErrorCode.DUPLICATE_EMAIL, e);
        }
    }
}

[내 작업]
PaymentService의 결제 처리 메서드를 만들어줘.

단계별로 생각해봐:
1. 어떤 검증이 필요한가?
2. 어떤 예외가 발생할 수 있는가?
3. 위 예시 패턴을 따라 코드 작성
""";
// → Few-shot 일관성 + CoT 완성도 (2500 토큰)

5. 선택 체크리스트

작업 전 다음 질문으로 기법 선택:

  1. 단순 지식 질문인가? → Zero-shot
  2. 특정 포맷/JSON이 필요한가? → Few-shot
  3. 단계별 추론이 필요한가? → CoT
  4. 복잡하고 일관성도 중요한가? → CoT + Few-shot

참고 자료

  • Chain-of-Thought Prompting Paper: https://arxiv.org/abs/2201.11903
  • Few-shot Learning: https://arxiv.org/abs/2005.14165
  • OpenAI Prompt Engineering: https://platform.openai.com/docs/guides/prompt-engineering
  • Prompt Engineering Guide: https://www.promptingguide.ai/

참고 자료

  • Chain-of-Thought Prompting Paper: https://arxiv.org/abs/2201.11903
  • Few-shot Learning: https://arxiv.org/abs/2005.14165
  • OpenAI Prompt Engineering: https://platform.openai.com/docs/guides/prompt-engineering
  • Prompt Engineering Guide: https://www.promptingguide.ai/
Contents

[AI 실전] Few-Shot Learning과 Chain of Thought (CoT) - 고급 기법

[AI 실전] System Prompting과 자동화 - .cursorrules 설정