Ingestion — production-конвейер

Загрузка файла — только начало. Конвейер должен определить тип, извлечь текст и структуру, нормализовать данные, нарезать chunks, назначить metadata, построить embeddings и атомарно опубликовать новую версию.

Сохраняйте оригинал и provenance

Исходный объект храните неизменяемо вместе с checksum, source URI, временем получения и владельцем. Каждый chunk должен ссылаться на документ, страницу или секцию, чтобы ответ можно было проверить и удалить.

Parsing и OCR проверяются отдельно

Измеряйте пустые страницы, порядок чтения, таблицы, повторяющиеся headers и качество OCR. Документ с успешным HTTP-статусом, но потерянным текстом должен попасть в quarantine, а не в индекс.

Idempotency и версии

Ключ обработки строится из source ID, версии pipeline и checksum. Повторный event не создаёт дубликаты. Изменение parser, chunking или embedding создаёт новую версию индекса, а не смешивает несовместимые записи.

Атомарная публикация

Сначала полностью подготовьте новую версию, выполните validation, затем переключите alias. Пользователь не должен видеть половину старых и половину новых chunks. Ошибки отправляйте в dead-letter queue с причиной и безопасным retry.

Удаление и права

Удаление источника должно каскадно убрать chunks, embeddings и caches. ACL переносится из доверенной системы и проверяется до retrieval. Не извлекайте tenant из текста документа.

Наблюдаемость и контроль

Считайте documents accepted/rejected, pages extracted, chunks per document, duplicates, lag, embedding errors и orphan records. Регулярно сверяйте source catalog с индексом и выполняйте восстановление из оригиналов.

С чего начать?
С ограниченного корпуса, реальных запросов и измеримого baseline. Зафиксируйте версии данных, retrieval и модели до эксперимента.
Какие метрики обязательны?
Retrieval quality, correctness ответа, p95 latency, стоимость и ошибки по отдельным сегментам запросов.
Можно ли копировать настройки из документации?
Только как baseline. Финальные параметры выбираются по вашему корпусу, фильтрам, языку и нагрузке.
Как выпускать изменение?
Собрать новую версию рядом, прогнать offline eval и shadow, затем canary с готовым rollback.
Что логировать?
Trace ID, версии pipeline и индекса, transformed queries, candidate IDs, filters и итоговые метрики без лишнего чувствительного payload.
Как избежать утечки данных?
Проверять identity и ACL до retrieval, изолировать кэши и повторно проверять права при показе citations.
← Все статьи блога