LLM 프롬프트 엔지니어링 고급 기법: 실전에서 바로 쓰는 프롬프트 패턴
Chain of Thought, Few-Shot Learning, Self-Consistency 등 실무에서 즉시 활용 가능한 고급 프롬프트 엔지니어링 기법을 코드 예제와 함께 소개합니다.
AI 언어 모델을 자신의 도메인에 맞게 커스터마이징하는 방법은 크게 두 가지입니다: Fine-tuning과 RAG(Retrieval-Augmented Generation). 두 방법 모두 강력하지만, 각각의 사용 사례와 장단점이 명확히 다릅니다.
Fine-tuning은 사전 학습된 모델을 특정 데이터셋으로 추가 학습시켜 모델의 가중치를 업데이트하는 방법입니다. 마치 이미 교육받은 전문가를 특정 분야에 특화시키는 것과 같습니다.
# Fine-tuning 개념도
기본 모델 (GPT-3.5)
↓
+ 도메인 특화 데이터 (의료 데이터 10,000건)
↓
= 의료 특화 모델
RAG는 모델을 변경하지 않고, 실시간으로 관련 정보를 검색하여 컨텍스트에 추가하는 방법입니다. 전문가에게 참고 자료를 제공하는 것과 같습니다.
# RAG 개념도
사용자 질문
↓
벡터 DB에서 관련 문서 검색
↓
질문 + 검색된 문서 → LLM
↓
답변 생성
Fine-tuning
RAG
Fine-tuning
초기 비용:
- 데이터 준비: 수일~수주
- 학습 비용: $100~$10,000+
- 검증/테스트: 수일
운영 비용:
- 추론 비용: 일반 모델과 동일
- 유지보수: 데이터 변경 시 재학습 필요
RAG
초기 비용:
- 데이터 준비: 수시간~수일
- 벡터 DB 구축: $0~$100
- 시스템 구축: 수일
운영 비용:
- 추론 비용: 일반 모델 + 검색 비용
- 벡터 DB: $0~$500/월
- 유지보수: 데이터 추가만 하면 됨 (재학습 불필요)
Fine-tuning
RAG
Fine-tuning
새 정보 추가 프로세스:
1. 새 데이터 수집 및 준비 (수일)
2. 모델 재학습 (수시간~수일)
3. 검증 및 배포 (수일)
총 소요 시간: 수일~수주
RAG
새 정보 추가 프로세스:
1. 문서 업로드
2. 임베딩 생성
3. 벡터 DB 저장
총 소요 시간: 수분~수시간 (실시간 가능)
Fine-tuning
RAG
1. 특정 스타일/톤이 중요한 경우
예시: 고객 서비스 챗봇
- 일관된 브랜드 보이스 필요
- 특정 용어와 표현 방식 학습
- 응답 형식 통일
Fine-tuning 데이터:
"고객: 환불하고 싶어요
상담원: 고객님, 불편을 드려 죄송합니다. 환불 도와드리겠습니다..."
(수천 개의 대화 예제)
2. 구조화된 출력이 필요한 경우
예시: 의료 기록 구조화
입력: "환자는 두통과 발열 증상을 호소함"
출력:
{
"symptoms": ["headache", "fever"],
"severity": "moderate",
"duration": "unknown"
}
→ Fine-tuning으로 일관된 JSON 형식 출력 학습
3. 지연 시간이 중요한 경우
RAG: 검색(100ms) + 추론(500ms) = 600ms
Fine-tuned 모델: 추론(500ms) = 500ms
실시간 응답이 필요한 챗봇이나 API에서 유리
4. 오프라인 환경
Edge 디바이스나 보안 환경에서:
- 외부 DB 접근 불가
- 모델만으로 완결적 작동 필요
→ Fine-tuning된 로컬 모델 사용
케이스 1: 법률 문서 분석
목표: 계약서에서 핵심 조항 추출
데이터: 5,000개의 계약서 + 레이블
결과: 95% 정확도, 0.5초 응답 시간
비용: 초기 $3,000, 운영 비용 없음
케이스 2: 코드 생성 (특정 프레임워크)
목표: 회사 내부 Python 프레임워크에 맞는 코드 생성
데이터: 10,000개의 코드 예제
결과: 일관된 코딩 스타일, 프레임워크 규칙 준수
1. 지식이 자주 업데이트되는 경우
예시: 뉴스 분석, 제품 카탈로그
- 매일 새로운 정보 추가
- 실시간 업데이트 필요
- 재학습 비용 감당 불가
RAG 장점:
새 문서 추가 → 즉시 반영 (재학습 불필요)
2. 대량의 문서 기반 Q&A
예시: 기업 내부 문서 검색
- 수천~수만 개의 문서
- 정확한 출처 필요
- 다양한 형식의 문서
RAG 구현:
1. 모든 문서를 벡터 DB에 저장
2. 질문 시 관련 문서 검색
3. 출처와 함께 답변 제공
3. 투명성과 검증이 중요한 경우
예시: 의료 또는 법률 자문
요구사항:
- 답변의 근거 제시 필요
- 정보 출처 추적 가능
- 사실 검증 가능
RAG 응답 예시:
"답변: 이 약물은 임산부에게 금기입니다.
출처: 의약품 안전 가이드라인 p.45 (2025년 3월 개정)"
4. 비용 효율성이 중요한 경우
스타트업이나 소규모 프로젝트:
- Fine-tuning 예산 부족
- 빠른 프로토타이핑 필요
- 시장 검증 우선
RAG:
- 초기 비용 $0~$500
- 1-2주 내 구축 가능
- 필요시 Fine-tuning으로 전환 가능
케이스 1: 고객 지원 시스템
목표: 제품 매뉴얼 기반 자동 응답
구현:
- 100개 제품 매뉴얼 PDF → 벡터 DB
- GPT-4 + RAG
결과:
- 90% 질문 자동 해결
- 답변 시간 10분 → 30초
- 월 비용: $200 (OpenAI + Pinecone)
케이스 2: 연구 논문 분석
목표: 수천 개 논문에서 관련 연구 찾기
구현:
- 5,000개 논문 임베딩
- 의미 기반 검색 + 요약
결과:
- 연구 시간 50% 감소
- 새 논문 즉시 추가 가능
많은 실전 프로젝트에서는 Fine-tuning + RAG를 결합합니다.
# 1. Fine-tuned 모델: 도메인 언어와 스타일 학습
# 2. RAG: 최신 정보 제공
예시: 의료 챗봇
- Fine-tuning: 의학 용어, 환자 응대 스타일
- RAG: 최신 치료 가이드라인, 약물 정보
결과:
"전문적인 의학 용어로(Fine-tuned) +
최신 치료법 정보를(RAG) 제공"
# 초기: RAG로 시작 (빠른 검증)
# 중기: 데이터 수집
# 장기: Fine-tuning 전환 (비용 최적화)
단계 1 (1-3개월):
- RAG 시스템 구축
- 사용자 피드백 수집
- 성능 데이터 축적
단계 2 (3-6개월):
- 수집된 데이터로 Fine-tuning
- RAG는 최신 정보용으로 유지
- 하이브리드 시스템 운영
# 스타일이 중요한 작업: Fine-tuning
# 정보 검색 작업: RAG
예시: 콘텐츠 플랫폼
- 글쓰기 스타일 제안: Fine-tuned GPT-3.5
- 사실 확인: RAG (최신 뉴스 DB)
- 관련 콘텐츠 추천: RAG (콘텐츠 DB)
시작: AI 모델 커스터마이징 필요
↓
Q1: 정보가 자주 변경되나요?
├─ YES → RAG 우선 고려
└─ NO → 다음 질문
↓
Q2: 일관된 출력 형식이 중요한가요?
├─ YES → Fine-tuning 우선 고려
└─ NO → 다음 질문
↓
Q3: 예산이 제한적인가요? (< $1,000)
├─ YES → RAG
└─ NO → 다음 질문
↓
Q4: 수천 개 이상의 레이블 데이터가 있나요?
├─ YES → Fine-tuning
└─ NO → RAG
↓
Q5: 출처 명시가 필수인가요?
├─ YES → RAG
└─ NO → Fine-tuning
↓
Q6: 응답 지연이 중요한가요? (< 500ms)
├─ YES → Fine-tuning
└─ NO → RAG
↓
결론: 하이브리드 접근 고려
# OpenAI Fine-tuning 예제
from openai import OpenAI
client = OpenAI()
# 1. 학습 데이터 준비 (JSONL 형식)
training_data = [
{
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "질문 내용"},
{"role": "assistant", "content": "답변 내용"}
]
},
# ... 수백~수천 개
]
# 2. 파일 업로드
file = client.files.create(
file=open("training_data.jsonl", "rb"),
purpose="fine-tune"
)
# 3. Fine-tuning 작업 생성
job = client.fine_tuning.jobs.create(
training_file=file.id,
model="gpt-3.5-turbo"
)
# 4. 학습 완료 후 사용
response = client.chat.completions.create(
model="ft:gpt-3.5-turbo:my-org:custom-model:id",
messages=[{"role": "user", "content": "질문"}]
)
# LangChain RAG 예제
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# 1. 문서 로드 및 임베딩
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embeddings
)
# 2. 검색기 생성
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 3. RAG 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4"),
retriever=retriever,
return_source_documents=True
)
# 4. 질의
result = qa_chain({"query": "질문 내용"})
print(result["result"])
print("출처:", result["source_documents"])
Fine-tuning 방식
초기 비용:
- 데이터 준비 (인건비): $5,000
- Fine-tuning 비용: $500
- 총: $5,500
월간 운영 비용:
- API 호출 (100,000건/월): $200
- 총: $200/월
6개월 총 비용: $5,500 + ($200 × 6) = $6,700
RAG 방식
초기 비용:
- 시스템 구축 (인건비): $2,000
- 벡터 DB 셋업: $0 (Chroma 무료)
- 총: $2,000
월간 운영 비용:
- API 호출 (100,000건/월): $250 (검색 포함)
- 벡터 DB: $100 (Pinecone)
- 총: $350/월
6개월 총 비용: $2,000 + ($350 × 6) = $4,100
→ 이 케이스에서는 RAG가 38% 저렴
시작 팁: 대부분의 경우 RAG로 시작하여 빠르게 검증한 후, 필요시 Fine-tuning을 추가하는 것이 현명합니다. 두 방법은 상호 배타적이지 않으며, 함께 사용할 때 가장 강력합니다!