LLM프롬프트 엔지니어링 · 5중급

고급 프롬프팅 기법 — ReAct, 자기 일관성, 메타 프롬프팅

LLM프롬프트엔지니어링ReAct자기일관성메타프롬프팅고급기법

기초를 넘어: 한계 극복 기법들

앞서 배운 CoT, Few-shot, 역할 부여는 강력하지만 한계가 있습니다.

  • 최신 정보가 없음 → LLM 지식 컷오프
  • 계산이 틀릴 수 있음 → 수학적 오류
  • 같은 질문에 다른 답 → 일관성 부족
  • 프롬프트 작성이 어려움 → 설계 비용

이 한계를 극복하는 고급 기법들을 살펴봅니다.


기법 1: ReAct (Reason + Act)

**추론(Reason)**과 **행동(Act)**을 교차하며 문제를 해결하는 패턴입니다.

flowchart TB
    Q["질문"] --> T1

    subgraph LOOP["ReAct 사이클"]
        T1["🧠 생각 (Thought)\n'무엇을 해야 하는가?'"]
        A1["⚡ 행동 (Action)\n'도구를 실행한다'"]
        O1["👁️ 관찰 (Observation)\n'결과를 확인한다'"]
        T2["🧠 다음 생각\n'결과로 무엇을 알 수 있나?'"]
        
        T1 --> A1 --> O1 --> T2
        T2 -->|"목표 달성 전"| A2["다음 행동"]
    end

    T2 -->|"목표 달성"| ANS["최종 답변"]

ReAct 프롬프트 구조

다음 형식으로 문제를 해결해줘:

생각: [현재 상황 분석]
행동: [실행할 작업] (검색("쿼리"), 계산("수식"), 읽기("파일"))
관찰: [행동 결과]
생각: [결과 해석]
... (반복)
최종 답변: [결론]

---
질문: 2024년 한국 반도체 수출 금액과 2023년 대비 변화율은?

ReAct는 AI 에이전트 구현의 핵심 패턴이기도 합니다. 도구(검색, 계산, API)를 LLM과 연결할 때 사용합니다.


기법 2: 자기 일관성 (Self-Consistency)

같은 질문을 여러 번 독립적으로 추론시키고 다수결로 최종 답변을 결정합니다.

flowchart TB
    Q["동일한 질문"]

    Q --> P1["추론 경로 1\n→ 답 A"]
    Q --> P2["추론 경로 2\n→ 답 A"]
    Q --> P3["추론 경로 3\n→ 답 B"]
    Q --> P4["추론 경로 4\n→ 답 A"]
    Q --> P5["추론 경로 5\n→ 답 A"]

    P1 & P2 & P3 & P4 & P5 --> VOTE["다수결\nA: 4표 / B: 1표"]
    VOTE --> FINAL["최종 답변: A\n(신뢰도 80%)"]

자기 일관성 활용 예시

아래 문제를 3가지 다른 방식으로 각각 독립적으로 풀어줘.
각 풀이는 서로 참조하지 않고 독립적으로 작성해.
마지막에 3개의 답변을 비교하고 다수결로 최종 답을 결정해줘.

문제: [복잡한 추론 문제]

단일 추론보다 신뢰도가 높아지지만 비용(토큰)이 N배 됩니다. 중요한 의사결정에만 활용하세요.


기법 3: 메타 프롬프팅

프롬프트를 생성하는 프롬프트입니다. LLM에게 좋은 프롬프트를 설계하게 시킵니다.

flowchart LR
    GOAL["목표 설명"] -->|"메타 프롬프트"| LLM1["LLM\n(프롬프트 설계자)"]
    LLM1 --> PROMPT["최적화된 프롬프트"]
    PROMPT -->|"실제 작업"| LLM2["LLM\n(실행자)"]
    LLM2 --> RESULT["결과"]

메타 프롬프팅 예시

나는 이런 작업을 하려고 해:
"고객 리뷰 텍스트에서 감정(긍정/부정/중립)과 
주요 키워드를 추출하고 구조화된 JSON으로 출력"

이 작업을 위한 최적의 시스템 프롬프트와 사용자 프롬프트 템플릿을 
설계해줘. 실제 예시 2개도 포함해줘.

활용 상황:

  • 프롬프트 작성에 익숙하지 않을 때
  • 새로운 작업 유형의 프롬프트가 필요할 때
  • 기존 프롬프트 품질을 개선하고 싶을 때

기법 4: 프롬프트 체이닝

복잡한 작업을 여러 단계로 나눠 순차적으로 처리합니다.

flowchart LR
    IN["원본 입력"] 

    subgraph CHAIN["프롬프트 체인"]
        S1["단계 1\n요약 추출"]
        S2["단계 2\n핵심 논점 분석"]
        S3["단계 3\n반론 생성"]
        S4["단계 4\n최종 보고서 작성"]
        
        S1 --> S2 --> S3 --> S4
    end

    IN --> S1
    S4 --> OUT["최종 결과물"]

체이닝 예시: 컨텐츠 파이프라인

# 의사코드
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이 질문을 받는 것이 아니라 사용자에게 질문하게 만듭니다.

flowchart LR
    subgraph FLIP["역할 역전 패턴"]
        U["사용자\n'앱 기획 도와줘'"]
        L["LLM\n'타겟 사용자는 누구인가요?\n주요 기능 3가지는? 예산 범위는?'"]
        U2["사용자\n답변 제공"]
        L2["LLM\n충분한 정보로\n구체적 기획안 제공"]
    end

    U --> L --> U2 --> L2
나는 [목표]를 달성하고 싶어. 최적의 결과를 위해 
나에게 필요한 정보를 질문해줘. 충분한 정보를 얻으면
그 때 [결과물]을 생성해줘.

초안을 먼저 받는 것보다 맥락 수집 후 생성이 훨씬 정확한 결과를 냅니다.


기법 선택 가이드

flowchart TD
    Q["어떤 상황인가?"]

    Q -->|"도구 사용 + 복잡한 추론"| R1["ReAct"]
    Q -->|"중요한 판단, 높은 정확도 필요"| R2["자기 일관성"]
    Q -->|"프롬프트 설계가 막막함"| R3["메타 프롬프팅"]
    Q -->|"복잡한 다단계 작업"| R4["프롬프트 체이닝"]
    Q -->|"사용자 요구사항이 불명확"| R5["역할 역전"]

실전: 기법 결합하기

실제 AI 서비스에서는 여러 기법을 동시에 씁니다.

[시스템 프롬프트] ← pe-04
당신은 수석 전략 컨설턴트입니다.

[역할 역전] ← 이번 편
클라이언트의 비즈니스 상황을 파악하기 위해
먼저 5개 핵심 질문을 해주세요.

[CoT 유도] ← pe-03
충분한 정보 수집 후, 단계별로 분석하여
전략 보고서를 작성해주세요.

[출력 형식]
보고서는 다음 구조로 작성합니다:
1. 현황 분석
2. 핵심 문제 정의
3. 전략 옵션 3가지 (장단점 비교)
4. 권고안

프롬프트 엔지니어링 전체 정리

flowchart TB
    subgraph PE["프롬프트 엔지니어링 기법"]
        direction LR
        B["기초\n명확성·구체성·구조화"]
        R["역할+Few-shot\n페르소나·예시 학습"]
        C["CoT\n단계별 추론"]
        S["시스템 프롬프트\n서비스 행동 제어"]
        A["고급 기법\nReAct·자기일관성\n메타·체이닝·역전"]
    end

    B --> R --> C --> S --> A
기법효과비용
명확성·구체성기본 품질 향상낮음
역할+Few-shot일관성·전문성중간
CoT추론 정확도중간
시스템 프롬프트서비스 일관성낮음
자기 일관성신뢰도 최대화높음 (N배)
ReAct도구 활용높음
체이닝복잡한 작업높음

이것으로 프롬프트 엔지니어링 시리즈를 마칩니다. 다음은 LLM API 개발 — 실제 코드로 LLM을 제어하고 서비스를 만드는 실습을 시작합니다.

궁금한 점이 있으신가요?

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