Разделы документации
Платформа

Потоки данных

Путь документа от источника до поискового индекса — извлечение и распознавание текста, чанкование, эмбеддинги, запись в векторное хранилище, переиндексация и её сроки.

Путь документа

Каждый документ проходит один и тот же конвейер:

  1. Получение. Воркер поручает исполнителю коннекторов забрать из источника новые и изменённые документы (у большинства источников — инкрементально, по времени изменения). Загруженные документы складываются пакетами в файловое хранилище, и уже оттуда их забирает конвейер обработки.
  2. Извлечение текста. Из файла достаётся текст — по типу файла. Там, где текстового слоя нет (скан, фотография документа, картинка внутри документа), текст распознаётся — см. «Распознавание текста».
  3. Чанкование. Текст режется на фрагменты (чанки) с перекрытием — так поиск находит точное место, а не документ целиком.
  4. Эмбеддинги. Каждый фрагмент превращается в вектор. Это делает либо локальный сервер эмбеддингов, либо облачный провайдер эмбеддингов, если он подключён — тогда запрос уходит к провайдеру напрямую, минуя локальный сервер.
  5. Запись. Векторы и текст фрагментов записываются в векторное хранилище (Qdrant), метаданные документа — в PostgreSQL.

После записи документ участвует в поиске. Сбой на отдельном документе не роняет весь пакет: документ помечается как неудачный и пропускается, остальные индексируются.

Тот же конвейер проходят документы, отправленные напрямую через API приёма данных, — отдельного пути для них нет.

Если настроены хуки, в конвейер добавляются две точки вызова:

  • «Приём документов» — на каждый документ до его входа в конвейер: хук может изменить содержимое или отбросить документ, а жёсткая ошибка хука помечает неудачным весь пакет;
  • «Отправка документов» — на каждый успешно проиндексированный документ после записи, без ожидания ответа. На повторных прогонах индексации вызывается только для публичных коннекторов.

Распознавание текста

Документы без текстового слоя Charo читает сам: страницу-скан, фотографию, картинку внутри документа. Распознавание встроено в конвейер индексации, включено всегда и отдельной настройки не имеет — специально включать его не нужно.

Работу выполняет тот же сервер моделей, который считает векторы: отдельный сервис для этого не разворачивается, а модели распознавания входят в его образ и при установке не скачиваются.

Что распознаётся

ЧтоКак обрабатывается
PDFпостранично: страницы с текстовым слоем читаются как есть, страницы-сканы распознаются
Файлы-картинки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 источников. В зависимости от объёма корпуса полная переиндексация занимает часы или дни. Планируйте смену модели эмбеддингов на нерабочее время.

Поиск при этом не замедляется: внутри сервера эмбеддингов запросы пользователей имеют приоритет над фоновой индексацией.

Как отслеживать прогресс

  • Админка → Подключённые коннекторы — статус по каждому коннектору: сколько документов проиндексировано, последняя успешная синхронизация, ошибки.
  • Карточка коннектора показывает историю запусков индексации, синхронизаций прав и подробности последней ошибки.
  • При полной переиндексации прогресс виден на странице настроек индексации; там же переиндексацию можно отменить — вернётся предыдущая модель.