Представьте обычный интернет-магазин обуви.
Покупатель открывает поиск и пишет:
Мне нужны чёрные водонепроницаемые кроссовки для ежедневных пробежек по мокрому асфальту. Что посоветуете?
Ещё несколько лет назад от поисковой строки такого почти никто не ждал. Запрос пришлось бы сократить до чего-нибудь вроде:
black waterproof running shoes
Дальше — открыть несколько карточек, сравнить описание, материалы, назначение, цену и решить самому.
Сегодня человек всё чаще ожидает, что часть этой работы сделает сам поиск. Не потому, что полнотекстовый поиск стал хуже. С точными названиями, SKU, артикулами, брендами и ключевыми словами он по-прежнему справляется отлично. Изменилось ожидание от того, что вообще можно спросить у поисковой системы.
Google, например, в мае 2026 года сообщила, что AI Mode превысил миллиард пользователей в месяц. Компания отмечает, что люди задают более длинные и сложные вопросы, которые раньше не попадали в обычный поиск. (blog.google )
С интернет-магазином происходит то же самое.
Запрос вроде:
Мне нужны чёрные водонепроницаемые кроссовки для ежедневных пробежек по мокрому асфальту.
только выглядит как одна фраза. Для поисковой системы внутри него несколько задач.
Нужно выделить ограничения — цвет, водонепроницаемость. Понять, что речь идёт о беге, а не просто прогулках. Учесть цену, размер и наличие. Найти подходящие товары. А затем, если пользователь уточнит «какие из них лучше», объяснить различия.
Одним алгоритмом это не решается.
Полнотекстовый поиск, векторный поиск, фильтры, гибридный поиск и языковая модель решают разные части задачи. Гораздо эффективнее не выбирать между ними, а объединять.
Именно для этого в Manticore появился диалоговый поиск.
Поиск по словам, по смыслу и диалог — разные задачи
Начнём с простого запроса:
Nike Pegasus 41 чёрные
Здесь системе почти не нужно интерпретировать намерение пользователя. Полнотекстовый поиск справляется напрямую.
Или ещё проще:
SKU 123456
Семантические методы здесь не нужны.
Теперь другой пример:
лёгкая обувь для долгих прогулок летом
В карточке товара может не быть слов «лето» или «долгие прогулки». Но могут быть признаки вроде "дышащий материал"" или "облегчённая конструкция".
Здесь уже полезен векторный поиск.
А реальные запросы часто находятся между этими крайностями:
чёрные кроссовки Gore-Tex для ежедневных пробежек
Часть параметров — чёрный, Gore-Tex — важно сохранить. ежедневные пробежки описывает скорее намерение пользователя, чем точный атрибут.
Для таких случаев Manticore использует гибридный поиск, объединяющий полнотекстовый и векторный поиск через ранжирование результатов.
Но даже гибридный поиск возвращает только список результатов.
На этом поиск считает свою работу законченной. Пользователь — обычно нет.
Он не отвечает на вопросы вроде:
Какие из этих моделей лучше подойдут для дождя?
И тем более не работает с продолжением:
А что из них дешевле $120?
Это уже диалог. И здесь нужен другой слой.
Что мы собрали
Чтобы проверить это на практике, мы использовали ConvApparel — датасет диалогов о выборе одежды. После очистки получилось 82 524 товара: обувь, брюки, топы и верхняя одежда. У каждого товара есть описание, категория, изображения и характеристики. На этих данных мы собрали Manticore Apparel Shop.
Например, можно написать:
Мне нужны чёрные водонепроницаемые кроссовки для пробежек
Система сначала находит подходящие товары, затем языковая модель формирует ответ, используя их как контекст, а интерфейс показывает сами товары.
Попробуйте демо: Manticore Apparel Shop — оно само сгенерирует случайный продукт, вопрос, который должен его найти в теории и уже на практике продемонстрирует, что этот же вопрос находит этот продукт через Manticore.

Важно сохранить связь между ответом и данными. Если система утверждает, что модель подходит для дождя, пользователь должен иметь возможность открыть товар и проверить источник этого утверждения.
В этом подходе языковая модель не заменяет поиск. Она интерпретирует его результаты.
Как это устроено
Используются две основные команды:
CREATE CHAT MODEL
и
CALL CHAT(...)
Сначала создаётся модель диалогового поиска и задаются правила её работы.
CREATE CHAT MODEL assistant (
model='openrouter:google/gemma-4-26b-a4b-it',
timeout=60,
retrieval_limit=5,
max_document_length=3000,
custom_prompt='You are a context-only shopping assistant.
Answer using only the provided context.
Do not use outside knowledge or unsupported assumptions.
Recommend only products supported by the retrieved context.
For every recommended product, briefly explain why it matches the request.
End every recommendation with the corresponding
context source ID in the format [ref:<id>].
If none of the retrieved products support the request,
say that you do not have enough information.'
);
retrieval_limit определяет количество документов, которые попадают в контекст. max_document_length ограничивает объём текста из одного документа.
Если контекста слишком мало — модель не увидит нужные товары. Если слишком много — растут задержка и стоимость запроса. Языковая модель, как и человек, не становится умнее только потому, что ей дали прочитать всё подряд.
Дальше можно выполнить запрос:
CALL CHAT(
'Мне нужны чёрные водонепроницаемые кроссовки для пробежек',
'convapparel_products',
'assistant',
'demo-session-001',
'embedding_vector'
);
И затем продолжить диалог:
CALL CHAT(
'Which of these are better for daily use?',
'convapparel_products',
'assistant',
'demo-session-001',
'embedding_vector'
);
Система использует историю диалога, поэтому пользователю не нужно повторять контекст.
Через HTTP API
Диалоговый поиск доступен и через JSON API:
{
"chat": {
"query": "Мне нужны чёрные водонепроницаемые кроссовки для пробежек",
"table": "convapparel_products",
"model_name": "assistant",
"conversation_uuid": "demo-session-001",
"vector_field": "embedding_vector"
}
}
Запрос отправляется в /search.
Что возвращает система
Ответ содержит:
conversation_uuiduser_querysearch_query— поисковый запрос, сформированный системойresponsesources
Особенно важен search_query.
Если пользователь пишет:
А какие из них лучше подойдут для дождя?
Сам по себе этот запрос не имеет смысла без контекста. Поэтому система формирует полноценный поисковый запрос с учётом истории диалога.
Это также упрощает отладку: можно проследить всю цепочку от запроса до ответа.
Как устроено извлечение данных
Внутри диалогового поиска используется векторный поиск по embedding-полю. Процесс выглядит так:
вопрос пользователя
→ история диалога
→ поисковый запрос
→ векторный поиск
→ найденные документы
→ языковая модель
→ ответ и источники
Где заканчивается поиск и начинается диалог
Полнотекстовый поиск хорошо работает с точными запросами. Векторный поиск — с семантическими. Гибридный поиск — с их комбинацией. Диалоговый поиск нужен там, где результат нужно объяснить, сравнить или уточнить.
Качество
Мы проверили это на нашем бенчмарке качества разговорного поиска , используя 200 детерминированных товарных запросов из ConvApparel. Бенчмарк оценивает возвращаемые ID товаров как источники, а не формулировку сгенерированного ответа.
В текущем прогоне Manticore показал 0.3650 Hit@3, 0.4250 Hit@5, 0.5250 Hit@10 и 0.2790 MRR — лучший результат по каждой из этих метрик среди протестированных движков. В полном репозитории есть правила сборки датасета, конфигурация движка, smoke-задачи и сырые результаты.
Итог
Поиск в современных системах — это не один алгоритм, а несколько слоёв:
- полнотекстовый поиск
- векторный поиск
- гибридный поиск
- диалоговый поиск
Каждый решает свою задачу. Языковая модель не заменяет поиск. Она работает поверх него.
Без хорошего поиска не получится умный ассистент; получится очень разговорчивый консультант, который едва знает собственный каталог.
Хотите проверить подход на практике? Попробуйте Manticore Apparel Shop : выберите случайный продукт, задайте вопрос на его основе и убедитесь, что этот же продукт будет найден и предложен в ответе.
Если хотите запустить это локально или изучить код, загляните в репозиторий GitHub .

