Содержание
  1. Прямой ответ и границы продукта
  2. Условия доступа и источник актуальных требований
  3. Порядок действий: загрузка PDF через DoclingLoader
  4. Учебный пример и критерии проверки
  5. Смежные варианты и выбор по задаче
  6. Типичные проблемы и способы диагностики
  7. Частые вопросы
Гайды

Как загрузить PDF в LangChain

22 октября 2026 · 13 минут чтения

Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 22 октября 2026 года; цитаты источников приведены дословно. Обновлено: октябрь 2026.

Как загрузить PDF в LangChain: выберите загрузчик документов, передайте ему путь к файлу или URL, вызовите load() для всего файла либо lazy_load() для потоковой обработки. В документации LangChain метод load() описан как загрузка всех документов сразу, а lazy_load() — как потоковая выдача документов, полезная для больших наборов данных. Дальше PDF превращается в объекты Document, которые идут в разбиение, эмбеддинги и поиск.

Прямой ответ и границы продукта

LangChain — это фреймворк для приложений на языковых моделях, и загрузка PDF здесь решается через отдельный класс-загрузчик. В документации проекта загрузчики собраны в каталог интеграций: у каждого указаны класс, пакет, поддержка локального запуска, сериализации и JavaScript. Каталог описывает загрузчики как способ получать документы из разных источников и приводить их к единому виду.

Границы стоит держать в голове сразу. LangChain сам не «читает» PDF: он вызывает библиотеку-парсер, установленную рядом. Для PyPDFLoader это pypdf из пакета langchain-community, для PyMuPDFLoader — PyMuPDF, для PDFMinerLoader — PDFMiner, для PDFPlumberLoader — pdfplumber. В документации эти четыре загрузчика помечены как community-решения, а DoclingLoader и UnstructuredLoader идут отдельными пакетами с собственными возможностями.

Второй момент — где именно выполняется разбор. Часть загрузчиков работает локально на вашем железе, часть обращается к внешнему API. В каталоге интеграций у UnstructuredLoader отмечена поддержка локального режима и JavaScript, а у DoclingLoader — локальный запуск при отсутствии поддержки JavaScript. Разделение важно: локальный разбор не отправляет файл наружу, API-разбор требует ключа и сетевого доступа.

Третий момент — формат результата. Метод load() возвращает список объектов Document с полем page_content и словарём metadata; lazy_load() выдаёт документы через итератор. Метаданные различаются от загрузчика к загрузчику: у UnstructuredLoader в примере документации видны source, coordinates с системой PixelSpace, layout_width, layout_height, file_directory, filename, languages, last_modified, page_number, filetype, category и element_id. Такой набор позволяет фильтровать страницы и элементы до отправки в модель.

Отдельно про доступность. Источники, которые мы прочитали, описывают установку пакетов и запуск кода без привязки к стране. Утверждать что-либо о работе сервисов из России на этом основании нельзя, поэтому проверяйте доступность конкретного API-провайдера самостоятельно.

Счёт по выдаче: скачали подборку результатов веб-поиска по запросу «Как загрузить PDF в LangChain»: текст отдали 8 из 10. Медиана объёма читаемого текста топа — 1851 слово. Метку 2026 года несут 5 из 8 прочитанных страниц.

Условия доступа и источник актуальных требований

Актуальные требования живут в документации LangChain по интеграциям. Именно там перечислены классы загрузчиков и их пакеты, и именно оттуда стоит брать имена модулей перед установкой. Каталог обновляется вместе с релизами, поэтому сверяйтесь с ним.

Установка зависит от выбранного загрузчика. Для Docling в документации указана команда pip install -qU langchain-docling. Для локального Unstructured приводится pip install "langchain-unstructured[local]", а для варианта, совместимого с API-разбором, — pip install -qU langchain-unstructured unstructured-client unstructured "unstructured[pdf]" python-magic. Системные зависимости в документации Unstructured перечислены отдельно: libmagic, poppler, tesseract, а для XML и HTML дополнительно libxml2 и libxslt.

Ключи и переменные окружения. Для API-разбора Unstructured документация предлагает сохранить ключ в переменную UNSTRUCTURED_API_KEY и передавать его в загрузчик через api_key. Для примеров с HuggingFace в документации Docling упоминается переменная HF_TOKEN, повышающая квоту Inference API.

Провайдеры моделей перечислены в отдельном каталоге интеграций. Там у пакетов отмечена поддержка JavaScript и TypeScript: у langchain-anthropic, langchain-google-genai, langchain-huggingface, langchain-elasticsearch, langchain-astradb, langchain-oracledb, langchain-unstructured стоит отметка поддержки, а у langchain-nvidia-ai-endpoints, toolbox-langchain, langchain-google-community, langchain-graph-retriever, langchain-oci такой отметки нет. Эти данные нужны, когда вы выбираете, чем генерировать ответ поверх найденных фрагментов.

Ещё одна опора — таблица совместимости у конкретного загрузчика. У Docling в документации приведена строка langchain_docling.loader langchain-docling с отметками локального запуска, сериализации и поддержки JavaScript. У Unstructured строка выглядит как UnstructuredLoader langchain-unstructured с отметками локального запуска и JavaScript. Такие таблицы экономят время: видно, можно ли запускать разбор без сети.

Практический порядок: откройте страницу интеграции нужного загрузчика, скопируйте команду установки, проверьте список системных зависимостей, задайте переменные окружения для ключей. После этого переходите к коду. Если что-то падает на импорте, причина обычно в неполной установке, и разбор таких случаев есть в статье LangChain не работает: причины и решения.

Порядок действий: загрузка PDF через DoclingLoader

Разберём документированный путь на примере Docling. В документации LangChain показан минимальный сценарий: импорт загрузчика, путь к файлу, создание объекта и вызов загрузки.

PYTHON5 строк
from langchain_docling.loader import DoclingLoader

FILE_PATH = "https://arxiv.org/pdf/2408.09869"
loader = DoclingLoader(file_path=FILE_PATH)
documents = loader.load()

Первый шаг — установка пакета командой из документации. Второй — импорт класса DoclingLoader из модуля langchain_docling.loader. Третий — подготовка пути: параметр file_path в документации описан как источник в виде одной строки с URL или локальным файлом либо итерируемого объекта из таких строк. Четвёртый — создание загрузчика. Пятый — вызов load() и получение списка документов.

Для больших наборов документация предлагает потоковый вариант. В примере показан цикл по loader.lazy_load(), где каждый документ обрабатывается по мере поступления. Тот же приём описан в общем каталоге загрузчиков: lazy_load() выдаёт документы потоком и подходит для крупных наборов данных.

Режим экспорта задаётся параметром export_type. В документации перечислены два значения: ExportType.DOC_CHUNKS как значение по умолчанию, когда каждый входной документ разбивается на части и каждая часть становится отдельным Document, и ExportType.MARKDOWN, когда каждый входной документ сохраняется как один Document. Выбор влияет на то, что попадёт в векторное хранилище.

У загрузчика Docling в документации перечислены и другие параметры: converter для конкретного конвертера, convert_kwargs для аргументов конвертации, md_export_kwargs для настроек экспорта в Markdown, chunker для конкретного чанкера в режиме doc-chunk, meta_extractor для извлечения метаданных. Все они необязательные, и начинать стоит без них.

Проверка результата. В документации Docling приведён вывод первых трёх документов: первый содержит строку вида arXiv:2408.09869v5 [cs.CL] 9 Dec 2024, второй — заголовок отчёта, версию и список авторов, третий — начало аннотации. Такой вывод показывает разбиение на текстовые блоки; отдельный Document в режиме DOC_CHUNKS соответствует чанку, который может включать сведения со страниц документа.

Если нужен разбор с координатами элементов, документация Unstructured приводит другой пример. Там загрузчик создаётся из списка путей, а в метаданных документа видны координаты блока в пиксельной системе, ширина и высота макета, номер страницы и категория элемента. Это пригодится, когда нужно вернуть читателю ссылку на конкретное место в PDF.

Учебный пример и критерии проверки

Соберём упражнение, которое можно выполнить на своём файле. Возьмите PDF на несколько страниц с заголовками и таблицей. Задача — получить документы, убедиться в корректности разбора и найти фрагмент по вопросу.

Шаг первый. Загрузите файл через DoclingLoader с export_type=ExportType.DOC_CHUNKS. Шаг второй. Выведите первые несколько документов и посмотрите на page_content. Шаг третий. Соберите из полученных документов векторное хранилище и подключите поиск с небольшим числом возвращаемых фрагментов. Шаг четвёртый. Задайте вопрос по содержанию файла и посмотрите, какие фрагменты вернулись в качестве контекста.

В документации Docling показан близкий сценарий: загрузка отчёта, разбиение, построение хранилища на Milvus с эмбеддингами HuggingFace, создание цепочки поиска и генерации, вывод ответа и источников. В примере используется шаблон запроса с блоком контекста и вопросом, а также вывод первых символов каждого найденного фрагмента вместе с метаданными.

Критерии самостоятельной проверки:

Что проверяем Признак успеха Признак проблемы
Разбор текста В page_content читаемые предложения Строки из случайных символов
Разбиение Части не обрываются посреди слова Части короче одного предложения
Метаданные Для Docling есть source и dl_meta; номер страницы при наличии ищется во вложенных doc_items → prov → page_no. Не удаётся привязать фрагмент к исходному файлу.
Поиск Возвращаются фрагменты с нужной темой Фрагменты из других разделов
Ответ Опирается на найденный контекст Ссылается на сведения вне файла

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

Проверка на объёме. Загрузите файл целиком через load() и тот же файл через lazy_load(), сравните число полученных документов. Совпадение говорит о том, что потоковый режим не теряет части. Расхождение — повод разобраться в настройках разбиения.

Проверка на смешанном наборе. Документация Unstructured показывает загрузку списка файлов разных типов в одном вызове: PDF и текстовый файл обрабатываются вместе, и в выводе видно имя файла рядом с содержимым. Такой тест показывает, как ведёт себя конвейер, когда на входе не только PDF.

Критерий по метаданным особенно полезен. Если в документах нет номера страницы, вы не сможете показать читателю, откуда взялся ответ. Метаданные Unstructured в примере включают page_number и coordinates, а метаданные Docling содержат сведения об источнике и структуре. Наличие этих полей — условие для честной ссылки на первоисточник.

Смежные варианты и выбор по задаче

Загрузчиков PDF в каталоге LangChain много, и выбор определяется содержимым файла и требованиями к разбору. Ниже сведены варианты, которые описаны в документации проекта.

Загрузчик Пакет Особенность по документации
PyPDFLoader langchain-community Загрузка PDF через pypdf
PyMuPDFLoader langchain-community Загрузка PDF через PyMuPDF
PDFMinerLoader langchain-community Загрузка PDF через PDFMiner
PDFPlumberLoader langchain-community Загрузка PDF через pdfplumber
DoclingLoader langchain-docling Разбор PDF через Docling, локальный запуск
UnstructuredLoader langchain-unstructured Разбор PDF через открытую библиотеку Unstructured
UpstageDocumentParseLoader отдельный пакет Разбор PDF через Upstage
MinerU отдельный пакет Разбор PDF и других документов
UnDatasIO отдельный пакет Разбор PDF через UnDatasIO
OpenDataLoader PDF отдельный пакет Разбор PDF через OpenDataLoader
CVFileLoader отдельный пакет Загрузка файлов PDF/A-3u с встроенными данными
pdfmuse отдельный пакет Детерминированный разбор PDF и DOCX с координатами и таблицами
oxidize-pdf отдельный пакет Разбор PDF на движке Rust с разбиением под RAG
pdf-inspector отдельный пакет Разбор PDF через pdf-inspector

Как выбирать. Для простого текстового PDF хватает community-загрузчика на pypdf. Для файлов с таблицами и сложной вёрсткой документация описывает Docling с распознаванием структуры таблиц и разметкой блоков. Для смешанного набора файлов удобен Unstructured, который принимает список путей и умеет работать как локально, так и через API. Для случаев, где важны точные координаты блока, документация приводит pdfmuse с координатами и таблицами, а также oxidize-pdf с разбиением под RAG.

Отдельная ветка — разбор через API. В документации Unstructured показан загрузчик с partition_via_api=True, собственным клиентом, настройками повторов и разбиением PDF на диапазоны страниц. В логе видно, как документ делится на части, каждая отправляется отдельным запросом, а результаты собираются в общий список. Такой путь подходит для больших файлов, когда локальный разбор занимает слишком много времени.

Ещё вариант — загрузка по URL. В документации Docling путь задаётся ссылкой на PDF, а в документации Unstructured показана загрузка веб-страницы через параметр web_url с метаданными о языке, типе файла и адресе. Для PDF логика та же: источником может быть ссылка.

Если вы строите диалог поверх документов, посмотрите материал про Ollama ошибка 500: диагностика и решение — там разобраны сбои локального запуска моделей, которые часто идут в одной связке с загрузкой файлов.

Типичные проблемы и способы диагностики

Первая группа проблем связана с установкой. Импорт падает с ошибкой модуля — значит, пакет не установлен или установлен не тот. Сверьте имя пакета со строкой в каталоге интеграций: у Docling это langchain-docling, у Unstructured — langchain-unstructured. Для локального Unstructured документация отдельно перечисляет системные библиотеки, и их отсутствие даёт сбой на этапе разбора.

Вторая группа — предупреждения модели при разборе. В документации Docling приведено сообщение о том, что длина последовательности токенов превышает заданный максимум для модели, и обработка такой последовательности приведёт к ошибкам индексации. Сообщение появляется при работе с длинными фрагментами и указывает на необходимость разбиения.

Третья группа — пустой или мусорный текст. Причина обычно в самом PDF: сканированные страницы содержат изображения, и текстовый слой в них отсутствует. Проверяется просто: откройте файл и попробуйте выделить текст мышью. Если выделение не работает, нужен разбор с распознаванием, и здесь пригодятся загрузчики с поддержкой OCR.

Четвёртая группа — потеря структуры. Таблицы превращаются в набор чисел без привязки к строкам, заголовки сливаются с абзацами. Диагностика: выведите несколько документов подряд и сравните с исходной страницей. Если структура важна, переходите на загрузчик с разметкой блоков и координатами.

Пятая группа — ошибки сети при API-разборе. В документации Unstructured показана настройка повторов с экспоненциальной задержкой и указанием собственного адреса сервера. Если запросы падают, проверьте ключ, адрес и настройки повторов.

Шестая группа — расхождение числа документов. Загрузите файл двумя способами и сравните результат. Разница говорит о настройках разбиения.

Диагностический порядок, который экономит время:

  1. Проверьте, что пакет установлен и импортируется.
  2. Загрузите одну страницу и посмотрите page_content.
  3. Выведите метаданные и убедитесь, что есть источник и номер страницы.
  4. Сравните load() и lazy_load() по числу документов.
  5. Проверьте поиск на вопросе, ответ на который точно есть в файле.
  6. Посмотрите, какие фрагменты вернулись в контекст.

Если сбой происходит на этапе обращения к модели, пригодится разбор в статье Как подключить Gemini к n8n — там показана работа с ключами и запросами к провайдеру.

Частые вопросы

Как загрузить PDF в LangChain?

Для Docling установите langchain-docling, импортируйте DoclingLoader и передайте путь или URL в file_path. Метод load() вернёт список Document с текстом и метаданными; lazy_load() выдаст итератор документов. Имена параметров у других загрузчиков сверяйте с их документацией.

Какой загрузчик PDF выбрать в LangChain?

Для простого текста подойдут community-загрузчики на pypdf, PyMuPDF, PDFMiner или pdfplumber. Для таблиц и сложной вёрстки в документации описан Docling с распознаванием структуры таблиц. Для смешанного набора файлов удобен Unstructured, который принимает список путей и работает локально либо через API.

Почему PDF загружается пустым?

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

Как проверить, что PDF разобран правильно?

Выведите несколько документов подряд и сравните с исходными страницами. Убедитесь, что части не обрываются посреди слова, а в метаданных есть источник и номер страницы. Затем задайте вопрос, ответ на который точно есть в файле, и посмотрите, какие фрагменты вернулись в контекст.

Что делать с длинным PDF?

Используйте потоковую загрузку через lazy_load(), которая выдаёт документы по мере обработки. Для API-разбора документация Unstructured показывает разбиение файла на диапазоны страниц с отправкой частей отдельными запросами. Дополнительно настройте разбиение на фрагменты подходящего размера перед построением хранилища.

Промпт, чтобы получить от модели разбор структуры загруженного PDF:

ТЕКСТ14 строк
Ты помогаешь разобрать PDF-документ, загруженный в LangChain. Ниже контекст — фрагменты, полученные загрузчиком.

Контекст:
[вставьте сюда содержимое page_content из полученных Document]

Задача: [ваша задача, например — составить оглавление документа]

Сделай следующее:
1. Определи, к каким разделам относятся фрагменты.
2. Перечисли заголовки в порядке следования.
3. Отметь фрагменты, где текст разобран неполно или содержит мусор.
4. Для каждого вывода укажи номер страницы из метаданных.

Отвечай по-русски, кратко, без вступлений.

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

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

3 материала