Гайд · TNWS AI
Как загрузить русские TXT-файлы в Haystack через TextFileToDocument
Преобразуем 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. Компонент преобразует текст, но сам по себе не создаёт поисковый индекс.
Нумерованный порядок работы
- Подготовьте один небольшой UTF-8 TXT-файл с двумя русскими предложениями и числом, заранее сохраните ожидаемую строку.
- Передайте объект Path внутри списка sources и укажите meta с ID набора документов.
- Прочитайте возвращённый список документов и проверьте текст, число и прикреплённые метаданные.
- Проверьте второй файл в другой кодировке отдельно; не смешивайте его с первой партией до явного решения о перекодировании.
- Только после успешного преобразования подключайте очистку, разбиение и 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.
Читайте также
Как ограничить поиск документами одного клиента в Haystack
Фильтр meta.tenant в retriever, тест на утечку чужого документа и границы серверной авторизации.
Как настроить смысловой поиск в Haystack InMemoryEmbeddingRetriever
Индексируем документы и запрос одной embedding-моделью, проверяем размерность, top_k и качество на перефразировках.
Как избежать дублей документов в Haystack через DocumentWriter и DuplicatePolicy
Повторная индексация без случайных дублей: стабильные ID, режимы OVERWRITE, SKIP и FAIL и проверка числа записей.
Комментарии
Пока тихо. Скажите первое слово