Как искать по документам с помощью терминала и здравого смысла

09 апр 2026

Репозиторий давно не обновлялся

Последнее обновление было 6 месяцев назад.

1,869
142
8
6 месяцев

Представьте ситуацию: у вас в папке лежат сотни PDF-отчетов, десяток вордовских спецификаций и пара презентаций. Вам нужно быстро найти, в каком из этих файлов упоминается механизм аутентификации через сторонние сервисы. Обычный grep тут бесполезен — он не умеет читать бинарные форматы и «не понимает» контекст. Можно, конечно, потратить полдня на написание скрипта на Python с использованием LangChain, но иногда хочется просто запустить команду в консоли и получить результат.

Недавно я наткнулся на semtools от команды LlamaIndex. Это небольшая утилита на Rust, которая делает ровно то, что обещает: парсит документы разных форматов и позволяет искать по ним, используя семантический поиск прямо в терминале.

Что умеет этот инструмент

Проект решает три прикладные задачи: превращение «сложных» форматов в понятный Markdown, быстрый локальный поиск по смыслу и возможность задать вопрос по содержимому файлов нейронке.

Парсинг без боли

Команда semtools parse берет ваши PDF, DOCX или PPTX и прогоняет их через LlamaParse. По умолчанию результат выплевывается в формате Markdown. Это удобно, потому что с текстом в Markdown работать гораздо проще, чем с громоздкими объектами из библиотек для работы с PDF.

Интересный момент в реализации: инструмент поддерживает конкурентные запросы. Если закинуть сразу пачку файлов, он не будет обрабатывать их по одному, а отправит их пачкой (по умолчанию 10 штук одновременно), что существенно экономит время.

Реклама

Поиск, который понимает контекст

Самая полезная, на мой взгляд, часть — semtools search. В отличие от классического поиска по ключевым словам, здесь используются эмбеддинги. Внутри крутится модель potion-multilingual-128M, которая весит мало и работает достаточно шустро.

Вы пишете запрос, а утилита ищет не точное совпадение букв, а близость по смыслу. При этом можно ограничить выдачу параметром --max-distance, чтобы отсечь совсем нерелевантный мусор. Еще мне понравилось, что поиск умеет возвращать контекст — несколько строк до и после найденного фрагмента.

AI-агент в консоли

Команда semtools ask превращает ваш терминал в интерфейс для общения с вашими же локальными файлами. По сути, это RAG (Retrieval-Augmented Generation), упакованный в CLI. Вы скармливаете ему папку с текстовыми файлами и спрашиваете: «Какая методология использовалась в этих исследованиях?». Система сама найдет нужные куски текста и выдаст саммари.

По умолчанию используется OpenAI, но в конфиге можно прописать любой OpenAI-совместимый API. Если вы подняли локальный сервер с какой-нибудь Llama или Mistral, подружить их с semtools будет несложно.

Техническая начинка

Разработчики выбрали Rust, и это чувствуется. Инструмент работает быстро, без ощутимых задержек на инициализацию. Для генерации векторов используется model2vec-rs, а для вычисления косинусного сходства — библиотека simsimd. Это позволяет делать семантический поиск локально, не отправляя ваш текст на сторонние сервера для каждого поискового запроса.

Отдельно стоит упомянуть механизм воркспейсов. Если вы часто ищете по одной и той же большой директории, semtools кэширует эмбеддинги. При повторном поиске он проверяет, не изменились ли файлы, и пересчитывает векторы только для обновленных документов.

Как это выглядит на практике

Установка простая, можно через cargo:

cargo install semtools

Или через npm, если вам так привычнее:

npm i -g @llamaindex/semtools

После установки можно комбинировать команды через пайпы в стиле Unix. Например, сначала парсим PDF-файлы, а потом ищем в них информацию по ключевым словам:

semtools parse docs/*.pdf | xargs semtools search "конфигурация API" --n-lines 5

Или задаем конкретный вопрос по базе знаний:

semtools ask "Как настроить аутентификацию?" docs/guide.md

Если нужно работать с большим объемом данных, лучше создать воркспейс, чтобы не пересчитывать векторы каждый раз:

semtools workspace use docs-project
export SEMTOOLS_WORKSPACE=docs-project
semtools search "результаты тестов" ./reports/*.txt

Кому это пригодится

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

Он точно будет полезен, если:

  • Вам нужно быстро навести порядок в локальной базе знаний или свалке документов.
  • Вы строите свои RAG-системы и вам нужен удобный и быстрый парсер/поисковик для отладки.
  • Вам лень открывать тяжелые офисные пакеты только для того, чтобы найти одну строчку текста.

Из минусов: для парсинга и работы AI-агента все-таки нужны API-ключи (LlamaIndex Cloud и OpenAI соответственно). Полностью локально из коробки работает только поиск по уже текстовым файлам. С другой стороны, команда проекта обещает добавить поддержку новых бэкендов для парсинга, так что, возможно, в будущем появится и полностью автономный режим.

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.