본문으로 건너뛰기

원문 청킹

원문을 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 종류와 의미는 용어 사전에서 설명합니다.

동작 방식

  1. IDR의 본문을 읽기 순서대로 구성합니다.
  2. 본문을 최대 400토큰 단위로 나눕니다.
  3. 인접한 청크가 40토큰씩 겹치도록 구성합니다.

오버랩은 청크 경계에서 문맥이 끊기는 것을 줄이기 위해 적용합니다.

현재 production 설정

profile key현재 production 값의미
chunking.strategyfixed_400_overlap40고정 길이 청킹 방식
chunking.max_tokens400청크 하나의 최대 토큰 수
chunking.overlap_tokens40인접 청크가 겹치는 토큰 수

청크 크기나 오버랩을 변경하면 검색 단위가 달라지므로 원문 청킹 이후 단계를 다시 처리하고 재색인해야 합니다(실행과 재처리).

코드 참조

확인할 내용파일·심볼
청킹 구현backend/struct4search/ingest/stages/chunking/stage.py · FixedChunkRuntime
분할 로직backend/struct4search/ingest/stages/chunking/core.py · make_fixed_chunks
설정configs/ingest-production.yaml · chunking