본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

구조를 따라 나누기: 마크다운, HTML, 코드

~22 min · chunking, markdown, code

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

제목은 이미 들어 있는 메타데이터야

마크다운과 HTML에는 일반 분할기가 버리기 쉬운 계층 구조가 있어. 구조 기반 분할기는 제목 트리를 따라가며 상위 제목 경로를 모든 청크에 붙여. 그러면 검색 결과가 단순히 "...배포 작업 흐름..."으로 나오지 않고 "운영 > 배포 > 프로덕션 롤백 — 배포 작업 흐름..."처럼 나와. 모델에는 추가 문맥을 주고, 답변에는 출처를 따라갈 경로를 남기는 셈이지.

코드는 다른 방식으로 나눠야 해

일반 텍스트 분할기는 파이썬 함수나 러스트 제네릭 한가운데를 잘라 버릴 수 있어. LangChain의 Language.PYTHON, tree-sitter, AST처럼 프로그래밍 언어의 구조를 아는 분할기를 써서 청크 하나가 온전한 함수, 클래스, 최상위 문장이 되게 해. 검색 관련성이 바로 좋아질 거야.

Code

제목 경로를 보존하는 마크다운 분할기·python
from langchain_text_splitters import MarkdownHeaderTextSplitter

splitter = MarkdownHeaderTextSplitter(
    headers_to_split_on=[
        ('#',   'h1'),
        ('##',  'h2'),
        ('###', 'h3'),
    ],
    strip_headers=False,
)

chunks = splitter.split_text(open('runbook.md').read())
for c in chunks[:3]:
    print(c.metadata, '→', c.page_content[:80].replace('\n', ' '))
파이썬 구조를 따르는 코드 분할기(LangChain)·python
from langchain_text_splitters import RecursiveCharacterTextSplitter, Language

py_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.PYTHON, chunk_size=600, chunk_overlap=80,
)

chunks = py_splitter.split_text(open('app/services/embedding.py').read())
for c in chunks[:3]:
    print('---')
    print(c[:200])

External links

Exercise

여러 페이지로 된 마크다운 문서나 README와 운영 절차서를 준비해. 일반 재귀 분할기와 마크다운 제목 분할기로 각각 나눈 뒤, 같은 쿼리 다섯 개의 상위 검색 결과 세 개를 비교해 봐. 어느 쪽이 더 정확하고 출처를 제시하기 쉬운지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.