기초를 넘어: 한계 극복 기법들
앞서 배운 CoT, Few-shot, 역할 부여는 강력하지만 한계가 있습니다.
- 최신 정보가 없음 → LLM 지식 컷오프
- 계산이 틀릴 수 있음 → 수학적 오류
- 같은 질문에 다른 답 → 일관성 부족
- 프롬프트 작성이 어려움 → 설계 비용
이 한계를 극복하는 고급 기법들을 살펴봅니다.
기법 1: ReAct (Reason + Act)
**추론(Reason)**과 **행동(Act)**을 교차하며 문제를 해결하는 패턴입니다.
ReAct 프롬프트 구조
다음 형식으로 문제를 해결해줘:
생각: [현재 상황 분석]
행동: [실행할 작업] (검색("쿼리"), 계산("수식"), 읽기("파일"))
관찰: [행동 결과]
생각: [결과 해석]
... (반복)
최종 답변: [결론]
---
질문: 2024년 한국 반도체 수출 금액과 2023년 대비 변화율은?
ReAct는 AI 에이전트 구현의 핵심 패턴이기도 합니다. 도구(검색, 계산, API)를 LLM과 연결할 때 사용합니다.
기법 2: 자기 일관성 (Self-Consistency)
같은 질문을 여러 번 독립적으로 추론시키고 다수결로 최종 답변을 결정합니다.
자기 일관성 활용 예시
아래 문제를 3가지 다른 방식으로 각각 독립적으로 풀어줘.
각 풀이는 서로 참조하지 않고 독립적으로 작성해.
마지막에 3개의 답변을 비교하고 다수결로 최종 답을 결정해줘.
문제: [복잡한 추론 문제]
단일 추론보다 신뢰도가 높아지지만 비용(토큰)이 N배 됩니다. 중요한 의사결정에만 활용하세요.
기법 3: 메타 프롬프팅
프롬프트를 생성하는 프롬프트입니다. LLM에게 좋은 프롬프트를 설계하게 시킵니다.
메타 프롬프팅 예시
나는 이런 작업을 하려고 해:
"고객 리뷰 텍스트에서 감정(긍정/부정/중립)과
주요 키워드를 추출하고 구조화된 JSON으로 출력"
이 작업을 위한 최적의 시스템 프롬프트와 사용자 프롬프트 템플릿을
설계해줘. 실제 예시 2개도 포함해줘.
활용 상황:
- 프롬프트 작성에 익숙하지 않을 때
- 새로운 작업 유형의 프롬프트가 필요할 때
- 기존 프롬프트 품질을 개선하고 싶을 때
기법 4: 프롬프트 체이닝
복잡한 작업을 여러 단계로 나눠 순차적으로 처리합니다.
체이닝 예시: 컨텐츠 파이프라인
# 의사코드
step1 = llm("다음 원문에서 핵심 사실만 3개 추출: {raw_text}")
step2 = llm(f"이 3가지 사실을 기반으로 블로그 개요 작성: {step1}")
step3 = llm(f"이 개요로 2000자 블로그 글 작성: {step2}")
step4 = llm(f"이 글에서 SNS용 요약 트윗 3개 생성: {step3}")
각 단계의 출력이 다음 단계의 입력이 됩니다.
기법 5: 역할 역전 (Flipped Interaction)
LLM이 질문을 받는 것이 아니라 사용자에게 질문하게 만듭니다.
나는 [목표]를 달성하고 싶어. 최적의 결과를 위해
나에게 필요한 정보를 질문해줘. 충분한 정보를 얻으면
그 때 [결과물]을 생성해줘.
초안을 먼저 받는 것보다 맥락 수집 후 생성이 훨씬 정확한 결과를 냅니다.
기법 선택 가이드
실전: 기법 결합하기
실제 AI 서비스에서는 여러 기법을 동시에 씁니다.
[시스템 프롬프트] ← pe-04
당신은 수석 전략 컨설턴트입니다.
[역할 역전] ← 이번 편
클라이언트의 비즈니스 상황을 파악하기 위해
먼저 5개 핵심 질문을 해주세요.
[CoT 유도] ← pe-03
충분한 정보 수집 후, 단계별로 분석하여
전략 보고서를 작성해주세요.
[출력 형식]
보고서는 다음 구조로 작성합니다:
1. 현황 분석
2. 핵심 문제 정의
3. 전략 옵션 3가지 (장단점 비교)
4. 권고안
프롬프트 엔지니어링 전체 정리
| 기법 | 효과 | 비용 |
|---|---|---|
| 명확성·구체성 | 기본 품질 향상 | 낮음 |
| 역할+Few-shot | 일관성·전문성 | 중간 |
| CoT | 추론 정확도 | 중간 |
| 시스템 프롬프트 | 서비스 일관성 | 낮음 |
| 자기 일관성 | 신뢰도 최대화 | 높음 (N배) |
| ReAct | 도구 활용 | 높음 |
| 체이닝 | 복잡한 작업 | 높음 |
이것으로 프롬프트 엔지니어링 시리즈를 마칩니다. 다음은 LLM API 개발 — 실제 코드로 LLM을 제어하고 서비스를 만드는 실습을 시작합니다.