Большинство «AI для магазина» заканчивается одинаково: виджет в правом нижнем углу, три пользователя в месяц и тишина. Мы пошли другим путём.
Идея простая и вредная для привычных чат-ботов: ассистент должен менять витрину, а не писать простыни текста. Человек говорит «наушники для спорта до десяти тысяч» — и на экране остаются подходящие карточки, у каждой короткое «почему именно это».
Что под капотом
- Модуль
bai.aiassistantживёт вlocal/— ядро Битрикса не ломаем, обновления не становятся квестом. - Два режима LLM: облачный GigaChat и локальный Ollama, если данные не должны уезжать наружу.
- Слой
CatalogPortотделяет ассистента от конкретного каталога: демо на сотнях товаров, та же схема — на 20–30 тысячах SKU.

Почему не «скармливаем весь каталог» модели
На демо можно. На боевом каталоге — нет. Сначала обычный поиск сужает выборку до shortlist, и уже его видит LLM. Иначе и дорого, и глупо, и медленно.
// Упрощённый контракт: поиск → shortlist → LLM → витрина
$shortlist = $catalogPort->search($query, limit: 24);
$ranked = $llm->rankAndExplain($query, $shortlist);
$catalogPort->renderShelf($ranked); // карточки + why

Что дальше
Демо закрывает UX и API. Следующий шаг — тот же Concierge на реальном каталоге, без переписывания интерфейса. Живой стенд можно потрогать по кнопке «Открыть демо».