Fine-tuning vs RAG - 언제 무엇을 선택할까



LLM을 커스터마이징하는 두 가지 주요 방법인 Fine-tuning과 RAG의 차이점과 선택 기준을 알아봅니다.



개념 비교








항목Fine-tuningRAG
정의모델 자체를 재학습외부 지식을 검색해서 주입
데이터모델에 내재화외부 DB에서 실시간 검색
업데이트재학습 필요DB만 업데이트
비용학습 비용 높음검색 인프라 비용


Fine-tuning이 적합한 경우



  • 특정 도메인 용어/문체 학습 (의료, 법률)

  • 일관된 출력 형식이 필요할 때

  • 모델의 기본 행동 변경

  • 데이터가 자주 변하지 않을 때

  • 응답 지연시간이 중요할 때



RAG가 적합한 경우



  • 최신 정보가 필요할 때 (뉴스, 주가)

  • 데이터가 자주 업데이트될 때

  • 출처 인용이 필요할 때

  • 대용량 문서 기반 Q&A

  • 환각(Hallucination) 방지가 중요할 때



RAG 아키텍처


┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│ 사용자 │────▶│ 임베딩 │────▶│ 벡터 DB │
│ 질문 │ │ 모델 │ │ (검색) │
└─────────────┘ └─────────────┘ └──────┬──────┘

┌─────────────┐ ┌─────────────┐ │
│ LLM │◀────│ 프롬프트 │◀───────────┘
│ 응답 │ │ + 컨텍스트 │ 관련 문서
└─────────────┘ └─────────────┘


RAG 구현 예시 (LangChain)


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, embeddings)

# 2. 검색 기반 QA 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o"),
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)

# 3. 질문 응답
result = qa_chain({"query": "회사 휴가 정책이 어떻게 되나요?"})
print(result["result"])
print(result["source_documents"]) # 출처 문서


Fine-tuning 구현 예시 (OpenAI)


# 1. 학습 데이터 준비 (JSONL)
{"messages": [{"role": "user", "content": "질문"}, {"role": "assistant", "content": "답변"}]}

# 2. 파일 업로드
from openai import OpenAI
client = OpenAI()

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-4o-mini-2024-07-18"
)

# 4. 완료 후 사용
response = client.chat.completions.create(
model="ft:gpt-4o-mini:my-org::abc123", # Fine-tuned 모델
messages=[{"role": "user", "content": "질문"}]
)


하이브리드 접근


두 방식을 결합하면 더 좋은 결과를 얻을 수 있습니다.


# Fine-tuned 모델 + RAG
1. Fine-tuning으로 도메인 용어/문체 학습
2. RAG로 최신 데이터 검색 및 주입
3. 두 가지 장점 모두 활용


비용 비교







항목Fine-tuningRAG
초기 비용학습 비용 (높음)벡터 DB 구축 (중간)
운영 비용추론 비용만추론 + 검색 비용
업데이트재학습 비용문서 재인덱싱 (낮음)


선택 가이드


if 데이터가_자주_변경됨:
return "RAG"
elif 특정_스타일/형식_필요:
return "Fine-tuning"
elif 출처_인용_필요:
return "RAG"
elif 지연시간_매우_중요:
return "Fine-tuning"
else:
return "RAG로 시작 후 필요시 Fine-tuning 추가"


벡터 DB 선택








DB특징
Pinecone관리형, 확장성 좋음
Chroma로컬 개발용, 간단
Weaviate오픈소스, 자체 호스팅
Milvus대규모 처리