[AI 에이전트] 2주차 : 프롬프트 기법 4가지

성찬홍·2026년 4월 1일

AI

목록 보기
2/20
post-thumbnail
  • 주요 프롬프트 기법 4가지의 정의와 각 프롬프팅별 테스트 결과를 정리해 보았습니다.

  • 각 프롬프팅별 결과 테스트를 정리해 보았습니다.

Zero-Shot Prompting(제로샷 프롬프팅)

(1) 한 줄 정리

제로샷 프롬프팅은 LLM에게 별도의 예시나 사전 학습 데이터 없이 바로 작업을 수행하도록 지시하는 기법입니다.

(2) 핵심 원리

별도의 예시 없이 해당 모델이 이미 데이터를 통해 학습한 지식을 바탕으로 결과물을 추론하여 도출하는 방식입니다.

  • LLM의 AR(autoregressive) 특성상 초기 생성되는 토큰들이 맥락을 결정하게 되기에, 질문이 모호하거나 학습 데이터가 적다면 맥락을 이탈하거나 환각(Hallucination)을 생성하는 빈도가 높아질 수 있다.

(3) 사용 예시

광화문 BTS 공연이라는 특정 상황에 대해 정해진 양식 없이 질문한 예시입니다.

  • 어떤 특별한 지침 없이 키워드를 바탕으로 보고서 형태의 답변을 받을 수 있었습니다.
  • 두 번째 질문에서는 표 형태라는 지시를 추가해서 표 형태의 답변을 받을 수 있었습니다.

→ 이렇게 제로샷 프롬프트의 경우 질문에 따라 추론되어 자유로운 형태의 답변을 받게 됩니다.

구분질문 1(자유 추론)질문 2(형식 지정)
프롬프트키워드 기반의 정보 요청명확한 출력 형식(표) 지시
추론 방식가장 보편적인 보고서 맥락 선택지시어에 따른 구조적 변환
AR 특징문맥의 일관성을 유지하는 서술적 생성특정 기호(표)에 고착된 패턴 생성

(4) 사용처

  • 언제 사용하면 좋을까?

    • 범용적인 질의응답(General-Purpose Chat)
      → Gemini, GPT와 같이 카테고리가 정해지지 않은 서비스에서 상식적인 질문이나 일상적인 대화를 나눌 때 가장 효율적입니다.
    • 단순 텍스트 처리
      → 지시어 정도로 충분한 작업들
  • 언제 효과가 적을까?

    • 도메인 특화 지식(Niche Expertise)
      → 모델이 학습하지 않은 기업 내부 문서, 최신 법령 혹은 특정 전문 분야의 기술적 깊이가 필요한 경우 할루시네이션(환각) 위험이 큽니다.
    • 엄격한 출력 형식 유지
      → 복잡한 JSON 구조나 아주 특수한 문서 양식을 따라야 할 때, 예시(Few-shot) 없이는 모델이 '첫 토큰'을 엉뚱하게 잡아 형식이 무너질 수 있습니다.
    • 다단계 추론
      → 논리적인 단계를 거쳐야 하는 수학 문제나 코딩 아키텍처 설계 시, 과정에 대한 가이드가 없으면 중간 단계에서 논리가 이탈하기 쉽습니다.

Few-Shot Prompting(퓨샷 프롬프팅)

(1) 한 줄 정리

퓨샷 프롬프팅은 원하는 결과에 대한 예시를 먼저 제시하여 LLM이 추론하는 데 필요한 패턴과 형식을 컨텍스트로 학습시키는 방법입니다.

(2) 핵심 원리

: 모델을 별도로 학습시키지 않고 입력된 문맥만으로 모델의 행동을 변화시키는 문맥 내 학습을 핵심으로 합니다.

→ 퓨샷 프롬프팅은 "명령(Instruction)"만으로는 부족한 작업의 "답변 패턴(Pattern)"과 "출력 형식(Format)"을 데모(예시)로 직접 보여 줌으로써, 모델이 방대한 지식 중 사용자가 원하는 특정 맥락에 빠르게 안착(Anchoring)하도록 유도하는 기법입니다.

  • 확률 분포에서의 강력한 조건부 역할

    • 제로샷이 거대한 확률 지표라면 퓨샷은 데모라는 이정표를 미리 세웁니다.
    • 이를 통해 모델이 생성해야 할 후속 답변에 매우 강한 조건부 역할을 수행합니다. 즉, 수많은 패턴 중 사용자가 원하는 ‘특정 패턴’의 확률값을 높일 수 있습니다.
  • 레이블 공간과 형식

    • 레이블 공간: 답변으로 나올 수 있는 후보군이 무엇인지 모델에게 미리 인지시키는 것이 중요합니다.
    • 입력 분포: 어떤 종류의 텍스트가 입력될 것인지 분포를 보여 주는 것만으로도 성능이 올라갑니다.
    • 형식: 예시의 정답이 틀려도 일정 형식을 유지시키는 것 자체가 모델이 답변 궤도에 머물도록 도와주는 강력한 가이드가 됩니다.

(3) 사용 예시

 **Prompt:**
문장에서 이름, 직업, 거주지를 추출하여 JSON 형식으로 출력하세요.
  
 **입력:** "서울에 사는 프론트엔드 개발자 김철수 씨는 오늘 연차입니다."
 **출력:** {"name": "김철수", "job": "개발자", "location": "서울"}
 
 **입력:** "부산에서 카페를 운영하는 박영희 사장님을 만났습니다."
 **출력:** {"name": "박영희", "job": "자영업자", "location": "부산"}
 
 **입력:** "도쿄에서 요리사로 일하는 사토 씨가 한국에 왔습니다."
 **출력:**

→ 결과: {"name": "사토", "job": "요리사", "location": "도쿄"}

(4) 사용처

  • 언제 사용하면 좋을까?

    • 정형화된 데이터 추출: 특정 JSON 양식 등의 엄격한 출력 구조가 필요할 때 예시를 주면 실패율이 줄어든다.
    • 복잡한 분류 작업: 여러 복잡한 카테고리 분류가 필요해지면 각 카테고리의 기준을 예시로 샷을 주면 정확도가 높아진다.
  • 언제 효과가 적을까?

    • 다단계 논리 추론: 수학 문제나 코딩처럼 단계별 사고가 필요한 경우에는 정확도가 떨어진다.

    • 맥락 창(Context Window)이 좁은 모델: 예시가 너무 길어지면 실제 질문에 할당될 문맥 용량이 부족해질 수 있다.

Chain-of-Thought(CoT)[생각의 사슬]

(1) 한 줄 정리

CoT는 복잡한 문제를 한 번에 해결하지 않고 논리적인 중간 추론 단계를 순차적으로 생성하여 정답의 정확도를 높이는 기법입니다.

(2) 핵심 원리

→ 복잡한 문제를 추론하기 어려운 프롬프팅의 한계를 개선하기 위해, "결과(Result)"가 아닌 "사고의 과정(Reasoning)"을 퓨샷 데모로 제공하여 모델이 스스로 정답에 도달하기 위한 중간 논리 단계를 생성하도록 유도하는 기법입니다.

  • 추론을 통한 계산 공간을 확보합니다.

    • CoT는 중간 추론 과정을 출력하게 해서 생각할 시간과 공간을 주게 됩니다.
    • 추론한 내용들이 다시 입력으로 들어가면서(AR 효과) 최종 정답 토큰이 생성될 때의 확률 분포를 매우 정교하게 가이드할 수 있게 됩니다.
  • Zero-shot CoT

    • 단계별로 생각해 보자라는 문구만으로도 성능이 올라갈 수 있게 됩니다.
    • 모델이 학습해 둔 논리적 전개 패턴을 트리거해 주게 됩니다.
    • 이로써 단답형이 아닌 설명형/단계형으로 강하게 전이시켜 정답에 도달하기 위한 유의미한 결과물 도출에 도움을 줍니다.
  • Auto-CoT

    • 수작업으로 CoT 예시를 만드는 번거로움을 해결하고 예시의 편향성을 줄일 수 있습니다.

    • 질문 클러스터링

      • 비슷한 유형의 질문들을 묶어 모델이 다양한 논리 구조를 경험하게 해서 특정 유형에 매몰되지 않는 입력 분포를 형성시켜 줍니다.
    • 휴리스틱 필터링

      • 너무 짧거나 복잡한 추론보다는 적당한 길이와 단계를 가진 추론 체인을 샘플링해서 모델이 학습하기 좋은 양질의 논리 경로를 예시로 제공합니다.

(3) 사용 예시

Prompt

 
 **[Task]** Next.js FSD 구조에 맞춰 '상품 목록(Product List)' 기능을 구현하세요.
 
 **[FSD Folder Rule]**
 
 - `api/`: 외부 통신 로직(Fetcher)
 - `model/`: 상태 관리 및 비즈니스 로직(Hooks, Types)
 - `ui/`: UI 컴포넌트

**사고 과정(CoT)**
 
 - 유저 데이터를 가져오는 API 호출 함수는 `features/user/api/`에 위치해야 함.
 - 이 API를 호출하고 상태를 관리하는 리액트 훅은 `features/user/model/`에 위치해야 함.
 - 외부에서는 이 훅을 통해 데이터에 접근함.

**Result**(파일 코드 생략)
 - features/product-list/api/get-products.ts
 - features/product-list/model/use-products.ts

(4) 사용처

  • 언제 사용하면 좋을까?

    • 복잡한 논리 추론: 수학, 물리 문제 풀이나 논리 퀴즈 등 단계별 계산이 필요한 경우
    • 코드 아키텍처 설계: 디자인 패턴 적용, 리팩토링 로직 등 구조적 결정이 필요한 작업
  • 언제 효과가 적을까?

    • 실시간 응답이 필수인 경우: 추론 과정만큼 출력 토큰이 늘어나 응답 속도(Latency)가 느려집니다.

    • 단순 사실 확인: "대한민국의 수도는?" 같은 질문에 추론 단계를 넣는 것은 비효율적입니다.

Self-Consistency[자기 일관성]

(1) 한 줄 정리

하나의 고정된 추론 경로만 따라가지 않고 여러 개의 다양한 추론 경로를 독립적으로 생성하고, 가장 많이 도출된 공통 답변을 최종 정답으로 선택하는 기법입니다.

(2) 핵심 원리

→ 단일 추론 경로에서 발생할 수 있는 우발적 오류(Greedy Decoding의 한계)를 극복하기 위해 여러 번의 '생각의 사슬(CoT)'을 시도하여 결과의 신뢰도와 일관성을 확보합니다.

  • 탐욕적 디코딩(Greedy Decoding) 대체

    • 모델이 가장 확률이 높은 토큰만 선택하는 방식 대신 다양한 후보군을 샘플링합니다.
  • 추론 경로의 다양성 확보

    • 동일 질문에 대해 조금씩 다른 논리 전개를 하도록 유도하여 틀린 길로 빠지는 것을 방지합니다.

(3) 사용 예시

→ 사용 예시: FSD 아키텍처 리팩토링 검증

Scenario: components/Login.tsx라는 거대하고 지저분한 레거시 파일을 FSD 구조로 분리하라는 임무를 받은 에이전트.

**Prompt** 

**[Task]** 다음 레거시 파일을 FSD 구조에 맞게 리팩토링할 계획을 세우세요.
**[Rule]** 파일명과 상세 경로를 반드시 명시하세요.
**[File]** components/Login.tsx (API 호출, 유효성 검사, UI가 모두 섞여 있음) 

**Reasoning Paths (에이전트가 내부적으로 생성한 3가지 제안)**

• **시뮬레이션 1:** * API 로직 추출 → `features/auth/api/login.ts`
    ◦ 상태 관리 추출 → `features/auth/model/use-login.ts`
    ◦ UI 분리 → `features/auth/ui/login-form.tsx`
    ◦ **결정:** **`features/auth` 슬라이스로 통합.**

• **시뮬레이션 2:** * API 로직 추출 →`shared/api/auth.ts`
    ◦ 상태 관리 추출 → `features/auth/model/use-login.ts`
    ◦ UI 분리 → `features/auth/ui/login-form.tsx`
    ◦ **결정:** **API는 `shared`로, 나머지는 `features/auth`로 분리.**

• **시뮬레이션 3:** * API 로직 추출→ `features/auth/api/login.ts`
    ◦ 상태 관리 추출 → `features/auth/model/use-login.ts`
    ◦ UI 분리 → `features/auth/ui/login-form.tsx`
    ◦ **결정:** **`features/auth` 슬라이스로 통합.**

**Result (최종 의사결정)**

**[Selection]** 시뮬레이션 1과 3이 동일한 구조를 제안함.
에이전트는 **`features/auth` 내부에 모든 로직을 캡슐화하는 방안**이 가장 일관성 있다고 판단하여 해당 경로로 파일 생성을 시작함.

(4) 사용처

  • 언제 사용하면 좋을까?

    • 산술 추론: 계산 실수가 일어나면 안 되는 정밀한 작업의 경우
  • 언제 효과가 적을까?

    • 비용과 속도가 중요한 경우

    • 창의적인 결과 도출이 필요한 경우

실습 및 결과 정리([LLM 실습] 의료급여 본인부담률 추출 실험: 프롬프트 기법별 성능 비교)

: 본 포스팅에서는 의료급여 본인부담률 데이터를 바탕으로 다양한 프롬프트 엔지니어링 기법(Zero-shot, Few-shot, CoT, Self-Consistency)이 LLM의 정답률에 미치는 영향을 실험하고 그 결과를 정리합니다.

1. 실험 전 가설 설정

실습 진행 전 데이터의 특성과 모델의 능력을 고려하여 아래와 같은 가설을 세웠습니다.

1) Zero-shot(Step 1) 정답률 예측

  • 예측: 전체 평균 정답률 70% 이상 예상.
  • 이유: 이미지 OCR 추출 성능이 우수하여 단순 정보 추출(Easy)은 완벽에 가깝겠지만, 복합 조건이 붙는 추론(Hard)으로 갈수록 할루시네이션 위험으로 정답률이 하락할 것으로 분석했습니다.
난이도정답률(예측)판단 근거
Easy90%~100%단순 키워드 매칭 및 표 내용 추출 단계
Medium70%~80%다중 조건(예: 2종 + 특정 질환 + 시술) 결합 시 오류 가능성
Hard약 50%수치 연산과 추론 로직 결합 지점에서 환각 위험 높음

2) 가장 큰 개선이 일어날 난이도 예측

  • 예측: Medium(복합 조건 및 비교형)
  • 이유: Easy는 이미 높아서 개선 폭이 적고, Hard는 더 많은 샘플이 필요할 것이기에 비교 조건을 명확히 인지시키는 것만으로도 Medium에서 가장 빠른 성능 향상이 있을 것이라 보았습니다.

3) 가장 큰 정답률 점프가 일어날 기법

  • 예측: CoT(Chain-of-Thought)
  • 이유: 표를 읽고 단계를 나누어 합산/선택하는 과정이 중요하므로, 단계적 사고를 유도하는 CoT가 가장 효과적일 것으로 판단했습니다.

2. 실험 환경 및 프롬프트 구성

실행 환경

  • Model: gemini-2.5-flash-lite(OpenAI 호환 엔드포인트)
  • SDK: openai Python SDK, pydantic(구조화된 출력 검증)
  • Data: 이미지 OCR 결과물인 extracted-reference.md를 공통 참조 데이터로 사용

프롬프트 전략

모든 Step에서 구조화된 출력(JSON)을 강제하여 평가의 객관성을 확보했습니다.

JSON

{ "answer": "최종 답안", "reason": "판단 근거 요약" }

3. 실험 결과 요약

Step프롬프트 구성정확도평균 토큰/문항비고
Zero-shot참조 데이터 + 직접 추론0.93331,458예측 상회(기본 성능 우수)
Few-shot예시 3개 추가1.01,816정답률 100% 도달
CoT추론 단계 유도1.01,993초기 설계 시 형식 흔들림 주의
Self-Consistency다수결 채택1.06,741비용/시간 대폭 증가

4. 가설 vs 실제 결과 비교(인사이트)

실험 전 세운 가설과 실제 데이터를 대조해 본 결과, 몇 가지 흥미로운 점을 발견했습니다.

가설 1: Zero-shot 정답률은 70% 이상일 것이다?(적중)

실제 결과는 93.3%로 가설을 크게 상회했습니다. 텍스트로 잘 정리된 extracted-reference.md를 제공하자 모델이 Hard 난이도에서도 뛰어난 추론 능력을 보여 주었습니다. "데이터 전처리의 중요성"을 다시 한번 확인했습니다.

가설 2: Medium 난이도에서 가장 큰 개선이 있을 것이다?(불일치)

실제로는 Hard 난이도에서 실질적인 개선이 일어났습니다. Zero-shot에서 이미 Medium이 완벽에 가까웠기에, 남은 오답 2개를 해결한 Few-shot과 CoT의 기여는 Hard 문항에 집중되었습니다.

가설 3: CoT가 가장 큰 점프를 만들 것이다?(불일치)

가장 큰 정답률 점프는 Few-shot(0.9333 → 1.0)에서 발생했습니다. 이번 실험처럼 정답 형식이 고정된(Exact Match) 과제에서는 복잡한 추론 과정보다 "이런 형식으로 답하라"는 명확한 예시가 더 강력한 트리거가 됨을 배웠습니다.

결론 및 느낀 점

  1. 단순함의 중요성: 무조건 복잡한 CoT나 Self-Consistency를 쓰기보다, 잘 정리된 데이터와 Few-shot 예시 몇 개가 더 가성비 좋은 해결책이 될 수 있습니다.
  2. 비용 대비 효율: Self-Consistency는 정확도는 높지만 토큰 소모가 4배 이상 많습니다. 서비스 설계 시 정확도와 비용 사이의 Trade-off를 반드시 고려해야 합니다.
  3. 프롬프트의 디테일: CoT 적용 시 '과정'에 너무 치중하면 '최종 답변 형식'이 망가질 수 있습니다. 답변 형식을 고정하는 추가 지시가 반드시 병행되어야 합니다.

참고 문헌

https://www.promptingguide.ai/kr/techniques

https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices

https://ai.google.dev/gemini-api/docs/prompting-strategies

profile
꾸준한 개발자

0개의 댓글