Гайд · TNWS AI

Как загрузить русские TXT-файлы в Haystack через TextFileToDocument

Haystack 3.1Python#Haystack#RAG#Python
5 мин—

Преобразуем UTF-8 файлы в Document, проверяем кодировку, содержимое и метаданные перед индексированием.

Применимость и задача

Поисковый запрос: «как загрузить русские TXT файлы Haystack TextFileToDocument». Материал сверён с официальной документацией Haystack 3.1 19 сентября 2026 года. Примеры рассчитаны на Python и пакет haystack-ai; для векторного примера дополнительно нужен пакет sentence-transformers-haystack. Демонстрационное InMemoryDocumentStore не рекомендовано разработчиком для production. Интерфейс командной строки ниже — Python API, а не названия пунктов графического меню.

TextFileToDocument принимает sources со списком путей либо ByteStream и возвращает список documents. Кодировка по умолчанию — utf-8; параметр encoding можно задать при создании компонента, а значение кодировки в метаданных ByteStream имеет приоритет. Метаданные передаются при run. Компонент преобразует текст, но сам по себе не создаёт поисковый индекс.

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

  1. Подготовьте один небольшой UTF-8 TXT-файл с двумя русскими предложениями и числом, заранее сохраните ожидаемую строку.
  2. Передайте объект Path внутри списка sources и укажите meta с ID набора документов.
  3. Прочитайте возвращённый список документов и проверьте текст, число и прикреплённые метаданные.
  4. Проверьте второй файл в другой кодировке отдельно; не смешивайте его с первой партией до явного решения о перекодировании.
  5. Только после успешного преобразования подключайте очистку, разбиение и DocumentWriter.

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

from pathlib import Path
from haystack.components.converters import TextFileToDocument

# На диске заранее существует policy-r7.txt в кодировке UTF-8.
path = Path("policy-r7.txt")
converter = TextFileToDocument(encoding="utf-8")
result = converter.run(sources=[path], meta={"batch": "R7"})
for document in result["documents"]:
    assert "14 дней" in document.content
    print(document.content, document.meta)

Пример предназначен для контролируемого теста на своих данных. Установите зависимости в отдельном окружении и зафиксируйте версии; при использовании локальной embedding-модели отдельно проверьте её доступность и разрешённость для вашего проекта. Код был проверен на синтаксис Python, но его вызовы Haystack в данном материале не выдаются за выполненный runtime-тест.

Вход и ожидаемый результат

Содержимое файла: «Возврат товара возможен 14 дней. Исключение: цифровой товар». Ожидается один объект Document, в чьём content присутствуют число 14 и исключение, а в meta присутствует batch=R7. Если на выходе появляются символы замены или исчезает отрицание, индексацию останавливают и проверяют кодировку и исходный файл.

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

Разбор ограничений и ошибок

Текстовый конвертер не понимает юридический смысл и не восстанавливает символы, потерянные при неверной кодировке. Поэтому отдельный контроль контента до разбиения обязателен. Если в организации старые файлы сохранены в Windows-1251, не переименовывайте их расширения в .txt и не надеетесь на автоматическое распознавание: сначала идентифицируйте кодировку, затем передайте соответствующий encoding или переведите файлы в UTF-8 в явном этапе подготовки. Важно отличать путь к файлу от произвольного URL: sources принимает локальные пути либо ByteStream, а загрузка удалённого объекта требует отдельного компонента и контроля доступа. Поле meta удобно для партии, но не заменяет устойчивый документальный ID и дату редакции; добавьте их в последующих шагах при контроле версий. Директория с пользовательскими файлами должна проходить проверку разрешённых путей, формата и размера на стороне приложения.

Проверочный сценарий на реальном корпусе

Соберите небольшой тестовый набор: файл с кириллицей и цифрами, пустой файл, файл с неожиданной кодировкой и файл с переведёнными строками. Для первого сравните исходный текст и содержимое Document посимвольно на критическом фрагменте, для второго решите, должны ли пустые документы попадать в индекс, для третьего ожидайте явный сбой или контролируемую перекодировку, для четвёртого проверьте, что переносы не склеили отрицание с соседней строкой. После конвертации выполните контрольный поиск по фразе «цифровой товар» лишь как дополнительный этап: отсутствие результата может происходить и из-за ретривера, и из-за изначального исчезновения текста. Если файл содержит Markdown или PDF, не выдавайте результат простого TXT-конвертера за полноценное сохранение структуры — используйте подходящий конвертер и профильную документацию. Сохраняйте лог ошибок по имени файла без утечки полного текста.

Критерии приёмки

  • Число 14 и исключение остались в содержимом.
  • Метаданные batch=R7 присутствуют.
  • Файлы иной кодировки не индексируются молча.

Не принимайте демонстрационный вывод за статистику качества. Для рабочего приложения повторите эти проверки на обезличенном наборе документов, измерьте результат после изменения версии корпуса и запретите доступ к источникам вне полномочий пользователя. Корректный ответ HTTP вашего сервиса не означает корректный ответ RAG-системы; последнее устанавливается сопоставлением факта с разрешённым источником.

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

  • Не считать преобразование индексацией.
  • Не угадывать кодировку по расширению .txt.
  • Не принимать произвольный пользовательский путь без проверки.

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

FAQ

Какая кодировка по умолчанию?

UTF-8.

Поддерживаются ли ByteStream?

Да, наряду с путями к файлам.

Создаёт ли компонент embeddings?

Нет, это только преобразование текста в Document.

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

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

Какая кодировка по умолчанию?

UTF-8.

Поддерживаются ли ByteStream?

Да, наряду с путями к файлам.

Создаёт ли компонент embeddings?

Нет, это только преобразование текста в Document.

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

Комментарии

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