LLM 엔지니어링6장 · RAG 의 원리와 로컬 모델로 옮기기5 / 23← 이전목차다음 →MetaContents

6장. RAG 의 원리와 로컬 모델로 옮기기

RAG 와 미세조정

시험을 준비하는 길은 둘입니다. 교재를 통째로 외우거나, 오픈북으로 들어가 찾아보는 것입니다. 외우면 빨리 답하지만, 교재가 바뀌면 다시 외워야 합니다. 찾아보면 조금 느려도 교재만 바꾸면 됩니다.

외워서 답하기(미세조정)와 찾아보고 답하기(RAG)를 나란히 견준 두 카드

왼쪽 카드가 5장의 미세조정, 오른쪽 카드가 이 장의 RAG 입니다. 여기서 외우기가 미세조정, 오픈북이 RAG 입니다. 둘 중 하나만 고르는 것은 아니어서, 말투는 미세조정으로, 사실은 RAG 로 가르치는 식으로 함께 쓰기도 합니다.

견주기

견줄 것미세조정(5장)RAG(이 장)
가르치는 법모델의 가중치를 고친다프롬프트에 문서를 붙인다
문서가 바뀌면다시 학습한다문서 조각만 바꾼다
잘 가르치는 것말투, 답의 꼴, 자주 묻는 사실많고 자주 바뀌는 사실
근거 보여 주기어렵다찾은 조항을 함께 보여 준다
필요한 것GPU 와 학습 시간검색기와 문서 정리

문서가 바뀔 때의 일

쿠폰 규정이 "한 장"에서 "두 장"으로 바뀌었다고 해 봅시다. RAG 는 조각 하나만 고치면 됩니다.

Python
chunks = {"쿠폰": "제16조(쿠폰) 주문 하나에 쿠폰은 한 장만 쓸 수 있습니다."}

# 정책이 바뀌었다: 조각 하나만 새 글로 바꾼다. 모델은 그대로다
chunks["쿠폰"] = "제16조(쿠폰) 주문 하나에 쿠폰은 두 장까지 쓸 수 있습니다."
print(chunks["쿠폰"])

5장처럼 미세조정으로 가르쳤다면, 쿠폰 답을 바꾼 학습 데이터를 다시 만들고 LoRA 학습을 다시 돌려야 합니다.

코드에 나오는 함수

코드쉬운 뜻
chunks = {"쿠폰": "..."}이름표("쿠폰")를 붙여 조각을 넣어 두는 사전이다. 이름표로 조각을 꺼내고 바꾼다
chunks["쿠폰"] = "..."같은 이름표에 새 글을 넣는다. 예전 글은 사라지고 새 글만 남는다

이 코드가 뜻하는 것

서류철의 종이 한 장을 갈아 끼우는 일과 같습니다. 쿠폰 규정이 바뀌면 "쿠폰" 이름표가 붙은 종이 한 장만 새 종이로 바꿉니다. 직원(모델)을 다시 가르칠 필요는 없습니다.

줄하는 일쉽게 말하면
첫 줄예전 쿠폰 조항을 넣어 둔다서류철에 옛 규정을 꽂아 둔다
둘째 줄같은 이름표에 새 조항을 넣는다옛 종이를 빼고 새 종이를 꽂는다
print(chunks["쿠폰"])지금 들어 있는 조항을 찍는다꽂힌 종이를 꺼내 읽어 본다

결과로 "두 장까지"라는 새 글이 나옵니다. 다음 질문부터는 검색이 이 새 조각을 찾아 붙이므로, 모델은 그대로인데 답이 바뀝니다.

주의할 점

  • RAG 는 모델이 문서를 "읽을 줄 안다"는 것을 전제로 합니다. 너무 작은 모델은 문서를 붙여 줘도 엉뚱하게 답합니다. 실습 6에서 크기가 다른 모델을 견줍니다.
  • 질문 하나에 붙일 수 있는 글의 길이에는 한계(컨텍스트 길이)가 있습니다. 문서 전체를 다 붙이지 못하니 검색으로 골라야 합니다.
← 이전 절6장 · RAG 의 세 단계다음 절 →6장 · 문서를 조각으로 나누기