파인튜닝 vs RAG — LLM에 지식을 넣는 두 가지 방법
LLM에 새로운 지식을 넣을 때, 파인튜닝과 RAG 중 뭘 골라야 할까? 각각의 장단점, 비용, 적용 시나리오를 비교합니다.
#RAG#파인튜닝#LLM
파인튜닝 vs RAG, 언제 뭘 쓸까
LLM에 **“우리 회사만의 지식”**을 넣고 싶을 때, 크게 두 가지 방법이 있습니다.
한눈에 비교
| 파인튜닝 (Fine-tuning) | RAG (검색 증강 생성) | |
|---|---|---|
| 데이터 위치 | 모델 가중치 안에 저장 | 외부 벡터 DB에 저장 |
| 업데이트 | 재학습 필요 (느림, 비쌈) | 문서 추가만 (즉시) |
| 비용 | GPU 시간 (수백만 원~) | 임베딩 + 스토리지 (저렴) |
| 장점 | 모델 행동 자체를 바꿈 | 실시간 반영, 출처 추적 |
| 단점 | 학습 데이터 필요, 망각 | 검색 품질에 의존 |
| 적합 | 스타일/포맷/태스크 학습 | 지식/문서/Q&A |
의사결정 플로우차트
질문: "LLM의 '지식'을 바꾸고 싶어?"
├─ Yes → RAG로 시작
└─ No → "행동/스타일"을 바꾸고 싶어?
├─ Yes → 파인튜닝
└─ No → 프롬프트 엔지니어링으로 충분
실전 — RAG 30분 구축
# 1. 문서 청크로 나누기
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 2. 임베딩 & 저장
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 3. 검색 + 생성
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o"),
retriever=db.as_retriever(search_kwargs={"k": 3}),
)
answer = qa.invoke("AIBeginnerX의 1월 뉴스?")
실전 — 파인튜닝이 필요한 순간
- “고객사에 항상 정중한 어조로 답해야 해” (스타일)
- “JSON만 출력해, 다른 텍스트는 절대 ❌” (포맷)
- “우리 도메인 용어 사전을 정확히 따라줘” (태스크)
이 세 가지는 RAG로는 부족하고, 모델 자체를 학습시켜야 해요.
다음 글에서
- LoRA 파인튜닝 — 16GB GPU로도 가능한 학습
- RAG의 함정 — 청크 크기, 임베딩 모델, 리랭킹
- Hybrid: 파인튜닝 + RAG 같이 쓰기
Further reading
📚 LLM WiKi
LLM이 뭔지 5분 만에 이해하기
거대 언어 모델(Large Language Model)의 핵심 아이디어를 비유와 함께 정리합니다. 토큰, 트랜스포머, 다음 토큰 예측까지.
📚 LLM WiKi
AIBeginnerX 블로그를 시작합니다
왜 AI 입문 블로그를 만들었는지, 여기서 어떤 글을 만날 수 있는지 소개합니다.
⚡ hermes
Hermes 모델 — 오픈소스 LLM의 새로운 기준
Nous Research의 Hermes 모델 시리즈 소개. 파인튜닝 데이터, 평가, 실전 사용 후기까지 정리합니다.
— 끝 —
💬 댓글 기능
GitHub Discussions로 댓글을 받으려면 README의 Giscus 설정 안내를 따라주세요. (5분이면 끝나요)