← 노드 한 장 전체#78 · Token Splitter
Token Splitter
32토큰으로 잘랐는데 글자가 깨졌다?
이 글은 이런 분께문서를 문자 수가 아닌 토큰 기준으로 자르고 실제 길이와 문자 손상까지 확인하려는 n8n 입문자

1분 영상은 @workflow.hanjang 에 순서대로 공개돼요
토큰은 문자나 단어와 같은 단위가 아니에요.
직접 쓴 가상 문서 1개(206자, cl100k_base 124토큰)를 native Token Splitter로 실제 나눴습니다. 설정은 Chunk Size 32 / Overlap 6, 결과는 5조각.
먼저 결과부터
실습: 런타임 고유 own store key → 문서 필드만 Default Data Loader → Token Splitter 32/6 → Simple Vector Store(Clear Store=false), 기존 text-embedding-3-small 연결. 실제 #74964 조각 5개를 [email protected] cl100k_base 참조 창과 대조해 모두 일치했습니다. 문자 길이 30/77/91/34/29, 재토큰화 32/31/32/32/20. 2번 조각의 대체문자 2개와 overlap 문자열 식별 한계를 명시했습니다. Encoding UI는 없고 내부 cl100k_base입니다.
우리가 실제로 돌린 기록 · 실행 #74964 · 2026-10-30
우리가 실제로 돌린 기록 · 실행 #74964 · 2026-10-30
따라 하기
실제로 실행한 워크플로우를 바탕으로 정리했어요. 계정·식별자는 공개용 값으로 치환했고, 그 밖의 차이는 아래 주의사항에 표시했어요. n8n 캔버스에서 +를 눌러 노드를 순서대로 추가하고 같은 값을 넣으면 돼요. 빨간 제목이 이번 편의 주인공 노드예요. 표 왼쪽은 n8n 편집기에 보이는 칸 이름, 오른쪽은 다운로드 JSON의 설정값이에요. 직접 입력하기 번거로우면 JSON을 받아 ⋯ → Import from File로 가져오세요.
Step 1. Manual Trigger 노드 추가이름: Run manually
설정 없이 그대로 추가해요.
Step 2. Code 노드 추가이름: Create unique own store fixture
| JavaScript | const executionId=String($execution.id||'');if(!executionId)throw Error('Missing execution ID');const storeKey=`EP78_OWN_TOKEN_STORE:${$workflow.id}:${executionId}:${Date.now()}:${Math.random().toString(36).slice(2)}`;return [{json:{sample:true,storeKey,document:"[EP78-A] 달빛 문구점은 파란 공책 세 권을 창가 선반에 놓았습니다. [EP78-B] A small robot checks the blue notebook and records a fictional delivery note. [EP78-C] 초록 연필 두 자루는 별도 상자에 담았습니다. 이 문서는 직접 쓴 가상 실습이며 고객 정보가 없습니다. [EP78-END]"}}]; |
Step 3. Simple Vector Store 노드 추가이름: Own Simple Vector Store
| Operation Mode | Insert Documents |
| Memory Key | ={{ $('Create unique own store fixture').first().json.storeKey }} |
| Clear Store | 꺼짐 |
Step 4. Default Data Loader 노드 추가이름: Default Data Loader
| Type of Data | JSON |
| Mode | Load Specific Data |
| Data | {{ $json.document }} |
| Text Splitting | Custom |
Step 5. Embeddings OpenAI 노드 추가이름: Embeddings OpenAI
| Model | text-embedding-3-small |
| Options › Dimensions | 256 |
| Options › Batch Size | 32 |
| Options › Encoding Format | Float |
Step 6. Token Splitter 노드 추가이름: Token Splitter
| Chunk Size | 32 |
| Chunk Overlap | 6 |
가져와서 쓸 때 확인할 것
- 공식 문서 개요는 BPE 토큰을 설명하지만 Chunk Size 파라미터 설명에는 characters라고 적힌 부분이 있습니다. 실제 native 구현과 cl100k_base 참조 재측정을 근거로 토큰 기준임을 검증했습니다.
- 이 버전에는 Encoding 필드가 없고 내부 cl100k_base가 사용됩니다. 모델·다른 splitter에서 쓰는 encoding과 같다고 추정하면 안 됩니다.
- 원본 토큰 창 길이와 복호화된 텍스트의 재토큰화 길이는 UTF-8 손상 등으로 달라질 수 있습니다. 실제 두 번째 조각은 32 원본 토큰 → 대체문자 2개 포함 → 재측정 31토큰이었습니다.
- Overlap 6은 원본 토큰 창을 기준으로 확인했습니다. 손상 경계가 있어 문자열 접두·접미 겹침만으로 단정할 수 없습니다.
- 짧은 한 문서 1개만 사용했고 sub-node의 첫 입력 item 특성을 피했습니다. 모든 입력 item별 독립 실행을 검증한 것은 아닙니다.
- Token Splitter는 Loader와 Vector Store 등 부모 실행이 필요합니다. 독립 노드 배치만으로 실제 실행을 증명할 수 없습니다.
- Public JSON도 매 실행 고유 storeKey를 만들고 그 값만 명시 참조하며 clearStore=false입니다. 기존 키를 붙여넣거나 Clear Store를 켜지 마세요.
- 문자 Splitter와 동일 문서 비교는 하지 않았습니다. 우열·문자 보존·검색 품질은 보장하지 않습니다.
- 채팅 호출 0, 임베딩 노드 실행 1회입니다. 5조각이 Batch Size 32 안에 들어갔으나 공급자 청구 로그를 조회해 별도 확인한 것은 아닙니다.
- YOUR_… 표시를 내 값으로 바꾸고, 계정이 필요한 서비스 노드만 자격 증명을 연결하세요. 그런 칸이나 노드가 없는 예제는 추가 계정 없이 실행할 수 있어요.
노드의 모든 옵션은 n8n 공식 문서에서 볼 수 있어요.