Перейти к содержимому
VC
Кейс № 24 · Retail / AI-консультант

AI-консультант на сайте вместо платного SaaS-виджета: 34 : 12 в слепом бенчмарке

У US-бренда товаров для активного отдыха на витринах стоял платный SaaS-чат-виджет по подписке за каждый магазин — и переспрашивал вместо того, чтобы отвечать. Для российского сайта был ещё и жёсткий контур по 152-ФЗ. Собрал свой RAG-чат на российских LLM и проверил его слепым сравнением с платным виджетом.

Индустрия
Розница, товары для активного отдыха
Стек
Python · FastAPI/SSE · RAG · YandexGPT
Сроки
≈ 4 недели до go-live
Итог
34 : 12 в слепом бенчмарке
01 · Боль

Платишь подписку за каждый магазин — а бот переспрашивает вместо ответа

У бренда две витрины на Shopify и отдельный российский сайт. На витринах стоял платный SaaS-чат-виджет: подписка списывается за каждый магазин отдельно, то есть цена умножается на число витрин и растёт вместе с бизнесом, а не с пользой.

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

Отдельное жёсткое ограничение — для российского сайта. Данные пользователей не должны уходить из страны, значит зарубежные LLM-провайдеры отпадают целиком: и как прод-бэкенд, и как «временное решение на время пилота». Это сразу вычёркивает почти весь рынок готовых AI-виджетов.

Итого задача звучала так: получить консультанта, который отвечает по реальному каталогу и реальным условиям доставки/гарантии, работает на российском контуре, и при этом не хуже платного виджета — причём «не хуже» нужно доказать цифрами, а не ощущениями.

02 · Решение

Свой корпус, свой gateway, свой сервер

Отдельный подпроект: корпус фактов, RAG-поиск по нему, SSE-gateway на FastAPI и встраиваемый JS-виджет. Никакой «магии модели» — ответ собирается из фактов, которые можно показать пальцем, а качество проверяется тестом, а не чутьём.

01
Корпус

562 факта: каталог, FAQ, доставка, гарантия + формулировки из живых переписок менеджера

02
Retrieval

Эмбеддинги по корпусу, отбор релевантных фактов под конкретный вопрос

03
Gateway

FastAPI + SSE, единый контракт для трёх LLM-бэкендов, IAM-токены, ретраи, предохранители

04
Ответ

Потоковый текст, следом отдельный SSE-кадр с карточками товара и картинками

05
Хвост

Диалоги и лиды в JSONL, копия вопросов и ответов — живому человеку в Telegram

Корпус собран из каталога и живых переписок

562 факта: характеристики позиций, FAQ, условия доставки и гарантии. Плюс — и это оказалось важнее всего — более 300 живых переписок менеджера с покупателями. Оттуда взяты не только ответы, но и реальные формулировки вопросов: как человек на самом деле спрашивает про размер, вес, зимнюю эксплуатацию и сроки. Бот, обученный на маркетинговых текстах, этих вопросов просто не узнаёт.

Gateway: один контракт, три LLM-бэкенда

SSE-API поверх RAG: ответ отдаётся потоком, пользователь видит текст по мере генерации. За единым контрактом спрятаны три провайдера — боевой YandexGPT, плюс GigaChat и DeepSeek как альтернативы для бенчмарка и дешёвых итераций. Переключение бэкенда не трогает фронт. В gateway живёт вся неромантичная часть:

  • обновление IAM-токенов и ретраи с уважением к Retry-After
  • блокировка на сессию — один пользователь не запускает пять генераций параллельно
  • бюджетный предохранитель — расход на токены не уходит в потолок при абузе
  • редакция PII до записи в лог — телефоны и почты не попадают в файлы диалогов
  • анти-абуз через Cloudflare Turnstile
  • распознавание голосового ввода — вопрос можно надиктовать

Карточки товара отдельным кадром

Текстовый ответ уходит первым — его начинают читать сразу. Следом gateway досылает отдельный SSE-кадр с карточками упомянутых товаров: картинка, название, ссылка. Так консультация не превращается в стену текста, а из чата есть прямой путь в корзину. Там же — захват лида: если разговор дошёл до конкретики, контакт сохраняется и уходит менеджеру.

Проверка качества — тест, а не LLM-судья

Первая версия проверки была на LLM-судье, и её пришлось выбросить. Слепой судья систематически пропускал провалы именно на категорийных вопросах — тех самых, на которые жаловались менеджеры: ответ выглядел связным, значит «ок». Заменил на детерминированный groundtruth-тест: для каждого вопроса известно, какие факты обязаны попасть в ответ, и проверка идёт по ним. Сверху — 76 тестов в pytest, включая grounding (ответ опирается на корпус, а не на фантазию модели) и анти-абуз.

Выкатка канарейкой на живой сайт

Сайт собран в конструкторе, правки идут по живому — поэтому выкатка была пошаговой. Бэкап снят до правки. Сниппет дописан в конец HEAD, прежний код не тронут — это проверено сравнением префикса, а не на глаз. Сначала одна главная страница → проверка на живом сайте → остальные страницы (их около шестидесяти). Откат описан в три шага и лежит рядом с инструкцией.

03 · Стек

Российский контур по умолчанию, а не как компромисс

Python · FastAPI · uvicorn

Gateway с SSE-стримингом, systemd-юнит на своём сервере

RAG: собственный корпус

562 факта + эмбеддинги, карточки товара отдельным индексом

YandexGPT

Боевой LLM-бэкенд — данные остаются в российском контуре

GigaChat · DeepSeek

Альтернативные бэкенды за тем же контрактом: бенчмарк и дешёвые итерации

Yandex SpeechKit

Голосовой ввод — вопрос можно надиктовать, а не печатать

Cloudflare Turnstile

Анти-абуз без капчи в лицо покупателю

JS-виджет

Один сниппет, встраивается в сайт на конструкторе без доступа к исходникам

pytest — 76 тестов

Grounding, анти-абуз, детерминированный groundtruth вместо LLM-судьи

PythonFastAPISSERAGYandexGPTGigaChatDeepSeekSpeechKitTurnstilesystemdpytest
04 · Результат

Слепое сравнение с платным виджетом

Счёт по вопросам
34 : 12

свой движок / платный виджет, при 3 ничьих

Уклонения от ответа
43% 0

встречный вопрос вместо ответа: 21 из 49 у виджета, ни одного у нас

Оценка полезности
4,14 / 2,96

по полноте — 3,98 против 2,90

Методика бенчмарка важнее цифры. 49 вопросов синтезированы из 174 реальных вопросов покупателей и разложены по сетке: 7 персон × 7 этапов воронки — от «первый раз на сайте» до «уже выбрал, уточняю гарантию». Каждый вопрос задан обоим ботам, ответы перемешаны, судейство слепое — судья не знает, где чей ответ.

Главная разница оказалась не в «уме», а в готовности отвечать. На 21 вопросе из 49 платный виджет задал встречный вопрос вместо ответа — ровно то, на что жаловались менеджеры. Свой чат ответил по существу на все 49.

Чат выкачен на боевой сайт. Контур обратной связи замкнулся за сутки: замечание владельца бизнеса вечером — два исправляющих коммита к утру. Бот перестал выдумывать популярность позиций и стал опираться на реальные продажи. Это, пожалуй, лучший показатель того, что система собрана правильно: правку видно в проде на следующий день, а не в следующем релизе вендора.

Отдельный эффект — предсказуемость расходов. Вместо подписки, которая множится на число витрин, остаётся оплата токенов по факту использования плюс свой сервер; лицензий нет, и потолок расхода задан бюджетным предохранителем в самом gateway.

05 · Применимость

Где ещё ложится та же методология

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

  • Магазины со сложным выбором — техника, оборудование, снаряжение: там, где покупка требует объяснения, а не фильтра по цене
  • B2B-сайты с длинным циклом — квалификация лида в чате и передача менеджеру уже с контекстом разговора
  • Внутренний ассистент поддержки — тот же корпус, но интерфейс для операторов: подсказка ответа вместо поиска по регламентам
  • Любая ниша с требованием 152-ФЗ — медицина, финансы, госсектор: контур на российских LLM собирается тем же способом
  • Замена любого SaaS-виджета — когда подписка умножается на число точек/витрин/брендов, свой движок окупается арифметикой, а не верой
Что переиспользуется на следующих проектах
  • SSE-gateway с единым контрактом на несколько LLM-провайдеров — смена бэкенда не трогает фронт
  • Схема корпуса: каталог + регламенты + живые переписки, а не только маркетинговые тексты
  • Детерминированный groundtruth-тест вместо LLM-судьи — судья пропускает ровно те провалы, ради которых его звали
  • Слепой A/B-бенчмарк на вопросах, синтезированных из реальных: сетка персон × этапов воронки
  • Канареечная выкатка виджета: бэкап → одна страница → проверка на живом сайте → остальные, откат в три шага
  • Дубль диалогов живому человеку в Telegram на первые недели — чтобы кто-то видел, что отвечает бот
Похожая задача?

Если ваш чат-виджет переспрашивает вместо ответа — это чинится

Начинаем не с модели, а с корпуса и способа проверки: что бот обязан знать и как мы докажем, что он это знает. От прототипа до go-live на боевом сайте — около четырёх недель.

Готовы начать?

Аудит за 5 000 ₽ — с конкретным отчётом и сметой

Расскажу что внедрить в вашем бизнесе в первую очередь, какая будет окупаемость, и нужен ли вообще AI для вашей задачи (иногда — нет).

Или просто напишите свой вопрос — отвечу в течение 2 часов