Гайд · TNWS AI
Как загрузить только нужные файлы в LlamaIndex через SimpleDirectoryReader
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 не входит в перечень встроенных явно поддерживаемых типов: документация рекомендует отдельный загрузчик.
Нумерованный порядок работы
- Составьте список разрешённых файлов по утверждённому каталогу источников, исключив личные данные и временные копии.
- Начните с input_files, когда состав набора известен заранее; для всей директории используйте required_exts и явно решите, нужен ли recursive.
- Вызовите load_data и выведите количество объектов Document, имена файлов и короткие контрольные фразы.
- Проверьте отсутствие скрытого черновика и содержимое одного русского документа, особенно отрицания и цифры.
- Перед индексированием сохраните список путей и хешей исходных файлов как протокол загрузки.
Готовый шаблон 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.
Читайте также
Как измерить hit rate и MRR поиска в LlamaIndex RetrieverEvaluator
Размеченный вопрос, expected_ids и оценка позиции релевантного узла до тестирования ответов генератора.
Как ограничить размер пакета при индексации в LlamaIndex VectorStoreIndex
insert_batch_size при from_documents: контролируем память и задержки загрузки, не путая пакет с размером чанка.
Как обновить одну редакцию документа в LlamaIndex без смешивания версий
Стабильный id_, update_ref_doc и контроль старого и нового правила в поисковой выдаче.
Комментарии
Пока тихо. Скажите первое слово