Для Telegram-бота @ponaehaliam_bot по вопросам переезда в Армению нужен был поиск по базе знаний с точными ответами и ссылками на источники. Вместо векторной базы и эмбеддингов мы взяли GrepRAG — текстовый поиск через ugrep с передачей найденных фрагментов в LLM. Бот работает в продакшене с ~5000 пользователями, 500+ запросов за два месяца, а стоимость инфраструктуры минимальна.

Почему текстовый поиск, а не эмбеддинги

У бота 500+ запросов за февраль и март. Больше всего про ИП и налоги, ВНЖ, банки и переводы. Это не тот сценарий, где нужно красиво рассуждать на широкую тему. Здесь человеку нужен ответ с опорой на документ: что делать после приезда, как открыть ИП, нужен ли SSN, какие бумаги готовить для банка.

GrepRAG vs векторный RAG

КритерийGrepRAG (текстовый поиск)Векторный RAG (эмбеддинги)
Точность на специфичных терминахВысокая — ищет точные формулировкиЗависит от качества эмбеддинг-модели
Прозрачность результатовВидно, откуда взят фрагментЧерный ящик similarity search
ИнфраструктураФайлы в директории + ugrepВекторная БД (Pinecone, Qdrant, pgvector)
Отладкаgrep-запрос можно повторить рукамиНужен анализ эмбеддингов и расстояний
Масштаб базыМалый и средний (до тысяч документов)Любой, включая миллионы
Семантический поискНет — только текстовое совпадениеДа — находит по смыслу

Поэтому мы пошли не от модного стека, а от формы задачи.

Как работает бот

GrepRAG работает просто: вы складываете нужные PDF и текстовые файлы в одну директорию, система ищет по ним через ugrep, а уже потом дает модели только релевантные фрагменты для сборки ответа. На выходе бот @ponaehaliam_bot возвращает не только формулировку, но и цитаты из файлов. Для миграционной и налоговой базы это важнее, чем «умный» общий ответ без опоры.

Формат ответа

Формат ответа тоже подчинен этой логике. Бот не пытается написать трактат. Он дает короткий ответ по сути вопроса, а ниже прикладывает 5 самых релевантных ссылок, где можно дочитать детали. Например, по запросу про taxservice.am он сначала объясняет, что это домен налоговой службы Армении и где он используется, а потом отдает ссылки на статьи про декларации, коды налоговых органов и подачу отчетности.

Почему простота — не компромисс

И да, слово grep звучит как привет из 2009. Но в этом и смысл. Когда база знаний маленькая или средняя, а документы нужно находить по формулировкам близко к оригиналу, простой текстовый поиск часто полезнее слоя с эмбеддингами, который сложнее отлаживать и легче переоценить.

Anthropic в Building effective agents формулируют похожий принцип: для многих задач хватает retrieval и хорошего контекста, а усложнять систему стоит только там, где простая схема уже не держит качество. У нас был именно такой случай. Сначала нужно надежно найти нужный кусок в документе. И только потом просить модель собрать ответ.

Продакшен-связка

Михаил, автор базы знаний по релокации в Армению, поддерживает ее из Канады и обновляет статьи. Сам бот встроен в чат-группу: если вопрос уходит в оффтопик, пользователя банят и перенаправляют в бота. Тут уже есть не только поиск по документам, но и рабочая связка «контент, бот, модерация, продакшен».

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

Когда GrepRAG лучше векторного RAG?

Когда база знаний до нескольких тысяч документов, а запросы содержат конкретные термины — названия форм, законов, сервисов. Текстовый поиск находит точное совпадение надежнее, чем similarity search по эмбеддингам. Если запросы размытые и нужен семантический поиск — эмбеддинги выиграют.

Сколько стоит GrepRAG в продакшене?

Инфраструктура почти бесплатна: файлы в директории, ugrep, без векторной БД. Основная статья расходов — вызовы LLM для генерации ответа. При 500 запросах в месяц и средней длине контекста это единицы долларов.

Какой объем базы знаний держит текстовый поиск?

Сотни и тысячи документов — без проблем. На десятках тысяч ugrep все еще быстр, но релевантность начинает падать: слишком много совпадений, модели сложнее выбрать нужный фрагмент. На этом масштабе стоит добавить гибридный поиск или перейти на эмбеддинги.


GrepRAG здесь полезен не потому, что он «проще». А потому, что он ближе к правде задачи. Когда знания живут в PDF, справках и заметках, хороший бот начинается не с самой сложной архитектуры, а с нормального поиска по тексту.