원문 청킹
원문을 400토큰 단위로 분할하고 40토큰을 겹쳐 검색에 사용할 원문 청크를 만듭니다.
입력과 출력
| 입력 | 문서 파싱이 만든 IDR |
| 출력 | 검색에 사용할 원문 청크 |
검색 단위 하나는 다음과 같은 형태입니다.
{
"unit_id": "ruf_11175e926dbb1e25f165a932", // 검색에 저장되는 원문 청크의 고유 ID
"document_id": "d002343_6b6d39ebe6", // 이 청크가 나온 문서의 ID
"text": "개구부 덮개 상부에서 작업 중 떨어짐", // 청크에 포함된 원문
"token_count": 400, // tokenizer로 계산한 청크의 토큰 수
"page_indices": [2, 3] // 청크가 걸쳐 있는 페이지 순서. 0부터 시작
}
내부 처리에서는 400토큰 청크를 fc_*로 기록하고, 검색에 저장하는 원문 단위를 ruf_*로 기록합니다. 두 ID는 한 문서 안에서 일대일로 연결됩니다.
ID 종류와 의미는 용어 사전에서 설명합니다.
동작 방식
- IDR의 본문을 읽기 순서대로 구성합니다.
- 본문을 최대 400토큰 단위로 나눕니다.
- 인접한 청크가 40토큰씩 겹치도록 구성합니다.
오버랩은 청크 경계에서 문맥이 끊기는 것을 줄이기 위해 적용합니다.
현재 production 설정
| profile key | 현재 production 값 | 의미 |
|---|---|---|
chunking.strategy | fixed_400_overlap40 | 고정 길이 청 킹 방식 |
chunking.max_tokens | 400 | 청크 하나의 최대 토큰 수 |
chunking.overlap_tokens | 40 | 인접 청크가 겹치는 토큰 수 |
청크 크기나 오버랩을 변경하면 검색 단위가 달라지므로 원문 청킹 이후 단계를 다시 처리하고 재색인해야 합니다(실행과 재처리).
코드 참조
| 확인할 내용 | 파일·심볼 |
|---|---|
| 청킹 구현 | backend/struct4search/ingest/stages/chunking/stage.py · FixedChunkRuntime |
| 분할 로직 | backend/struct4search/ingest/stages/chunking/core.py · make_fixed_chunks |
| 설정 | configs/ingest-production.yaml · chunking |