Анкит Кхаре
Обзор: чему вы научитесь
- Создание чат-приложений с использованием библиотеки Python Agentic Document Extraction
- Возможности библиотеки Python Agentic Document Extraction
- Анализируйте PDF-файлы в больших объемах с помощью одного вызова функции — ручное разделение не требуется
- Ускорьте существующую настройку «Чата с PDF» с помощью встроенного параллелизма
- Определите ограничивающую рамку каждого фрагмента для выделения наложений или извлечения фрагментов
- Изучите расширенные возможности (визуальная отладка, параллельная обработка, кадрирование)
- Решите , когда вы по-прежнему предпочитаете необработанные вызовы REST в специализированных сценариях.
Полный код руководства доступен на GitHub — следуйте инструкциям и запустите пример приложения самостоятельно👨🏼💻.

Рисунок 1: Простое приложение «Чат с PDF». Пользователь загрузил PDF-файл, и библиотека Python Agentic Document Extraction предварительно вычислила структурированные данные для каждой страницы.

Рисунок 2 : Ответ приложения на вопрос с визуально обоснованными ответами. Соответствующий фрагмент PDF-файла выделен, а ответ цитируется со ссылкой на страницу.

Рисунок 3 : Приложение также отображает ход рассуждений (цепочку мыслей), использованный для получения ответа, давая представление о том, как был сделан вывод.
1. Введение
В предыдущей публикации нашего блога мы создали приложение «Мульти-PDF чат с исследовательскими статьями», вызывая API извлечения документов Agentic напрямую через REST. Мы вручную:
- Разделить PDF-файлы на части
- Управляемый параллелизм и повторные попытки
- Сшитые частичные ответы JSON
- Вычисленные преобразования ограничивающего прямоугольника
Хотя это и дало нам базовые знания, процесс оказался довольно трудоёмким , особенно для больших или многочисленных PDF-файлов. Сегодня мы рассмотрим, как мы обновили то же приложение с помощью официальной библиотеки Python Agentic Document Extraction, которая элегантно оборачивает эту функциональность (и многое другое) всего в несколько вызовов функций. Мы удалили сотни строк «инфраструктурного» кода, получили дополнительные функции, такие как изображения фрагментов в ограничивающих рамках и визуальную отладку, и теперь анализируем PDF-файлы объёмом в несколько сотен страниц с минимальными усилиями.
2. Возможности библиотеки Python для извлечения документов Agentic
- Автоматическая обработка больших файлов
- Вместо того, чтобы вручную разбивать 200-страничный PDF-файл на части, вы просто вызываете parse_documents([pdf_file]) . Библиотека разделяет, объединяет и возвращает единый консолидированный результат.
- Встроенный параллелизм
- Настройте параллелизм, установив BATCH_SIZE × MAX_WORKERS через .env . Ручной ThreadPoolExecutor или циклы параллелизма не требуются.
- Структурированные фрагменты с заземлением
- Каждый фрагмент включает ограничивающие рамки ( заземление ), которые точно определяют местоположение извлечённого текста. Идеально подходит для выделения наложений.
- Повторные попытки и обработка ошибок
- Автоматическая экспоненциальная задержка для ответов 429 (ограничение по частоте) или 5xx — не требуется специальная логика. Если страницу невозможно проанализировать, она возвращается как «фрагмент ошибки», а не приводит к сбою приложения.
- Дополнительно :
- Обрезка областей ограничивающих рамок на диск ( grounding_save_dir ).
- Визуализация ограничивающих рамок фрагментов на аннотированных изображениях ( viz_parsed_document ).
- Анализ нескольких файлов или даже удаленных URL-адресов за один вызов функции.
Другими словами, библиотека освобождает нас от необходимости следить за конвейером PDF → JSON, поэтому мы можем сосредоточиться на создании функций, а не на написании шаблонного кода.
3. Обновление нашего приложения «Чат с PDF»
3.1 До: Ручной REST
Напомним, что изначально мы:
- Разделите каждый PDF-файл на несколько двухстраничных буферов, чтобы соответствовать ограничению конечной точки REST.
- Распараллеленные вызовы с помощью пользовательского пула потоков.
- Реконструированные частичные результаты JSON для каждого фрагмента.
- Преобразованные координаты ограничивающей рамки из PDF в пространство изображения.
Это работало, но было громоздко, особенно для документов объемом более 50 страниц.
3.2 После: Анализ одним вызовом
Вот суть нашего нового подхода, заменяющего всю эту фрагментарную логику:
из agentic_doc.parse импорт parse_documents
def parse_pdf_with_agentic (file_stream):
«»»
Использует agentic-doc SDK для анализа PDF-файла в памяти.
Возвращает постраничную карту {page_number: [chunks]} для дальнейшей обработки.
«»»
# parse_documents() может обрабатывать объекты, похожие на файлы, или пути к файлам/URL-адреса
результаты = parse_documents([file_stream])
parsed_doc = результаты[0]
page_map = {}
для куска в parsed_doc.chunks:
для заземления в куске.заземление:
# grounding.page начинается с 0, давайте используем индексацию, начинающуюся с 1
page_idx = grounding.page + 1
page_map.setdefault(page_idx, [])
# Преобразовать (l, t, r, b) → (x, y, ширина, высота)
коробка = заземление.коробка
x1, y1 = ящик.l, ящик.t
w, h = ящик.r — ящик.l, ящик.b — ящик.t
page_map[page_idx].append({
«bboxes»: [[x1, y1, w, h]],
«captions»: [chunk.text], # извлеченный текст
# При необходимости можно сохранить chunk.chunk_type или chunk.chunk_id
})
вернуть page_map
Вот и всё. Никакого явного параллелизма, никаких частичных слияний фрагментов — библиотека берёт всё это на себя.
4. Работа с расширенными функциями SDK
4.1 Параллелизм и обработка ошибок
- Параллелизм задается через переменные окружения:
BATCH_SIZE= 4 # обрабатывать до 4 файлов одновременно
MAX_WORKERS= 5 # каждый файл получает до 5 параллельных запросов
Повторные попытки при превышении скорости или сетевых ошибках выполняются автоматически. Настройте их в .env :
МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО_ПОВТОРЕНИЙ= 80
MAX_RETRY_WAIT_TIME= 30
RETRY_LOGGING_STYLE= inline_block
Если библиотека не может обработать определённые страницы, в результате будет получено сообщение chunk_type=error . Это означает, что вы можете пропустить их или корректно обработать в своём приложении.
4.2 Обрезка заземления на диск
Если вам нужны небольшие изображения PNG ограничивающей рамки каждого фрагмента, просто укажите grounding_save_dir:
результаты = parse_documents(
[pdf_файл],
grounding_save_dir= «my_crops»
)
для фрагмента в results[0].chunks:
для заземления в куске.заземление:
если grounding.image_path:
print ( «Фрагмент сохранен в:» , grounding.image_path)
Теперь каждая область ограничивающего прямоугольника извлекается как отдельное изображение. Это очень полезно для отладки извлечения таблиц или проверки выравнивания текста.
4.3 Визуализация
Вместо того чтобы вручную писать код наложения ограничивающего прямоугольника, вы можете создавать аннотированные страницы с помощью одной функции:
из agentic_doc.utils импорт viz_parsed_document
из agentic_doc.config импорт VisualizationConfig, ChunkType
изображения = viz_parsed_document(
» some_doc.pdf» ,
результаты[0], # Проанализированный документ
output_dir= «viz_output» ,
viz_config=VisualizationConfig(
толщина=2,
масштаб_шрифта=0.8,
# Раскрасить некоторые типы фрагментов по-разному
цветовая_карта={
ChunkType.TITLE: (255, 0, 0), # красный
ChunkType.TABLE: (0, 255, 0), # зеленый
}
)
)
На каждой странице PDF-файла вы получите одно аннотированное изображение с цветными полями и метками фрагментов. Идеально для визуального подтверждения точности извлечения.
4.4 Пакетный анализ
Нужно проанализировать много PDF-файлов одновременно? Используйте функцию parse_and_save_documents() , которая:
- Обрабатывает каждый файл параллельно (до указанного вами BATCH_SIZE ).
- Записывает результаты в формате JSON на диск, автоматически присваивая им имена.
из agentic_doc.parse импорт parse_and_save_documents
pdf_list = [ «doc1.pdf» , «doc2.pdf» , «https://example.com/doc3.pdf» ]
json_paths = parse_and_save_documents(pdf_list, result_save_dir= «parsed_results/» )
print ( «JSON сохранен в:» , json_paths)
5. Интеграция с нашим потоком «Чат с PDF»
Мы по-прежнему придерживаемся того же подхода «вопрос-ответ» :
- Извлеките текст PDF + данные ограничивающей рамки с помощью agentic-doc.
- Передайте этот структурированный JSON в GPT, указав ему возвращать «лучшие фрагменты», которые поддерживают его ответ.
- Выделите ограничивающие рамки на каждой странице.
Но теперь мы убрали весь пользовательский код управления фрагментами — библиотека сделала это за нас. Это значительно снижает вероятность возникновения трудноуловимых ошибок параллельной обработки или сбоев частичного слияния.
6. Когда я все еще могу использовать Raw REST?
Хотя SDK рекомендуется практически для всех проектов на базе Python, есть несколько случаев, когда вы все равно можете предпочесть прямые вызовы REST:
- Экосистема, не основанная на Python : если ваше приложение написано на Node.js, Go или другом языке, у вас не будет Python SDK.
- Сверхлегкие среды : для серверных функций с крайне ограниченными ресурсами (где невозможно установить дополнительные библиотеки) может быть достаточно простого requests.post() .
- Пользовательские экспериментальные конечные точки : если вам нужно опробовать совершенно новые или экспериментальные параметры, ещё не представленные в SDK. В этом случае вы можете вручную вызвать конечную точку с расширенным набором параметров.
Тем не менее, для любого проекта Python, особенно если вы цените параллелизм и простоту обслуживания кода, SDK является явным победителем.
7. Результаты и повышение производительности
В наших тестах замена старого подхода REST в том же приложении «Чат с PDF»:
- Сократил наш код «анализа PDF» примерно на 70%.
- Сокращение времени анализа больших PDF-файлов (более 100 страниц) до 50% благодаря встроенному параллелизму, который более эффективно обрабатывает частичные слияния и повторные попытки.
- Повышенная надежность. Благодаря автоматическому откату и последовательному сообщению об ошибках (включая фрагменты ошибок) мы столкнулись с гораздо меньшим количеством проблем с анализом.
Нам также нравится встроенная опция grounding_save_dir для отладки документов со сложной версткой. Когда пользователь жалуется: «Он пропустил эту цифру», мы быстро проверяем изображения фрагментов, чтобы понять, как это было интерпретировано.
8. Заключение и дальнейшие шаги
С помощью одной библиотеки вы сможете анализировать визуально сложные документы, получать визуально обоснованные ответы и избавляться от накладных расходов на простые REST-вызовы. Надеемся, это избавит вас от множества проблем и сэкономит время при разработке приложений. Если у вас есть вопросы или отзывы, смело пишите — будем рады помочь! Также присоединяйтесь к лучшему Discord-сообществу Visual AI и общайтесь с нами там.
Важные ресурсы
Зарегистрируйтесь на платформе: Landing AI Platform
Пример приложения GitHub Repo: полный исходный код для приложения Streamlit QA
Документация по библиотеке Python для извлечения документов агента: репозиторий, содержащий код библиотеки Python
Получите свой ключ API: шаги для получения ключа API LandingAI
Документация по REST API: Документация по REST API
Источник: landing.ai


























