플레이북
verified · type: tutorial · verified: 2026-08 · review: 90d · updated: 2026-08-09 · [agentic, concept]

RAG 파이프라인 만들기

문서를 잘라 넣고 검색해서 답하게 하는 것까지. 단계마다 기본값으로 뭘 고르고 언제 바꾸는지만 적었다. 개념은 embeddings-and-vector-search 로 위임한다.


0. 먼저 — RAG 를 안 만들어도 되는 경우

이 절을 맨 앞에 둔 이유가 있다. 대부분은 여기서 끝난다.

상황 대신 이걸
문서 전체가 컨텍스트에 들어간다 그냥 통째로 넣어라. 요즘 모델은 1M 토큰이다 (claude-family)
문서가 몇십 개 수준이고 자주 안 바뀐다 프롬프트 캐싱으로 통째로 캐시. prompt-caching
파일시스템·DB 를 검색할 수 있다 grep/SQL 을 툴로 주는 게 벡터검색보다 정확하다 (set-up-tool-use)
질문이 복잡해 여러 번 찾아야 한다 에이전틱 검색 — 모델이 스스로 검색 툴을 반복 호출

RAG 를 짓는 건 문서가 컨텍스트에 안 들어갈 만큼 많고, 자주 바뀌고, 질의가 단발성일 때다. 그게 아니면 위 네 줄이 더 싸고 정확하다.

롱컨텍스트가 RAG 를 없애지는 않는다. 규모가 커지면 결국 검색이 필요하다. 다만 시작부터 RAG 를 지을 이유는 대부분 없다.


그림 — RAG 두 개의 시간
색인할 때 — 문서가 바뀔 때만
문서청킹임베딩벡터 DB
질문할 때 — 요청마다
질문하이브리드 검색리랭킹컨텍스트 주입생성
두 줄의 비용 구조가 다르다 — 위 줄은 한 번, 아래 줄은 매번. 아래 단계들이 이 페이지의 1~4절이다.

1. 청킹 — 정답 없음, 512 토큰에서 시작

기본값: recursive 청킹, 512 토큰, 10~20% 오버랩 (verified 2026-08).

의미 기반(semantic) 청킹이 항상 이기지 않는다. 문서 종류에 따라 단순 recursive 분할이 더 나은 경우가 흔하다. 도메인마다 다르니 재보고 정하라 — 이게 정직한 답이다.

문서 유형 조정
FAQ·티켓처럼 짧은 문서 청킹 스킵. 문서 1개 = 청크 1개
기술·법률 문서 hierarchical parent-child — 작은 청크로 정밀 매칭, 생성 시엔 부모 전체를 넘김
표·코드가 많은 문서 구조 경계로 자르기. 표를 반으로 쪼개면 답이 망가진다

⚠️ 오버랩은 통념만큼 만능이 아니다. 리트리버 종류에 따라 이득 없이 저장·임베딩 비용만 늘 수 있다 (재확인 필요). 오버랩을 늘리기 전에 그게 실제로 recall 을 올리는지 재봐라.

RAG 실패의 대부분은 LLM 이 아니라 적재·청킹 단계에서 생긴다. 여기를 대충 하고 뒷단을 튜닝하는 게 가장 흔한 시간 낭비다.


2. 임베딩과 저장

모델 선택 기준(차원·다국어·비용)과 벡터DB 비교는 embeddings-and-vector-search 에 있다. 요약하면:

  • 이미 Postgres 를 쓰고 있으면 pgvector 로 시작하라. 전용 벡터DB 는 규모가 실제로 커진 뒤에.
  • 임베딩 모델은 나중에 바꾸면 전체 재색인이다. 처음에 다국어 지원 여부를 확인해라 — 한국어 문서가 섞이면 특히.
  • 청크와 함께 메타데이터(문서 ID, 섹션 제목, 갱신일)를 저장해라. 3단계 필터링과 6단계 인용에 쓴다.

3. 검색 — 하이브리드가 기본이다

dense(벡터) 단독은 정확 매칭을 놓친다. 제품 코드, 법조문 번호, 고유명사, 에러 코드 — 의미는 비슷한데 글자가 정확히 맞아야 하는 것들이다.

기본값: BM25(sparse) + dense 를 각각 top-50 검색 → RRF 로 합침.

RRF(Reciprocal Rank Fusion)는 순위만 쓰는 단순한 결합이다. score = Σ 1/(k + rank), k = 60 이 관례. 점수 스케일이 다른 두 검색기를 정규화 없이 합칠 수 있어서 널리 쓰인다. 일반 QA 라면 dense 0.6 / sparse 0.4 가중치에서 시작한다.

지연은 거의 안 늘고 recall 은 눈에 띄게 오른다. 하이브리드를 안 할 이유가 별로 없다.


4. 리랭킹 — 가장 가성비 높은 한 수

RAG 파이프라인에 하나만 더 붙일 수 있다면 리랭커다.

패턴: 20~50개 후보를 검색 → 리랭커로 상위 5개 추림 → LLM 에 전달.

cross-encoder 는 쿼리와 문서를 같이 읽어서 점수를 매긴다. 그래서 임베딩 유사도보다 정확하지만 느리다 — 수백만 건을 통째로 리랭크할 순 없다. 그래서 항상 "넓게 검색 → 좁게 리랭크" 2단이다.

선택지 특징
셀프호스트 cross-encoder (예: BAAI/bge-reranker-v2-m3) GPU 필요, 지연 낮음, 데이터 외부 유출 없음
매니지드 리랭킹 API 운영 부담 없음, 네트워크 왕복만큼 느림

정밀도가 확실히 오르는 대신 지연이 붙는다. 실시간 채팅이면 이 지연을 감당할 수 있는지 재봐라.


5. 프롬프트 조립

  • 가장 관련 높은 청크를 맨 끝에 둬라. 모델은 컨텍스트 끝에 더 주의를 준다. 중간에 묻히는 문제는 tokens-and-context-windows 참고.
  • 청크마다 출처 메타를 붙여라: [출처: {document_id} | 섹션: {heading}]
  • 조립한 컨텍스트를 무작정 키우지 마라. 길수록 좋아지지 않는다 — 리랭커로 걸러낸 소수만 넣는 게 낫다.

6. Grounding 과 인용

Claude 는 search_result 콘텐츠 블록으로 자체 문서를 웹 검색 결과처럼 인용하게 할 수 있다. 베타 헤더 없이 표준 Messages API 로 동작한다 (verified 2026-08).

{
    "type": "search_result",
    "source": "https://intra.example.com/policy/2026-q3",   # 필수
    "title": "2026 Q3 환불 정책",                            # 필수
    "content": [{"type": "text", "text": chunk_text}],      # 필수, 텍스트만
    "citations": {"enabled": True},                          # 기본 꺼짐 — 켜야 인용한다
}

두 가지로 넣을 수 있다 — 검색 툴이 tool_result 로 반환하거나(동적), user 메시지에 직접 넣거나(사전 조회). 둘 다 citations 를 켜면 별도 프롬프팅 없이 알아서 인용한다.

⚠️ 한 요청 안의 모든 search_resultcitations 설정이 같아야 한다. 섞으면 안 된다. 그리고 content 는 텍스트만 — 이미지는 못 넣는다.

인용을 강제하는 게 환각 완화에 실질적으로 가장 효과가 큰 축에 든다. hallucination 참고.


7. 평가 — 이거 없이 튜닝하지 마라

여기가 이 문서에서 제일 중요한 절이다. 평가 세트 없이 청킹 크기나 임베딩 모델을 바꾸는 건 눈 감고 손대는 것이다. 좋아졌는지 나빠졌는지 알 방법이 없다.

골든셋: 라벨링된 질의 50~100개. 도메인 전문가가 쓴 것 25~30개를 코어로 두고 나머지는 합성·실제 로그에서 채운다.

네 지표를 분리해서 봐라 — 검색이 틀린 건지 생성이 틀린 건지 구분돼야 고칠 수 있다:

지표 묻는 것 나쁘면 고칠 곳
context recall 필요한 정보가 검색됐나 청킹·검색
context precision 검색된 것 중 관련된 비율 리랭킹
faithfulness 답이 검색 결과만으로 뒷받침되나 프롬프트·인용
answer relevancy 답이 질문에 맞나 프롬프트

RAGAS 같은 도구가 이 지표들을 계산해준다. 권장 임계값이 돌아다니지만 표준이 아니다 — 프로젝트마다 다시 정해라 (재확인 필요). 청킹·임베딩·검색·프롬프트를 바꿀 때마다 CI 에서 돌려라.


운영에서 추가로

  • 시맨틱 캐싱 — 비슷한 질의가 반복되면 검색·생성을 건너뛴다. 반복 질의가 많은 서비스에서 효과가 크다.
  • 무결과 알림 — 검색 결과 0건 비율이 튀면 지식베이스 커버리지 구멍이다. 모니터링해라.
  • 에이전틱 RAG 는 필요할 때만. 여러 번 순차 검색이 필요한 복잡한 질의에만. LLM 호출이 배로 늘고 느려진다 — 대부분의 질의엔 과하다.

참고

출처: search_result 블록·인용은 Anthropic 공식 [HIGH]. 청킹·하이브리드·리랭킹·평가 기본값은 서드파티 프로덕션 가이드 [MED aggregator] — 수치가 아니라 방향으로 읽어라. 원본 → 2026-08-01-playbooks-tooluse-rag