Разделы документации
Потоки данных
Путь документа от источника до поискового индекса — извлечение и распознавание текста, чанкование, эмбеддинги, запись в векторное хранилище, переиндексация и её сроки.
Путь документа
Каждый документ проходит один и тот же конвейер:
- Получение. Воркер поручает исполнителю коннекторов забрать из источника новые и изменённые документы (у большинства источников — инкрементально, по времени изменения). Загруженные документы складываются пакетами в файловое хранилище, и уже оттуда их забирает конвейер обработки.
- Извлечение текста. Из файла достаётся текст — по типу файла. Там, где текстового слоя нет (скан, фотография документа, картинка внутри документа), текст распознаётся — см. «Распознавание текста».
- Чанкование. Текст режется на фрагменты (чанки) с перекрытием — так поиск находит точное место, а не документ целиком.
- Эмбеддинги. Каждый фрагмент превращается в вектор. Это делает либо локальный сервер эмбеддингов, либо облачный провайдер эмбеддингов, если он подключён — тогда запрос уходит к провайдеру напрямую, минуя локальный сервер.
- Запись. Векторы и текст фрагментов записываются в векторное хранилище (Qdrant), метаданные документа — в PostgreSQL.
После записи документ участвует в поиске. Сбой на отдельном документе не роняет весь пакет: документ помечается как неудачный и пропускается, остальные индексируются.
Тот же конвейер проходят документы, отправленные напрямую через API приёма данных, — отдельного пути для них нет.
Если настроены хуки, в конвейер добавляются две точки вызова:
- «Приём документов» — на каждый документ до его входа в конвейер: хук может изменить содержимое или отбросить документ, а жёсткая ошибка хука помечает неудачным весь пакет;
- «Отправка документов» — на каждый успешно проиндексированный документ после записи, без ожидания ответа. На повторных прогонах индексации вызывается только для публичных коннекторов.
Распознавание текста
Документы без текстового слоя Charo читает сам: страницу-скан, фотографию, картинку внутри документа. Распознавание встроено в конвейер индексации, включено всегда и отдельной настройки не имеет — специально включать его не нужно.
Работу выполняет тот же сервер моделей, который считает векторы: отдельный сервис для этого не разворачивается, а модели распознавания входят в его образ и при установке не скачиваются.
Что распознаётся
| Что | Как обрабатывается |
|---|---|
| постранично: страницы с текстовым слоем читаются как есть, страницы-сканы распознаются | |
| Файлы-картинки | JPG, PNG, TIFF, BMP, GIF, WebP — как одностраничный документ |
Картинки внутри .docx, .pptx, .doc | распознанный текст встаёт на место картинки — в свой абзац или на свой слайд |
| Вложения к сообщению в чате | распознаются сразу, чтобы модель увидела текст с картинки |
Формат определяется по содержимому файла, а не по расширению: картинка с чужим расширением всё равно будет прочитана.
Многостраничный TIFF разбирается по страницам. Анимации (GIF, APNG, анимированный WebP) не распознаются — разделите такой файл на отдельные изображения.
Не распознаются: картинки внутри таблиц .xlsx, книг .epub и писем
.eml, изображения на веб-страницах и по ссылкам при обходе сайта. Вложения
писем при этом распознаются — ограничение касается только картинок внутри
самих перечисленных форматов.
Распознаются кириллица и латиница, в том числе вперемешку в одной строке.
Что попадает в индекс
Распознанный текст ничем не отличается от извлечённого: он так же режется на фрагменты, так же участвует в поиске и так же цитируется в ответах со ссылкой на исходный документ.
Результат распознавания сохраняется: повторная индексация того же файла и та же страница в другом подключении читаются из кэша, а не распознаются заново. Кэш сбрасывается только при смене версии моделей распознавания.
Ошибки
Ошибки распознавания видны в карточке подключения — Админка → Коннекторы,
история попыток индексации. Charo называет причину по-русски, а под ней
показывает техническую строку: имя файла, место (page 3, picture 2) и код
отказа.
| Что говорит Charo | Что делать |
|---|---|
| Распознать не удалось: текста нет ни в слое документа, ни на картинке | Откройте файл и проверьте, есть ли на нём читаемый текст. Если это страница документа — документ не проиндексирован целиком; если картинка внутри документа — документ проиндексирован своим текстом, а строка называет саму картинку |
| Распознать не удалось из-за сервера моделей, а не из-за файла | Сервер моделей недоступен или не справился со страницей и после повторной попытки. Проверьте, что контейнер сервера моделей работает: следующий проход индексации возьмёт документ заново |
| Со страницы сайта ведёт ссылка на картинку | При обходе сайта картинки не распознаются — почти всегда это оформление страницы, и сообщение можно игнорировать |
Код отказа в технической строке уточняет причину: неподдерживаемый формат, повреждённое или слишком большое изображение, несколько кадров в файле, слишком плотный текст на странице, переполненная очередь распознавания.
Ресурсы
Модель распознавания загружается при первой же странице, которую надо прочитать, и занимает около 600 МБ памяти. Установка, в которую сканы не попадали, за неё не платит.
Что и когда индексируется
- Первичная индексация — сразу после создания коннектора: забирается всё доступное содержимое источника.
- Обновления — по расписанию, которое задаётся в настройках коннектора: забираются только изменения.
- Очистка устаревших документов — периодическая сверка с источником: документы, удалённые в источнике, удаляются из индекса.
- Синхронизация прав — отдельный цикл для коннекторов с наследованием прав доступа (см. «Права доступа»).
Полная переиндексация
Смена модели эмбеддингов (и часть настроек в настройках индексации) требует полной переиндексации: все документы заново проходят шаги 3–5, потому что старые векторы несовместимы с новой моделью.
Новая модель получает собственную коллекцию в векторном хранилище, а её настройки поиска до момента переключения хранятся отдельно от действующих. Поэтому пока идёт переиндексация:
- поиск работает по старому индексу — пользователи ничего не замечают;
- новый индекс строится параллельно;
- нагрузка на сервер эмбеддингов и на источники заметно выше обычной.
Момент переключения вы выбираете сами при запуске:
| Вариант | Когда происходит переключение |
|---|---|
| Переиндексировать все и переключить | когда все коннекторы успешно переиндексированы |
| Переиндексировать активные и переключить | то же, но приостановленные коннекторы не учитываются |
| Переключить до переиндексации | сразу; поиск ничего не находит, пока коннекторы не переиндексируются заново |
Документы, отправленные через API приёма данных, не переиндексируются ни при одном из вариантов: после переключения они пропадают из поиска, и вернуть их можно только повторной отправкой.
Сколько это занимает
Скорость упирается в расчёт эмбеддингов и в лимиты API источников. В зависимости от объёма корпуса полная переиндексация занимает часы или дни. Планируйте смену модели эмбеддингов на нерабочее время.
Поиск при этом не замедляется: внутри сервера эмбеддингов запросы пользователей имеют приоритет над фоновой индексацией.
Как отслеживать прогресс
- Админка → Подключённые коннекторы — статус по каждому коннектору: сколько документов проиндексировано, последняя успешная синхронизация, ошибки.
- Карточка коннектора показывает историю запусков индексации, синхронизаций прав и подробности последней ошибки.
- При полной переиндексации прогресс виден на странице настроек индексации; там же переиндексацию можно отменить — вернётся предыдущая модель.