Image

Ускорьте понимание документов с помощью извлечения документов Agentic

Turbocharge Document Understanding Apps with Agentic Document Extraction 36e00294a18e93fdb1a99e0cba32a8a7 Анкит Кхаре

Обзор: чему вы научитесь

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

Полный код руководства доступен на GitHub — следуйте инструкциям и запустите пример приложения самостоятельно👨🏼‍💻.

406a4dd62e43c22f5b39c8b622cc3be1

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

b57fd6cc76d2d20737d711ed97b66f76

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

2c8b55d25015afdaff9ede07bc24f529

Рисунок 3 : Приложение также отображает ход рассуждений (цепочку мыслей), использованный для получения ответа, давая представление о том, как был сделан вывод.

1. Введение

В предыдущей публикации нашего блога мы создали приложение «Мульти-PDF чат с исследовательскими статьями», вызывая API извлечения документов Agentic напрямую через REST. Мы вручную:

  • Разделить PDF-файлы на части
  • Управляемый параллелизм и повторные попытки
  • Сшитые частичные ответы JSON
  • Вычисленные преобразования ограничивающего прямоугольника

Хотя это и дало нам базовые знания, процесс оказался довольно трудоёмким , особенно для больших или многочисленных PDF-файлов. Сегодня мы рассмотрим, как мы обновили то же приложение с помощью официальной библиотеки Python Agentic Document Extraction, которая элегантно оборачивает эту функциональность (и многое другое) всего в несколько вызовов функций. Мы удалили сотни строк «инфраструктурного» кода, получили дополнительные функции, такие как изображения фрагментов в ограничивающих рамках и визуальную отладку, и теперь анализируем PDF-файлы объёмом в несколько сотен страниц с минимальными усилиями.

2. Возможности библиотеки Python для извлечения документов Agentic

  1. Автоматическая обработка больших файлов
    • Вместо того, чтобы вручную разбивать 200-страничный PDF-файл на части, вы просто вызываете parse_documents([pdf_file]) . Библиотека разделяет, объединяет и возвращает единый консолидированный результат.
  2. Встроенный параллелизм
    • Настройте параллелизм, установив BATCH_SIZE × MAX_WORKERS через .env . Ручной ThreadPoolExecutor или циклы параллелизма не требуются.
  3. Структурированные фрагменты с заземлением
    • Каждый фрагмент включает ограничивающие рамки ( заземление ), которые точно определяют местоположение извлечённого текста. Идеально подходит для выделения наложений.
  4. Повторные попытки и обработка ошибок
    • Автоматическая экспоненциальная задержка для ответов 429 (ограничение по частоте) или 5xx — не требуется специальная логика. Если страницу невозможно проанализировать, она возвращается как «фрагмент ошибки», а не приводит к сбою приложения.
  5. Дополнительно :
    • Обрезка областей ограничивающих рамок на диск ( 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() , которая:

  1. Обрабатывает каждый файл параллельно (до указанного вами BATCH_SIZE ).
  2. Записывает результаты в формате 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»

Мы по-прежнему придерживаемся того же подхода «вопрос-ответ» :

  1. Извлеките текст PDF + данные ограничивающей рамки с помощью agentic-doc.
  2. Передайте этот структурированный JSON в GPT, указав ему возвращать «лучшие фрагменты», которые поддерживают его ответ.
  3. Выделите ограничивающие рамки на каждой странице.

Но теперь мы убрали весь пользовательский код управления фрагментами — библиотека сделала это за нас. Это значительно снижает вероятность возникновения трудноуловимых ошибок параллельной обработки или сбоев частичного слияния.

6. Когда я все еще могу использовать Raw REST?

Хотя SDK рекомендуется практически для всех проектов на базе Python, есть несколько случаев, когда вы все равно можете предпочесть прямые вызовы REST:

  1. Экосистема, не основанная на Python : если ваше приложение написано на Node.js, Go или другом языке, у вас не будет Python SDK.
  2. Сверхлегкие среды : для серверных функций с крайне ограниченными ресурсами (где невозможно установить дополнительные библиотеки) может быть достаточно простого requests.post() .
  3. Пользовательские экспериментальные конечные точки : если вам нужно опробовать совершенно новые или экспериментальные параметры, ещё не представленные в 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

✅ Найденные теги: новости, Ускорьте
Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых