LLM 엔지니어링11장 · 폐쇄망 문서 파이프라인과 폐쇄형 RAG9 / 23← 이전목차다음 →MetaContents

11장. 폐쇄망 문서 파이프라인과 폐쇄형 RAG

조각과 메타데이터

도서관 책 등에는 청구기호 라벨이 붙어 있어서, 사서는 책을 펴 보지 않고도 분야와 위치를 압니다. RAG 의 조각에도 글과 함께 라벨을 붙입니다. 어느 문서의 어느 절인지, 누가 볼 수 있는지, 언제 쓴 몇 판인지입니다.

조각 하나에 붙는 글, 출처, 등급, 판과 날짜의 네 가지를 견준 카드

네 카드는 조각 하나가 가진 것입니다. 글은 "[제목] 절 이름"으로 시작하는 본문이고, 출처는 경로와 문서 제목, 등급은 1 공개, 2 사내, 3 비밀, 판과 날짜는 버전과 작성일입니다. 글은 임베딩해서 찾는 데 쓰고, 나머지는 거르고 출처를 보여 주는 데 씁니다. 여기서 청구기호 라벨이 메타데이터입니다.

조각 하나의 생김새

칸예쓰는 곳
idhr/휴가규정_2026.html#2지우고 고칠 때 찾는 이름
글[휴가 규정] 반차 와 본문임베딩, LLM 에 보여 줄 자료
경로, 제목hr/휴가규정_2026.html, 휴가 규정답의 출처, 문서 단위로 지우기
등급1사용자에 따라 거르기
버전, 작성일2, 2026-02-02옛 판 거르기, "언제 기준인가" 답하기

글 앞에 문서 제목과 절 이름을 붙이는 까닭은 7장에서 본 것과 같습니다. "반차" 절의 본문에는 "휴가"라는 낱말이 없어도, 앞에 붙인 "[휴가 규정]" 덕에 휴가 질문과 가까워집니다.

조각을 만드는 꼴

Python
doc = {"경로": "hr/휴가규정_2026.html", "제목": "휴가 규정", "등급": 1, "버전": 2, "작성일": "2026-02-02"}
section, body = "반차", "반차는 4시간 단위로 씁니다. 2026년부터 반차는 쓰는 날 오전 9시까지만 신청하면 됩니다."

# 글에는 제목과 절 이름을 앞에 붙이고, 나머지 라벨은 문서에서 그대로 옮긴다
chunk = {"id": doc["경로"] + "#1", "글": f"[{doc['제목']}] {section}\n{body}", **doc}
print(chunk)

코드에 나오는 함수

코드쉬운 뜻
doc = {...}문서 하나의 라벨(경로, 제목, 등급, 버전, 작성일)이다
section, body = "반차", "…"절 이름과 본문을 한 줄에서 두 이름에 나눠 담는다
doc["경로"] + "#1"경로 뒤에 조각 번호를 붙여 조각마다 다른 id 를 만든다
f"[{doc['제목']}] {section}\n{body}""[제목] 절 이름" 한 줄과 본문을 줄바꿈(\n)으로 잇는다. 바깥이 큰따옴표라 안의 키는 작은따옴표로 적는다
**doc사전 doc 의 키와 값을 모두 풀어 새 사전에 그대로 옮겨 담는다

이 코드가 뜻하는 것

도서관에서 새 책에 라벨을 붙이는 일로 읽어 봅니다. 책등에는 청구기호 라벨을, 앞장에는 "어느 서가, 누구나 열람 가능, 2판" 같은 도장을 찍습니다. 책의 내용은 그대로 두고, 찾고 거르는 데 필요한 것만 겉에 붙입니다. 여기서 책의 내용이 "글", 청구기호가 "id", 도장들이 **doc 으로 옮겨 온 라벨입니다.

줄하는 일쉽게 말하면
doc = {...}문서의 라벨을 준비한다도서 대장에 적힌 책 정보
section, body = ...절 이름과 본문을 정한다책의 한 장(章)
"id": doc["경로"] + "#1"조각의 이름을 만든다청구기호
"글": f"[{doc['제목']}] {section}\n{body}"제목과 절 이름을 본문 앞에 붙인다장 첫머리에 책 제목 적기
**doc문서의 라벨을 조각에 모두 옮긴다도장 찍기

교안을 만든 PC 에서 찍힌 사전은 'id': 'hr/휴가규정_2026.html#1', '글': '[휴가 규정] 반차\n반차는 …' 뒤에 '경로', '제목', '등급': 1, '버전': 2, '작성일': '2026-02-02' 가 이어졌습니다. 조각 하나만 보고도 어느 문서에서 왔고 누가 볼 수 있는지 알 수 있다는 뜻입니다. 등급과 버전은 따옴표 없는 정수로 들어가 있어 "1 이하" 같은 거르기에 바로 쓸 수 있습니다.

주의할 점

  • 메타데이터의 값은 거르기에 쓸 꼴로 맞춥니다. 등급을 "공개", "1", 1 로 섞어 적으면 "1 이하" 같은 거르기가 틀립니다. 이 장은 정수로 맞춥니다.
  • 벡터DB 마다 메타데이터에 넣을 수 있는 값의 종류가 다릅니다. Chroma 는 글자, 숫자, 참거짓 같은 단순한 값만 받으므로 목록이나 사전은 글로 바꿔 넣습니다.
← 이전 절11장 · 중복과 옛 판 거르기다음 절 →11장 · 벡터DB 고르기