Как нарезать документы на фрагменты для RAG: рекурсивная нарезка, нарезка по смыслу, late chunking, скользящее окно — и какие метаданные хранить у каждого фрагмента?
Нарезка на куски фиксированного размера (fixed-size chunking) — запасной вариант. Продвинутые стратегии: рекурсивная (LangChain RecursiveCharacterTextSplitter идёт по иерархии разделителей `
→
→ . → ), по смыслу (SemanticChunker ставит границу там, где соседние предложения расходятся по смыслу), late chunking («поздняя нарезка»: прогоняем весь документ через модель за один проход, поэтому каждый фрагмент знает контекст всего документа — Jina Embeddings v3; с 2026 то же самое доступно «из коробки» в voyage-context-4 с авточанкингом), скользящее окно (мелкий фрагмент + нахлёст, ради точности), по структуре документа (сплиттер по заголовкам Markdown или по коду). Схема метаданных обязательно содержит: source, doc_id, chunk_id (неизменяемый), parent_doc_id, page/section, created_at, author, acl_tags, content_hash, language — это позволяет отсеять лишних кандидатов ещё до поиска и поднять нужное выше в выдаче.