Практический разбор: построить RAG по PDF: digital text и scans, OCR, layout analysis, headers, tables, page anchors, chunking и контроль качества.
Коротко о главном
Внутри могут быть текстовые слои, сканы, колонки, формы и вложенные изображения. Сначала классифицируйте страницы и выберите parser; единый extract_text для всего корпуса создаёт тихие пропуски. Citation ведёт в конкретную версию PDF, страницу и область. Eval включает сканы, две колонки, таблицы, сноски, rotated pages и документы с похожими заголовками.
PDF — контейнер, а не структура
Внутри могут быть текстовые слои, сканы, колонки, формы и вложенные изображения. Сначала классифицируйте страницы и выберите parser; единый extract_text для всего корпуса создаёт тихие пропуски.
Layout важнее сырого текста
Сохраняйте заголовки, колонки, списки, таблицы, подписи и порядок чтения. Выход в Markdown или структурированном JSON позволяет chunking по секциям, а не произвольным символам.
OCR требует измерения
Считайте confidence, пустые страницы, неизвестные символы и расхождение числа страниц. Низкое качество отправляйте в human review или quarantine, а не индексируйте как достоверный текст.
Колонтитулы и повторы
Повторяющиеся header/footer, номера страниц и водяные знаки загрязняют embeddings. Удаляйте их по layout-позиции и частоте, сохраняя исходный слой для аудита.
Таблицы и рисунки
Храните таблицу структурированно и в текстовом представлении; изображение связывайте с caption и surrounding text. Каждый производный объект ссылается на страницу и bounding box.
Цитаты и тесты
Citation ведёт в конкретную версию PDF, страницу и область. Eval включает сканы, две колонки, таблицы, сноски, rotated pages и документы с похожими заголовками.
Какой первый шаг?
Зафиксировать корпус, реальные запросы и baseline; без версий сравнение невоспроизводимо.
Что измерять?
Retrieval relevance, grounded correctness, p95 latency, стоимость и ошибки по сегментам.
Можно ли доверить оценку одной LLM?
Нет. LLM judge полезен как сигнал, но критические выборки требуют детерминированных проверок и экспертной разметки.
Как обновлять систему?
Через новую версию, offline eval, shadow, canary и заранее подготовленный rollback.
Что делать с чувствительными данными?
Минимизировать, ограничивать доступ, применять ACL до retrieval и задавать retention для traces и eval-наборов.
Как избежать каннибализации экспериментов?
Менять один слой за раз и хранить control, candidate, corpus version и сегментированные результаты.
← Все статьи блога