Эта история началась вовсе не с поиска. Нас позвали разрабатывать сайт — обычный, хороший интернет-магазин с каталогом и корзиной. И всё шло своим чередом, пока на одном из этапов переговоров мы не упёрлись в поиск. А точнее — в то, что обычный поиск по такому каталогу не работает, и клиенту нужен семантический поиск для интернет-магазина, понимающий запрос по смыслу, а не по совпадению слов.
Умный поиск по каталогу, которого всем не хватало
У клиента — десятки тысяч позиций очень специфической продукции: предохранители (керамические, стеклянные, SMD, самовосстанавливающиеся), резисторы, конденсаторы, реле, высокочастотные разъёмы, термисторы, преобразователи напряжения и так далее на много экранов вглубь. Номенклатура, в которой не всякий инженер разберётся с ходу.
А ищут по ней, как выяснилось, далеко не всегда инженеры. Нередко — закупщик какого-нибудь завода, вчерашний студент, которому сказали «найди вот это, только помощнее», и он сидит над фильтрами, как над клинописью.
Мы показали клиенту десяток референсов, нарисовали несколько концептов поиска. Ответ был неизменно один: «Всё не то».
Где сидит настоящая задача
И вот на очередных переговорах, вживую слушая, что мы опять показываем «ничего особенного» и что тот самый закупщик ни черта не разберёт в этих фильтрах, приходит ясная мысль: да это же задача для ИИ. Переводить с инженерного на человеческий и обратно. Искать не по точному совпадению ячеек в таблице, а по смыслу.
Показали. Рассказали. Ударили по рукам. Стали делать.
Векторный поиск по товарам: почему он не сработал
Чтобы получить достойный результат, пришлось поэкспериментировать — и первый же напрашивающийся подход себя не оправдал.
Простой векторный поиск не взлетел. Идея «векторизуем карточки и ищем близкое по смыслу» разбилась о суровую прозу: далеко не по всем позициям вообще была вменяемая документация. Векторизовать нечего — модель ищет похожее там, где описания нет.
Вторая засада — числа. Мы обратили внимание, что огромная доля запросов опирается на численные свойства изделий: номинальный ток предохранителя, сопротивление резистора, ёмкость и рабочее напряжение конденсатора, B-коэффициент термистора. Беда в том, что эти значения часто не были вынесены в свойства товара — они прятались внутри описаний и документов. Для человека «5 А, 250 В» в тексте карточки очевидны. Для фильтра их как бы и нет.
Как устроен семантический поиск по каталогу: архитектура, которая заработала
Тогда мы выстроили поиск иначе — так, чтобы он опирался не на «похожесть картинок в векторном пространстве», а на реальные характеристики товара.
- Пайплайн извлечения характеристик. Прогнали каждый товар через конвейер, который по всем доступным описаниям и документам собирал числовые характеристики изделия и приводил их к единому виду. То, что лежало похороненным в тексте, стало структурированными данными, по которым уже можно искать и фильтровать.
- Онтология свойств по категориям. Для каждой категории собрали свой набор значимых характеристик: у предохранителя — номинальный ток, напряжение, быстродействие; у резистора — сопротивление, мощность, допуск; у разъёма — тип, способ монтажа. Машина наконец стала понимать, что у предохранителя и у резистора «важное» — разное.
- Разбор запроса пользователя. Реализовали поиск по характеристикам товаров: система распознаёт формулировку по нескольким осям — категория, бренд, свойство и, главное, свойство с фильтром. Запрос «реле на 12 В с током коммутации больше 10 А» раскладывается на «категория: реле; напряжение катушки: 12 В; ток коммутации: > 10 А» — и идёт искать именно это. А «предохранитель как этот, только помощнее» превращается в «та же категория, тот же типоразмер, номинальный ток выше».

Где пришлось считать деньги
Поскольку товаров в каталоге десятки тысяч, в полный рост встал вопрос стоимости. Первоначальный пайплайн в лоб обошёлся бы в пару сотен тысяч рублей только на токенах.
В ход пошли батчи и понижение модели до Haiku везде, где задача не требовала более тяжёлой. Часть работы, где хватало модели попроще, мы ей и отдали — и не прогадали. В итоге расход удалось урезать в семь раз.
Что в итоге: цифры
Сравнили поведение пользователей на умном поиске с обычным — и картина сложилась вполне красноречивая:
- ×1,5 — конверсия в покупку. Люди чаще находят то, за чем пришли, — и доходят до оплаты.
- ×2,5 — скорость оформления заказа. Нужная деталь находится с первого-второго запроса, а не после десяти заходов в фильтры.
- +20% — средний чек. Когда поиск понимает запрос, клиент добирает сопутствующее, а не уходит искать недостающее к конкуренту.
Теперь сайт понимает запросы, написанные живым языком, — «керамический предохранитель на 5 ампер, медленный», «термистор на 50 кОм», «чем заменить вот это, только на ток побольше». Закупщику больше не нужно быть инженером, чтобы найти нужную деталь, а инженеру — не нужно опускаться до фильтров, если проще сказать словами.
Машина, как ни крути, оказалась переводчиком — с инженерного на человеческий и обратно. А статистика, как видно из цифр выше, перевод одобрила.
