Skip to main content

고급 프롬프트 기법

ReAct Prompting

추론(Reasoning)과 행동(Acting)을 결합한 프롬프트 패턴입니다. Agent 시스템에서 핵심적으로 사용됩니다. 실제 사용 예시:
당신은 데이터 분석 에이전트입니다. 다음 형식으로 사고하고 행동하세요:

Thought: 현재 상황을 분석하고 다음 행동을 결정합니다
Action: 사용할 도구와 파라미터를 지정합니다
Observation: 도구 실행 결과를 확인합니다
... (반복) ...
Answer: 최종 답변을 제공합니다

사용 가능한 도구:
- query_sql(sql): SQL 쿼리 실행
- search_docs(query): 문서 검색
- calculate(expression): 수식 계산

사용자 질문: "지난달 대비 이번 달 매출 성장률은?"

Thought: 매출 성장률을 계산하려면 지난달과 이번 달의 매출을 각각 조회해야 합니다.
Action: query_sql("SELECT SUM(revenue) FROM sales WHERE month = '2025-02'")
Observation: 결과: 45억원
Thought: 이번 달 매출도 조회합니다.
Action: query_sql("SELECT SUM(revenue) FROM sales WHERE month = '2025-03'")
Observation: 결과: 52억원
Thought: 두 값으로 성장률을 계산합니다.
Action: calculate("(52 - 45) / 45 * 100")
Observation: 결과: 15.56%
Answer: 이번 달 매출은 52억원으로 지난달(45억원) 대비 15.6% 성장했습니다.

Tree-of-Thought (ToT)

여러 추론 경로를 동시에 탐색하고, 가장 유망한 경로를 선택하여 진행합니다. 정답이 불명확한 복잡한 문제에 효과적입니다.
단계설명예시
확장여러 가능한 추론 경로 생성경로A: 매출 기준 분석, 경로B: 고객 수 기준, 경로C: 이익률 기준
평가각 경로의 유망성 점수 부여A: 7/10, B: 5/10, C: 8/10
선택최적 경로 선택하여 계속 진행경로C 선택 → 다음 단계 탐색
다음 문제에 대해 3가지 다른 접근법을 제시하세요.
각 접근법의 장단점을 평가하고, 가장 적합한 방법을 선택하여 상세히 진행하세요.

문제: "데이터 파이프라인의 처리 시간이 2배로 증가한 원인을 분석하세요"

Self-Consistency

동일 질문에 여러 번 추론하고, 가장 빈번한 답을 최종 결과로 채택 합니다.
동작 방식:
1. Temperature > 0으로 설정 (예: 0.7)
2. 같은 질문을 5회 생성
3. 결과: [A, A, B, A, C] → 다수결로 A 채택

장점: 단일 추론보다 정확도가 높음 (특히 수학, 논리 문제)
단점: API 호출 비용이 N배로 증가

Structured Output (JSON Mode)

LLM 출력을 JSON 등 구조화된 형식으로 제한합니다.
다음 정보를 JSON 형식으로 추출하세요:
{"name": "이름", "company": "회사명", "role": "직책"}

입력: "삼성전자 AI센터장 김철수입니다"
주의 JSON Mode를 사용할 때는 반드시 출력 스키마를 명시하세요. 스키마 없이 “JSON으로 응답해”라고만 하면 불안정한 출력이 발생할 수 있습니다.

Prompt Chaining (프롬프트 체이닝)

하나의 프롬프트로 처리하기 어려운 복잡한 작업을 여러 단계의 프롬프트로 분해 하여 순차적으로 실행하는 기법입니다. 각 프롬프트의 출력이 다음 프롬프트의 입력이 됩니다. 실제 사용 예시 (3단계 체이닝):
Step 1 — 정보 추출:
"다음 계약서에서 갱신일, 금액, 당사자를 추출하세요"
→ {"renewal_date": "2026-03-31", "amount": "1억원", "parties": ["A사", "B사"]}

Step 2 — 분석:
"다음 계약 정보를 분석하고, 갱신 30일 전 기준으로 주의사항을 정리하세요: {Step1 결과}"
→ "갱신일이 30일 이내입니다. 금액 재협상 필요..."

Step 3 — 보고서 작성:
"다음 분석 결과를 경영진 보고용 이메일 초안으로 작성하세요: {Step2 결과}"
→ 이메일 초안 생성
언제 체이닝을 사용할 것인가?
상황단일 프롬프트체이닝
단순 분류/추출OX (과잉)
복합 분석+보고서X (품질 저하)O
다단계 검증 필요XO
비용 민감O (토큰 절약)X (총 토큰 증가)
참고 : 체이닝의 각 단계는 독립적으로 테스트하고 디버깅할 수 있습니다. 전체 파이프라인이 실패할 때 어느 단계가 문제인지 쉽게 파악할 수 있다는 것이 큰 장점입니다.

프롬프트 최적화 기법

기본기를 넘어서, 프로덕션 환경에서 비용, 성능, 품질 을 동시에 최적화하는 고급 기법들입니다.

프롬프트 압축 (Prompt Compression)

긴 컨텍스트를 LLM에 전달할 때, 모든 텍스트가 동일하게 중요하지 않습니다. 프롬프트 압축 은 불필요한 토큰을 제거하여 비용을 절감하면서 정확도를 유지하는 기법입니다. 주요 방법론:
기법원리토큰 절감률정확도 유지율
LLMLingua작은 LM으로 각 토큰의 중요도를 측정, 낮은 중요도 토큰 제거40~60%95%+
Selective Context정보 엔트로피 기반으로 중복/저가치 문장 제거30~50%90%+
수동 압축프롬프트에서 조사, 접속사, 반복 표현을 직접 제거20~30%98%+
수동 압축 실전 예시:
# Before (186 토큰)
"다음 고객 리뷰를 분석하여 주시기 바랍니다. 분석할 때에는 고객의 감정 상태가
긍정적인지 부정적인지 혹은 혼합적인지를 판단하여 주시고, 또한 리뷰에서 언급된
핵심적인 이슈들을 추출하여 주시기 바랍니다. 그리고 해당 이슈에 대한 적절한
대응 방안도 함께 제안하여 주시면 감사하겠습니다."

# After (62 토큰, 67% 절감)
"고객 리뷰 분석:
1. 감정: 긍정/부정/혼합
2. 핵심 이슈 추출
3. 대응 방안 제안"
참고 : 한국어는 영어 대비 토큰 효율이 낮습니다(같은 의미에 1.5~2배 토큰). 프롬프트의 지시 부분은 간결하게, 컨텍스트 부분은 충실하게 유지하는 것이 최적 전략입니다.

Dynamic Few-shot

고정된 예시 3개를 항상 사용하는 것이 아니라, 사용자 입력과 가장 유사한 예시를 동적으로 선택 하는 기법입니다. Databricks Vector Search와 결합하면 강력한 효과를 발휘합니다. 정적 Few-shot vs Dynamic Few-shot:
# 정적 Few-shot — 항상 같은 예시
예시 1: [결제 관련 질문] → [결제 관련 답변]
예시 2: [배송 관련 질문] → [배송 관련 답변]
예시 3: [반품 관련 질문] → [반품 관련 답변]

실제 질문: "계정 비밀번호를 잊어버렸어요"
→ 예시와 전혀 관련 없는 주제 → Few-shot 효과 미미

# Dynamic Few-shot — 입력에 맞는 예시를 벡터 검색으로 선택
사용자 입력: "계정 비밀번호를 잊어버렸어요"
→ Vector Search로 가장 유사한 예시 3개 검색:
  예시 1: [비밀번호 재설정 질문] → [재설정 안내]
  예시 2: [계정 잠금 질문] → [잠금 해제 안내]
  예시 3: [이메일 변경 질문] → [변경 절차 안내]
→ 관련 예시로 Few-shot 효과 극대화
구현 아키텍처(Databricks 기준):
  1. 예시 데이터셋(질문-답변 쌍 수백~수천 개)을 Delta 테이블에 저장
  2. Databricks Vector Search로 예시를 임베딩하여 인덱스 생성
  3. 런타임에 사용자 입력으로 유사 예시 Top-3 검색
  4. 검색된 예시를 프롬프트에 동적 삽입
성공 성능 차이: 정적 Few-shot 대비 Dynamic Few-shot은 평균 20~30% 정확도 향상을 보입니다. 특히 도메인이 넓고 질문 유형이 다양한 서비스에서 효과가 큽니다.

Meta-Prompting

LLM에게 “이 작업에 최적인 프롬프트를 생성해줘” 라고 요청하는 기법입니다. 사람이 처음부터 프롬프트를 설계하는 것보다 효율적일 수 있습니다. 3단계 Meta-Prompting 프로세스:
# Step 1: 프롬프트 생성 요청
"다음 작업을 수행하는 최적의 프롬프트를 작성해주세요:
- 작업: 고객 이메일을 카테고리별로 분류
- 카테고리: 결제, 배송, 반품, 기술지원, 기타
- 요구사항: JSON 출력, 신뢰도 점수 포함"
→ LLM이 프롬프트 초안을 생성

# Step 2: 프롬프트 평가 요청
"위에서 생성한 프롬프트를 다음 기준으로 평가하고 개선점을 제시해주세요:
- 명확성 (1~10)
- 완전성 (1~10)
- 엣지 케이스 처리 (1~10)"
→ LLM이 자체 프롬프트를 비평

# Step 3: 개선된 프롬프트 생성
"평가 결과를 반영하여 개선된 최종 프롬프트를 작성해주세요."
→ 자가 개선된 프롬프트 완성
주의 주의: Meta-Prompting으로 생성된 프롬프트도 반드시 실제 데이터로 테스트하세요. LLM이 “좋은 프롬프트”라고 판단하는 것과 실제로 좋은 결과를 내는 것은 다를 수 있습니다.

Prompt Caching

동일한 System Prompt를 반복 호출할 때, 캐싱을 활용하면 비용을 50% 이상 절감 할 수 있습니다. Prompt Caching 원리:
일반 호출:
  요청 1: [System Prompt 2000토큰] + [User 100토큰] → 2100토큰 과금
  요청 2: [System Prompt 2000토큰] + [User 150토큰] → 2150토큰 과금
  요청 3: [System Prompt 2000토큰] + [User 120토큰] → 2120토큰 과금
  총 입력 토큰: 6,370

Prompt Caching 적용:
  요청 1: [System Prompt 2000토큰(캐시 저장)] + [User 100토큰] → 2100토큰 과금
  요청 2: [System Prompt 캐시 히트(90% 할인)] + [User 150토큰] → 350토큰 과금
  요청 3: [System Prompt 캐시 히트(90% 할인)] + [User 120토큰] → 320토큰 과금
  총 입력 토큰 비용: 약 2,770 (56% 절감)
Prompt Caching 활용 조건:
조건설명
System Prompt가 길다1,000토큰 이상일 때 효과가 큼
반복 호출이 많다챗봇, 배치 처리 등 동일 System Prompt 반복 사용
System Prompt가 변경되지 않는다캐시 히트를 위해 prefix가 동일해야 함
참고 Databricks에서: Foundation Model API를 통해 Anthropic Claude, OpenAI GPT 모델 호출 시 Prompt Caching이 자동 적용됩니다. System Prompt를 변경하지 않고 User Message만 바꾸는 패턴으로 설계하면 자동으로 비용이 절감됩니다.