Игорь Градов
Игорь Градов
6 мин
ai

RAG нейросети для PDF с таблицами и графиками: гайд по NVIDIA NeMo Retriever

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

RAG нейросети для PDF с таблицами и графиками: гайд по NVIDIA NeMo Retriever

Именно эту задачу решает мультимодальный RAG (Retrieval-Augmented Generation, генерация ответов с опорой на найденные фрагменты документа) на базе NVIDIA NeMo Retriever. На выходе вы получите рабочий конвейер: загрузили PDF, извлекли всё содержимое, задали вопрос и получили ответ с цитатой из конкретной страницы.

Почему это важно

Обычный текстовый RAG нейросети теряет таблицы и графики, а это часто самая ценная часть отчёта или презентации. NeMo Retriever обрабатывает все элементы страницы и позволяет начать локально, без видеокарты и без ключа API, а затем масштабировать конвейер через облачные эндпоинты NVIDIA.

Туториал опубликован в официальном репозитории NVIDIA NeMo Retriever. Конвейер разделён на два этапа: первый работает офлайн на процессоре и извлекает текст, второй подключает облачные модели NVIDIA NIM для распознавания таблиц, графиков, генерации векторных представлений (эмбеддингов) и ответов с цитатами. Такая архитектура удобна для экспериментов: можно проверить базовую часть бесплатно, а платные возможности добавить позже.

Что понадобится?

  • Python 3.12 (именно эта версия, NeMo Retriever проверяет при старте)
  • Google Colab или локальная среда (GPU на первом этапе не нужен)
  • Пакет nemo-retriever, устанавливается через pip
  • NVIDIA API Key (формат nvapi-...), нужен только для второго этапа с облачными моделями. Получить можно бесплатно на сайте NVIDIA
  • Тестовый PDF: скрипт скачивает файл multimodal_test.pdf из репозитория NVIDIA автоматически
  • Время: первый этап занимает пару минут, полный конвейер с облачными эндпоинтами укладывается в 10 минут

Пошаговая инструкция

1. Проверьте версию Python и установите пакет

Скрипт сам проверяет, что используется Python 3.12, и останавливается с понятной ошибкой, если версия другая. Установка одной командой:

pip install -q --ignore-installed PyJWT nemo-retriever openai

После установки импортируйте основные модули: create_ingestor для построения конвейера, to_markdown и to_markdown_by_page для рендера результатов, Retriever для поиска по извлечённому содержимому.

2. Скачайте тестовый документ

Скрипт автоматически загружает PDF из репозитория NVIDIA, если файла ещё нет в рабочей папке:

DOC = "multimodal_test.pdf"
if not os.path.exists(DOC):
    sh(f"curl -sL -o {DOC} "
       "https://raw.githubusercontent.com/NVIDIA/NeMo-Retriever/main/data/multimodal_test.pdf")

3. Извлеките текст офлайн, без GPU и без API-ключа

Это первый этап, и он полностью локальный. Используется метод PDFium для извлечения текста:

offline = (
    create_ingestor(run_mode="inprocess", allow_no_gpu=True)
    .files(DOCS)
    .extract(
        extract_text=True,
        extract_tables=False, extract_charts=False,
        extract_images=False, extract_infographics=False,
        method="pdfium",
    )
)
df_offline = offline.ingest()

На выходе вы получите DataFrame с текстом каждой страницы. Можно сразу проверить результат, выведя первые 400 символов первой страницы.

4. Подключите NVIDIA API Key для мультимодальной обработки

Ключ можно передать через переменную окружения NVIDIA_API_KEY или ввести интерактивно. Скрипт проверяет, что ключ начинается с nvapi-.

5. Запустите полный мультимодальный конвейер

На этом этапе подключаются облачные модели NVIDIA NIM. Конвейер выполняет сразу несколько операций:

  • Распознаёт элементы страницы (модель nemotron-page-elements-v3)
  • Извлекает таблицы, графики и инфографику
  • Разбивает текст на фрагменты по 512 токенов (токен, минимальная единица текста для модели) с перекрытием в 64 токена
  • Удаляет дубликаты по хешу содержимого и пересечению областей на странице
  • Генерирует эмбеддинги моделью llama-nemotron-embed-1b-v2
  • Загружает результат в векторную базу LanceDB
ing = (
    create_ingestor(run_mode="inprocess", allow_no_gpu=True, error_policy="collect")
    .files(DOCS)
    .extract(
        extract_text=True, extract_tables=True,
        extract_charts=True, extract_infographics=True,
        method="pdfium", dpi=200,
        table_output_format="markdown",
        api_key=API_KEY, request_timeout_s=120.0,
        split_config={"text": {"max_tokens": 512, "overlap_tokens": 64}},
    )
    .dedup(content_hash=True, bbox_iou=True, iou_threshold=0.45)
    .embed(embedding_endpoint=EMBED_URL, model_name=EMBED_MODEL, api_key=API_KEY)
    .vdb_upload(vdb_op="lancedb", vdb_kwargs={"uri": "./lancedb", "table_name": "colab_demo", "overwrite": True})
)
df = ing.ingest(show_progress=True)

6. Проверьте извлечённые элементы

После обработки скрипт выводит количество найденных таблиц, графиков, инфографик и изображений. Страницы рендерятся в Markdown для визуальной проверки.

7. Настройте поиск и генерацию ответов

Конвейер поддерживает плотный поиск по эмбеддингам, ранжирование результатов визуально-языковой моделью (llama-nemotron-rerank-vl-1b-v2), фильтрацию по метаданным и генерацию ответов с цитатами через llama-3.3-nemotron-super-49b-v1.5. Для оценки качества поиска предусмотрена метрика recall-at-k (доля релевантных документов среди первых k найденных).

Как это выглядит на практике

На вход подаётся PDF с таблицами и графиками. После офлайн-извлечения (этап 1) вы видите в DataFrame текст каждой страницы. После полной обработки (этап 2) в тех же данных появляются отдельные строки для таблиц в формате Markdown, описания графиков и инфографики. Задаёте вопрос по содержимому таблицы, и модель возвращает ответ с указанием конкретной страницы и элемента, откуда взята информация.

Частые ошибки
  • Неверная версия Python. Пакет nemo-retriever требует ровно 3.12. На 3.11 или 3.13 скрипт остановится с ошибкой при импорте. В Colab по умолчанию стоит 3.12, но если вы меняли рантайм, верните обратно.
  • Забытый API-ключ на втором этапе. Без ключа nvapi-... облачные эндпоинты не отвечают. Первый этап отработает, но таблицы и графики останутся неизвлечёнными.
  • Таймаут при обработке больших файлов. Параметр request_timeout_s по умолчанию 120 секунд. Для документов на десятки страниц увеличьте его или разбейте файл.
  • Перепутаны модули импорта. Пути к to_markdown и Retriever менялись между версиями пакета. Скрипт из туториала пробует оба варианта через try/except, не упрощайте эту часть.

Что делать с этим прямо сейчас?

Разработчику в России. Первый этап конвейера работает полностью локально, без GPU и без обращения к внешним API. Это значит, что вы можете обрабатывать конфиденциальные PDF на своём сервере. Для масштабирования через NVIDIA NIM проверьте доступность эндпоинтов из вашей сети и учтите, что данные уходят на серверы NVIDIA.

Автору на Дзене. Если вы пишете обзоры, аналитику или образовательный контент и работаете с источниками в PDF, такой RAG нейросети позволяет задавать вопросы прямо к документу и получать ответ с точной ссылкой на страницу. Это быстрее, чем листать отчёт вручную.

Предпринимателю. Технология подходит для внутренних баз знаний, где важны таблицы и графики: финансовые отчёты, техническая документация, маркетинговые исследования. Из доступных в РФ аналогов для базового текстового RAG нейросети можно посмотреть на YandexGPT API и GigaChat API, но мультимодальное извлечение таблиц и графиков на уровне NeMo Retriever они пока не предлагают.

Мнение редакции dzen.guru

Главная ценность этого конвейера в том, что он разделён на бесплатную локальную часть и облачную. Вы не платите, пока тестируете на простых PDF с текстом. Платные модели подключаются ровно в тот момент, когда нужны таблицы и графики. По моим наблюдениям, большинство туториалов по RAG нейросети требуют GPU или платный ключ с первой строчки, здесь порог входа ниже.

Честная оговорка: туториал показан на одном тестовом PDF из репозитория NVIDIA. На реальных документах с нестандартной вёрсткой, сканами или рукописными пометками качество извлечения может быть заметно хуже. Перед внедрением в продакшн протестируйте на своих файлах.

Попробуйте AI-инструменты для авторов

Если вы хотите использовать нейросети для работы с контентом на Дзене, начните с проверенных инструментов и шаблонов промптов от dzen.guru.

Перейти к инструментам

Конвейер собирается за десять минут, первый этап бесплатный и не требует видеокарты. Попробуйте на своём PDF и проверьте, находит ли модель ответ в таблице, которую вы раньше искали глазами.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Большие языковые модели пропускают джейлбрейки: какие риски это создаёт и как защититься
ai

Большие языковые модели пропускают джейлбрейки: какие риски это создаёт и как защититься

Большие языковые модели (LLM, нейросети, которые генерируют текст и код по запросу) обучены отказывать на опасные вопросы, но злоумышленники научились обходить…

6 мин
Self hosted LLM vs облако: год в Selectel показал, когда своя модель выгоднее API
ai

Self hosted LLM vs облако: год в Selectel показал, когда своя модель выгоднее API

Контекст — это не про IQ модели, а про безопасность данных: если код нельзя отправить наружу, выбор делается не между «лучшей» и «худшей» моделью, а между…

5 мин
ai

OpenAI впервые остановила новую модель: та научилась взламывать системы без человека

OpenAI второго июня приостановила внутреннюю разработку новой модели Astra, которая по результатам собственных проверок компании может обладать критическими…

4 мин