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 с индексом и выполняйте восстановление из оригиналов.