Гайд · TNWS AI

Как загрузить только нужные файлы в LlamaIndex через SimpleDirectoryReader

LlamaIndex FrameworkPython#LlamaIndex#Python#RAG
4 мин—

input_files, required_exts и recursive: не отправляем в индекс лишние файлы и проверяем метаданные источника.

Задача и применимость

Поисковый запрос: «как выбрать файлы для загрузки LlamaIndex SimpleDirectoryReader». Факты и синтаксис сверены с официальной документацией LlamaIndex Framework для Python 19 сентября 2026 года. Пример предназначен для актуального Python-пакета llama-index и указанных в коде интеграций; доступность конкретной модели и конфигурация её провайдера зависят от среды запуска. Если код обращается к embeddings или LLM, ключ задаётся через серверное окружение и здесь не приводится. Точный релиз локально не установлен, поэтому перед рабочим запуском фиксируйте номер установленной версии и повторите тест на ней.

SimpleDirectoryReader по умолчанию читает верхний уровень директории, а не её подпапки. Параметр input_files задаёт явный перечень, required_exts ограничивает расширения, recursive включает обход вложенных каталогов. По умолчанию текст ожидается в UTF-8. Файл JSON не входит в перечень встроенных явно поддерживаемых типов: документация рекомендует отдельный загрузчик.

Нумерованный порядок работы

  1. Составьте список разрешённых файлов по утверждённому каталогу источников, исключив личные данные и временные копии.
  2. Начните с input_files, когда состав набора известен заранее; для всей директории используйте required_exts и явно решите, нужен ли recursive.
  3. Вызовите load_data и выведите количество объектов Document, имена файлов и короткие контрольные фразы.
  4. Проверьте отсутствие скрытого черновика и содержимое одного русского документа, особенно отрицания и цифры.
  5. Перед индексированием сохраните список путей и хешей исходных файлов как протокол загрузки.

Готовый шаблон Python

from llama_index.core import SimpleDirectoryReader

reader = SimpleDirectoryReader(
    input_files=["data/policy-r7.txt", "data/faq-returns.md"],
    encoding="utf-8",
)
docs = reader.load_data()
for d in docs:
    print(d.metadata.get("file_name"), len(d.text), d.text[:80])

Код ниже в статье предназначен для тестовых источников без персональных сведений. Вызовы SDK не выполнялись в данном окружении с реальной моделью; синтаксис Python проверен отдельно. Не переносите вывод демонстрационного эксперимента на любой корпус и любого провайдера без повторной проверки.

Пример входа и ожидаемого результата

На входе policy-r7.txt со сроком «14 дней» и faq-returns.md с исключением для цифрового товара; рядом в папке находится draft-secret.txt. Ожидается загрузка данных только из двух явно перечисленных файлов и отсутствие draft-secret в списке метаданных. Число объектов Document проверяйте фактически: конвертер конкретного типа может разделить файл на части.

Сохраните входные файлы, идентификаторы документов и ожидаемое утверждение в отдельном проверочном наборе. При неуспехе выделяйте слой ошибки: чтение источника, преобразование в nodes, получение embedding, поиск, синтез ответа или UI. Правильная форма ответа ещё не гарантирует правильного происхождения сведений.

Диагностика и границы решения

Стратегия «прочитать всю папку» быстро приводит к попаданию черновиков, старых редакций и чужих данных в поисковую базу. Явный список input_files делает эксперимент воспроизводимым: такой же список можно использовать при проверке результата и откате. Если число файлов велико и вы выбираете required_exts, помните, что фильтр по суффиксу не является проверкой содержания, прав или версии. Файл с расширением .pdf может содержать скан без распознанного текста; проверяйте извлечённую фразу, а не только отсутствие ошибки загрузки. Смена recursive=False на True способна неожиданно добавить архив. Фильтрация путей со стороны приложения должна происходить до создания reader: не принимайте произвольный путь из пользовательского запроса. Поле file_name удобно для аудита, но прямой путь к локальному файлу не обязан быть публичным URL. Если кириллица повреждена при чтении, сначала выясните реальную кодировку файла и используйте параметр encoding, а не корректируйте уже неверный embedding.

Дополнительный проверочный сценарий

Для приёмки создайте четыре контрольных файла: текущую политику, старый архив, вложенный документ и файл без разрешения на загрузку. Тест должен фиксировать, какой из них входит в выдачу при выбранных параметрах. Сравните контрольные фразы с исходным текстом: число 14, слово «не» и конкретный артикул должны оставаться на месте. Разделяйте «файл прочитан» и «источник разрешён текущему читателю»: последнее надо дополнительно обеспечивать на уровне индекса и ответа. Для больших коллекций iter_data позволяет обрабатывать файлы последовательно, но список обработанных путей всё равно важен для воспроизводимости. Не обещайте, что любые файлы автоматически превращаются в качественный текст; проверяйте профиль конкретного типа и при необходимости используйте специализированный parser.

Критерии проверки

  • Ни один незаявленный файл не загрузился.
  • Ключевые факты сохранились в тексте.
  • Метаданные позволяют найти исходник.

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

Типичные ошибки и что не делать

  • Не использовать recursive без аудита вложенных папок.
  • Не считать расширение гарантией качества извлечения.
  • Не передавать пользовательский путь без серверной проверки.

Не передавайте ключи, личные документы и приватные пути в опубликованный пример или сторонний trace без оценки прав доступа. Не исправляйте отсутствие нужного текста одним только промптом: генератор не восстановит источник, который не загрузили или не нашли. При смене модели либо backend повторяйте тест на зафиксированном наборе вопросов.

FAQ

Как включить подпапки?

Укажите recursive=True.

Как загрузить явный список?

Передайте input_files.

Поддерживается ли JSON как стандартный тип?

Для JSON документация рекомендует отдельный loader.

Официальные источники

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

Как включить подпапки?

Укажите recursive=True.

Как загрузить явный список?

Передайте input_files.

Поддерживается ли JSON как стандартный тип?

Для JSON документация рекомендует отдельный loader.

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

Комментарии

Пока тихо. Скажите первое слово