C.W.K.
Stream
Lesson 03 of 05 · published

구조-aware: Markdown, HTML, 코드

~22 min · chunking, markdown, code

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

헤딩은 공짜 메타데이터

Markdown 과 HTML 은 일반 splitter 가 버리는 hierarchy 를 가지고 있어. 구조-aware splitter 는 헤딩 트리를 walk 하면서 부모-헤딩 path 를 모든 청크에 붙여놔. 이제 retrieval 결과가 단순 "...배포 워크플로우..." 가 아니라 "Operations > Deploy > Production rollback — 배포 워크플로우...". 모델은 context 공짜로 받고, 본인은 인용 breadcrumb 받음.

코드 split 은 다른 문제

일반 텍스트 splitter 는 Python 함수 중간을 자르고 Rust generic 중간을 잘라. 언어-aware splitter (LangChain 의 Language.PYTHON, tree-sitter, AST 기반) 써서 청크가 항상 일관된 함수, 클래스, 또는 top-level statement 가 되게 해. 검색 relevance 가 즉시 점프.

Code

breadcrumb 보존하는 Markdown 헤더 splitter·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', ' '))
Python-aware 코드 splitter (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

여러 페이지 Markdown 문서 (또는 본인 README + runbook). 일반 재귀 splitter 와 Markdown 헤더 splitter 로 같은 query 5개에 대해 top-3 retrieval 결과 비교. 어느 게 더 정확하고 인용 가능한 답을 주는지 봐.

Progress

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

댓글 0

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

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