임베딩 모델은 hard token limit 가 있어
임베딩 호출은 글자가 아니라 토큰 최대치까지 받아. 토큰은 모델 tokenizer 의 subword 조각 — 영어는 대충 0.75 단어/토큰. 한국어, 일본어, 코드는 훨씬 dense 함.
2026년 흔한 한도:
- OpenAI text-embedding-3-large: 8,192 토큰
- Voyage voyage-3-large: 32,000 토큰
- BGE-M3: 8,192 토큰
- BGE-small-en-v1.5: 512 토큰 (이거에 사람들 발 걸려)
- all-MiniLM-L6-v2: 256 토큰
한도 넘으면 무슨 일
거의 모든 API 가 조용히 truncate 해. 에러도 안 줘 — 모델은 텍스트 앞부분만 임베딩하고 나머지는 버림. 벡터는 멀쩡해 보이고, 검색은 잘 도는 것처럼 보이고, 긴 문서들의 뒷부분 절반을 다 잃어버리지.
silent truncation 방어법
- 전송 전 모델 tokenizer 로 토큰 수 카운트.
tokens > limit이면 청킹 (다음 트랙) 하거나 long-context 모델로.- ingest 후 청크 길이 분포 로깅. P99 가 정확히 limit 에 박혀있으면 데이터 잃고 있는 거야.