RAG 기초 (0) - Introduction
RAG 기초 시리즈 소개와 진행 순서, 실습 환경과 시리즈 내내 쓸 예제 문서 준비를 다룹니다.
검색을 붙여 LLM이 우리 문서를 근거로 답하게 만드는 RAG 기초 시리즈의 0편입니다. 시리즈 소개와 진행 순서를 다루며, 개념 정리가 1편, 실습은 2편부터 시작합니다.
무엇을 다루나
문서 몇 개를 놓고 검색이 붙은 질의응답을 처음부터 끝까지 만듭니다. 문서를 chunk로 나누는 일, embedding으로 바꾸는 일, vector store에 넣고 찾는 일, 찾아온 조각을 프롬프트에 넣어 답하게 하는 일, 그리고 검색 품질을 올리고 평가하는 일까지가 범위입니다.
프레임워크로 세 줄에 끝내는 대신 각 단계를 직접 짭니다. 코사인 유사도를 numpy로 계산해 보고 나면 vector store가 무엇을 대신해 주는지가 분명해지고, 검색이 실패했을 때 어느 단계를 봐야 하는지도 보입니다. 같은 파이프라인을 LangChain으로 조립하는 방법은 LangChain 기초에 따로 있습니다.
개념 요약만 필요하면 RAG 기초 단편에 압축본이 있습니다. 이 시리즈는 그 한 편을 실습과 측정 중심으로 풀어 쓴 확장판입니다.
누구를 위한 시리즈인가
- RAG를 붙였는데 엉뚱한 답이 나와서 검색이 문제인지 프롬프트가 문제인지 구분하지 못하는 사람
- chunk 크기나
k값을 감으로 정하고 있는 사람 - 사내 문서 질의응답을 만들어야 하는데 어디서부터 시작할지 모르는 사람
Python 기본 문법을 전제로 합니다. LLM API 호출은 프롬프트 엔지니어링 기초 시리즈 1편 수준이면 충분하고, 필요한 부분은 이 시리즈에서 다시 설명합니다.
어떻게 진행하는가
여덟 편으로 진행하며, 순서는 아래와 같습니다.
| 편 | 주제 |
|---|---|
| (1) | Why RAG: 검색을 붙이는 이유와 파이프라인 구조 |
| (2) | Chunking: 문서를 검색 단위로 나누기 |
| (3) | Embeddings: 의미를 벡터로 바꾸고 유사도 재기 |
| (4) | Vector Store: 저장하고 top-k로 찾아오기 |
| (5) | Generation: 근거를 넣고 출처와 함께 답하게 하기 |
| (6) | Retrieval Quality: 하이브리드 검색과 reranking |
| (7) | Evaluation and Operations: 검색과 답변을 나눠 채점하기 |
1편이 개념, 2편에서 4편이 검색 파이프라인, 5편이 생성, 6편과 7편이 품질 개선과 운영입니다. 2편에서 만든 chunk를 7편까지 계속 씁니다.
실습 환경
Python 3.12 기준입니다.
1
2
3
python3 -m venv .venv
source .venv/bin/activate
pip install -U anthropic sentence-transformers chromadb rank_bm25 numpy
| 패키지 | 쓰는 곳 |
|---|---|
anthropic | 답변 생성 (5편) |
sentence-transformers | embedding과 reranking (3편, 6편) |
chromadb | vector store (4편) |
rank_bm25 | 키워드 검색 (6편) |
API key는 환경변수로 둡니다.
1
export ANTHROPIC_API_KEY="sk-ant-..."
embedding은 Claude API가 아니라 오픈소스 모델을 씁니다. Anthropic은 embedding 전용 엔드포인트를 제공하지 않기 때문에, RAG를 만들 때 검색 부분은 별도 모델을 골라야 합니다. 한국어 문서를 다루므로 한국어로 학습된 모델을 쓰고, 선택 기준은 3편에서 다룹니다. 첫 실행 때 모델 가중치를 내려받으므로 수백 MB의 다운로드가 발생합니다.
예제 문서 만들기
시리즈 내내 쓸 문서 세 개를 만듭니다. 온라인 쇼핑몰의 정책 문서입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
mkdir -p docs
cat > docs/refund.md <<'EOF'
# 환불 및 반품 정책
## 단순 변심
상품 수령일로부터 7일 이내에 반품을 신청할 수 있습니다.
왕복 배송비 5,000원은 고객이 부담합니다.
상품을 사용했거나 포장을 훼손한 경우 단순 변심 반품은 불가합니다.
## 상품 하자
상품에 하자가 있거나 주문과 다른 상품이 배송된 경우,
수령일로부터 30일 이내에 무료로 반품 또는 교환할 수 있습니다.
이 경우 왕복 배송비는 회사가 부담합니다.
## 환불 처리 기간
반품 상품이 물류센터에 도착한 뒤 3영업일 이내에 환불을 처리합니다.
카드 결제는 환불 처리 후 카드사에 따라 3일에서 5일이 추가로 소요됩니다.
EOF
cat > docs/shipping.md <<'EOF'
# 배송 정책
## 배송비
기본 배송비는 3,000원입니다.
주문 금액이 30,000원 이상이면 배송비가 무료입니다.
제주 및 도서산간 지역은 3,000원이 추가됩니다.
## 출고와 도착
평일 오후 2시 이전에 결제된 주문은 당일 출고됩니다.
출고 후 영업일 기준 2일에서 3일 이내에 도착합니다.
주말과 공휴일에는 출고하지 않습니다.
## 송장 조회
송장번호는 출고 다음 날 오전부터 조회할 수 있습니다.
출고 당일에는 택배사 시스템에 등록되지 않아 조회되지 않습니다.
EOF
cat > docs/membership.md <<'EOF'
# 회원 등급 정책
## 등급 기준
최근 6개월 구매 금액을 기준으로 실버, 골드, 플래티넘 등급을 부여합니다.
실버는 30만원 미만, 골드는 30만원 이상, 플래티넘은 100만원 이상입니다.
## 등급별 혜택
적립률은 실버 1%, 골드 2%, 플래티넘 3%입니다.
골드 등급부터는 주문 금액과 관계없이 배송비가 무료입니다.
플래티넘 등급은 전용 상담 창구를 이용할 수 있습니다.
## 등급 산정 시점
등급은 매월 1일에 다시 계산되며, 계산된 등급은 한 달간 유지됩니다.
EOF
짧은 문서 세 개지만 RAG의 어려운 지점이 전부 들어 있습니다. “무료배송”이라는 단어가 배송 정책과 회원 등급 두 곳에 나오고, “며칠”이라는 질문에 대한 답이 7일, 30일, 3영업일로 여러 개이며, 환불과 반품과 취소가 뒤섞여 쓰입니다. 문서가 세 개일 때 잘 못 찾는 파이프라인은 3만 개일 때도 잘 못 찾습니다.
같은 쇼핑몰의 고객 문의를 분류하는 쪽은 프롬프트 엔지니어링 기초 3편에 있습니다.