Как это работает
Чанк должен содержать законченную мысль: если факт разрезан на два чанка, поиск найдёт обрывок, и ответ будет неполным. Overlap помогает сохранить смысл на границах, но слишком большой создаёт дубли в выдаче.
Границы лучше проводить по смысловым единицам: абзацам, заголовкам, пунктам. Простое разбиение по числу символов быстро реализуется, но чаще режет факты посередине.
Пример
1def split(text: str, size: int = 500, overlap: int = 50) -> list[str]:
2 step = size - overlap
3 return [text[i:i + size] for i in range(0, len(text), step)]Как применять в тестировании ИИ
Меняя размер чанка или overlap, пересчитывайте hit rate@k, recall и precision на наборе для поиска и сравнивайте с прошлым прогоном. Меняйте по одному параметру за раз и фиксируйте настройки чанкинга в записи прогона.
Типичные ошибки
- Менять размер чанка без замеров: оптимум зависит от ваших документов.
- Резать текст по числу символов, разрывая факты и таблицы.
- Не пересобирать метрики после смены настроек чанкинга.
Частые вопросы
Какой размер чанка выбрать для RAG?
Универсального значения нет. Слишком мелкие чанки теряют контекст, слишком крупные размывают релевантность. Подберите размер экспериментом, измеряя hit rate, recall и precision на своих вопросах.
Зачем нужен overlap между чанками?
Перекрытие сохраняет смысл на границах чанков, чтобы факт не потерялся при разрезании. Слишком большой overlap создаёт дубли и почти одинаковые фрагменты в выдаче.