5장. Decoder-only LLM과 학습 단계
Prompt, RAG, Fine-tuning 고르기
새로 온 직원을 우리 회사 일에 맞추는 방법은 세 가지입니다. 일할 때마다 지시서를 꼼꼼히 써 주거나(Prompt), 참고서를 손에 쥐여 주거나(RAG), 연수를 보내 몸에 익히게 합니다(Fine-tuning). 공개 LLM 이나 상용 API 를 업무에 맞출 때도 이 셋을 고릅니다. 무엇을 바꾸는지로 나누면 쉽습니다.
그림의 별표(★)가 각 방법이 바꾸는 곳입니다. 왼쪽과 가운데는 LLM 상자에 "가중치 그대로"라고 적혀 있습니다. 모델은 손대지 않고 입력만 바꿉니다. 오른쪽만 학습 데이터로 미리 한 번 학습해 "가중치 조정됨(LoRA)" 상태가 됩니다. 그래서 오른쪽은 사용자 질문이 짧아도 됩니다.
세 방법 비교
| 구분 | Prompt Engineering | RAG(검색 증강 생성) | Fine-tuning(SFT, PEFT) |
|---|---|---|---|
| 바꾸는 것 | 모델에 주는 지시문 | 모델에 주는 참고 자료(컨텍스트) | 모델의 가중치 |
| 준비물 | 좋은 프롬프트 | 문서 DB, 검색 시스템 | 학습 데이터, GPU |
| 비용·시간 | 가장 적음(즉시) | 중간(검색 시스템 구축) | 가장 큼(데이터 구축 + 학습) |
| 최신 정보 반영 | 어려움 | 쉬움(문서만 교체) | 어려움(재학습 필요) |
| 근거 제시 | 어려움 | 쉬움(검색된 문서 인용) | 어려움 |
| 잘 바뀌는 것 | 간단한 형식·역할 | 사실 정확도, 사내 지식 | 일관된 형식·말투·절차, 도메인 표현, 짧은 프롬프트 |
| 한계 | 긴 프롬프트 비용, 복잡한 규칙은 잘 안 지킴 | 검색 품질에 좌우됨 | 새 사실 주입에 약함, 과적합, 모델 관리 부담 |
노트북이 제시하는 실무 판단 순서는 다음과 같습니다.
- 프롬프트로 해결되는가? 그렇다면 Prompt Engineering 으로 시작합니다.
- 모델이 모르는 사내 지식이나 최신 정보가 필요한가? 그렇다면 RAG 입니다.
- 형식·말투·절차를 매번 일관되게 지켜야 하는가, 긴 프롬프트의 비용과 지연 시간을 줄여야 하는가, 데이터를 외부 API 로 보낼 수 없어 작은 공개 모델을 써야 하는가? 그렇다면 Fine-tuning(PEFT)입니다.
- 실제 서비스는 대부분 조합입니다. 파인튜닝한 모델 + RAG + 프롬프트입니다.
짧은 예시
import pandas as pd
def choose(prompt_ok, need_facts, need_style):
# 노트북의 판단 순서를 그대로 if 문으로 옮긴다
if prompt_ok:
return "Prompt"
picks = []
if need_facts: # 모르는 사내 지식, 자주 바뀌는 정보
picks.append("RAG")
if need_style: # 일관된 말투·형식·절차
picks.append("Fine-tuning")
return " + ".join(picks) or "Prompt 다시 다듬기"
cases = [
("답을 세 줄 요약으로만", True, False, False),
("매주 바뀌는 반품 규정을 근거와 함께", False, True, False),
("모든 답을 왕의 말투로 일관되게", False, False, True),
("사내 규정을 상담원 말투로", False, True, True),
]
table = pd.DataFrame(
[(name, choose(p, f, s)) for name, p, f, s in cases],
columns=["상황", "먼저 검토할 방법"],
)
print(table.to_string(index=False))
# 결과:
# 답을 세 줄 요약으로만 → Prompt
# 매주 바뀌는 반품 규정을 근거와 함께 → RAG
# 모든 답을 왕의 말투로 일관되게 → Fine-tuning
# 사내 규정을 상담원 말투로 → RAG + Fine-tuning이 코드가 뜻하는 것
신입 직원을 일에 맞추는 방법을 순서도로 고른 코드입니다. 지시서로 되면 지시서(Prompt), 모르는 사실이 필요하면 참고서(RAG), 몸에 밴 말투가 필요하면 연수(Fine-tuning)입니다. 노트북의 "바로 확인하기" 질문인 "매주 바뀌는 반품 규정을 근거와 함께"는 RAG 로 나옵니다. 자주 바뀌는 지식은 가중치에 넣기보다 최신 문서를 검색해 연결하는 편이 갱신과 근거 제시에 유리하기 때문입니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
if prompt_ok: | 프롬프트로 되면 끝 | 지시서로 충분한가 |
picks.append("RAG") | 사실이 필요하면 RAG | 참고서 쥐여 주기 |
picks.append("Fine-tuning") | 말투가 필요하면 Fine-tuning | 연수 보내기 |
" + ".join(picks) | 둘 다면 조합 | 연수 받은 직원에게 참고서까지 |
주의할 점
- Fine-tuning 은 새 사실을 넣는 데 약합니다. "이번 주 반품 기한"처럼 바뀌는 사실을 학습시키면, 바뀔 때마다 다시 학습해야 하고 틀린 옛 정보를 그럴듯하게 말할 수 있습니다.
- 2일차의 Fine-tuning 실습은 "냉소적인 절대 군주" 말투를 가르칩니다. 말투 차이를 눈으로 보기 쉽게 고른 학습용 데이터입니다. 말투·형식은 Fine-tuning 이 가장 잘 바꾸는 영역이라 이 데이터를 골랐습니다.