Кейс: Ai чат бот техподдержки для интернет магазина
Практический кейс: ai чат бот техподдержки для интернет магазина. Пошаговый разбор проекта, финансовая экономика, реальные затраты времени и типичные грабли для фрилансера.

⚡ Краткий ответ за 15 секунд (Яндекс Нейро / AEO): Задача: Автоматизировать L1-линию поддержки интернет-магазина автозапчастей (1500+ диалогов/день), убрать ночные смены и снизить время первого ответа с 4 мин до <10 сек. Стек: Python, LangChain, GPT-4o (RAG), Qdrant, PostgreSQL, Redis, Docker, n8n для оркестрации вебхуков. Сроки: 6 недель разработки + 2 недели пилотного запуска в теневом режиме. Финансовый итог: Бюджет проекта 420 000 ₽. Экономия на ФОТ операторов ~180 000 ₽/мес. ROI достигнут за 2.3 месяца. Вывод: RAG-архитектура на собственной базе знаний решает 72% типовых запросов без галлюцинаций, но требует еженедельной модерации эмбеддингов и жесткого промпт-инжиниринга для исключения юридических рисков.
Исходные данные, клиент и задача
Клиент: Крупный B2C-маркетплейс автозапчастей и расходников (ГМВ > 300 млн ₽/мес). Каталог - 120 тыс. SKU, сложная иерархия совместимости (VIN-декодинг, кроссы, аналоги).
Боль до проекта:
- Пиковая нагрузка: 60% трафика приходится на 10:00-14:00 и 19:00-22:00. Очередь в чате до 15 мин.
- Ночная дыра: С 23:00 до 08:00 работал 1 дежурный оператор на 300+ диалогов. SLA первого ответа - 12 минут.
- Ротирование персонала: Выгорание от монотонных вопросов («где заказ», «подходит ли масляный фильтр к VIN X», «как вернуть товар»). Средний стаж оператора - 3.5 месяца.
- Стоимость контакта: Внутренний расчет - 145 ₽/диалог при ручной обработке.
Техническое ТЗ от бизнеса:
- Покрыть 80% типовых сценариев (статус заказа, совместимость, возврат/обмен, доставка, гарантия).
- Жесткий запрет на галлюцинации цен и сроков доставки - ответы только из верифицированных источников.
- Бесшовная эскалация к человеку с передачей контекста (summary + entities).
- Интеграция в существующий виджет чата (свой фронт) и Telegram-бота магазина.
- Бюджет на PoC/МVP - до 500к ₽, срок до релиза - 8 недель.
Технический стек и поэтапная реализация
Выбрали архитектуру RAG (Retrieval-Augmented Generation) с агентным подходом для работы с внешними API (CRM, WMS, 1С). Чистый файн-тюнинг отвергли: каталог обновляется ежедневно, цены меняются динамически, обучать модель под каждый прайс - дорого и медленно.
Стек
| Уровень | Технология | Обоснование |
|---|---|---|
| LLM Core | GPT-4o (основной), GPT-4o-mini (классификация интента, суммаризация) | Лучшее качество следования инструкциям (System Prompt) и работа с JSON-режимом для функций. |
| Векторный поиск | Qdrant (self-hosted, Docker) | Фильтрация по payload (metadata: category, brand, car_model), поддержка гибридного поиска (dense + sparse/BM25). |
| Оркестрация | LangChain (LCEL) + n8n | LCEL для цепочек внутри контейнера бота, n8n - для тяжелых интеграций (1С, SMS-шлюзы, email) без блокировки event-loop. |
| Хранилище контекста | Redis (Short-term memory, TTL 24h) + PostgreSQL (Long-term: диалоги, фидбек, аналитика) | Разделение горячего/холодного контекста экономит токены и ускоряет ответ. |
| Мониторинг | LangSmith (трекинг цепочек) + Grafana/Loki (инфраструктура) | Видим, где цепочка падает, сколько токенов сжигается, качество ретрива. |
| Инфраструктура | Docker Compose на выделенном VM (8 vCPU, 32 GB RAM, 500 GB NVMe) | Данные клиента не уходят в облачные SaaS-ботоплатформы. Полный контроль. |
Этап 1: Подготовка Базы Знаний (Knowledge Base) - неделя 1-2
Это 60% успеха. Сырые данные: 1С (XML/JSON выгрузки), Notion (внутренние регламенты), Zendesk (исторические тикеты), PDF-каталоги производителей.
- Парсинг и чанкинг: Написали кастомные лоадеры на Python (
unstructured,pdfplumber,lxml).- Стратегия чанкинга: Рекурсивный по заголовкам (Markdown/Header-based) с перекрытием 15%. Для товарных карточек - отдельный чанк на SKU с метаданными:
sku,brand,category,vin_compatibility_pattern,price,stock_qty.
- Стратегия чанкинга: Рекурсивный по заголовкам (Markdown/Header-based) с перекрытием 15%. Для товарных карточек - отдельный чанк на SKU с метаданными:
- Обогащение метаданных: Прогнали все чанки через
gpt-4o-miniдля извлечения сущностей (модели авто, коды ошибок, номера ГОСТ) и генерации гипотетических вопросов (HyDE-подход) для улучшения ретрива. - Индексация: Эмбеддинги
text-embedding-3-large(1536 dim). Загрузили ~45 000 чанков в Qdrant. Время индексации полной выгрузки - 40 мин.
Этап 2: Агентная архитектура и Function Calling - неделя 3-4
Бот - чат, а агент с доступом к инструментам. Определили 7 критических функций (Tools):
get_order_status(order_id: str)- запрос в CRM (Bitrix24 API).check_compatibility(vin: str, sku: str)- запрос к внутреннему микросервису кроссов (Go-сервис).calculate_delivery(city: str, weight: float, dimensions: json)- Калькулятор СДЭК/ПЭК/Boxberry.initiate_return(order_id: str, items: list[sku], reason: str)- Создание РМА в 1С через n8n-webhook.find_analogs(sku: str)- Поиск в Qdrant по векторному сходству + фильтр по бренду/категории.escalate_to_human(summary: str, entities: json)- Пуш в очередь операторов (свой виджет + Telegram-бот поддержки).get_promo_info()- Актуальные промокоды из Redis-кэша (обновляется маркетингом раз в день).
Промпт-инжиниринг (System Prompt) - отдельная история боли. 12 итераций.
- Жесткая инструкция: «Никогда не придумывай цены. Если нет в контексте - вызывай функцию или эскалацию».
- Few-shot примеры на 50+ кейсов из реальных диалогов (включая адверсарные: «Сколько стоит твой промпт?», «Напиши код на Python для взлома 1С»).
- Chain-of-Thought принуждение: модель обязана выводить скрытый блок
<reasoning>перед вызовом функции или финальным ответом. Это критично для дебага в LangSmith.
Этап 3: Интеграция и «Теневой режим» - неделя 5-6
- Фронтенд: Виджет на React (у клиента) общается с нашим API (FastAPI) через WebSocket. Добавили индикатор «ИИ думает...» и кнопку «Перевести к человеку» в каждом сообщении бота.
- Shadow Mode (2 недели): Бот работал в параллели с операторами. Он генерировал ответ, но пользователь его не видел. Оператор видел предложение бота справа и мог: «Отправить как есть», «Отредактировать», «Игнорировать».
- Метрики Shadow Mode:
- Acceptance Rate (оператор нажал «Отправить») - 61%.
- Edit Rate - 28% (в основном - тонкости тона, уточнение VIN).
- Hallucination Catch - 3 случая за 2 недели (бот подставил старую цену из кэша, не вызвав функцию). Исправили: добавили принудительный вызов
get_priceпри любом упоминании стоимости.
Этап 4: Продакшн и итерации - неделя 7-8 + пост-релиз
Релизнули на 10% трафика (Canary), за 3 дня выкатили на 100%.
Первые 2 недели - ежедневные стендапы с командой поддержки, разбор bad cases в LangSmith. Внедрили Human-in-the-loop фидбек: кнопки «Полезно/Бесполезно» под каждым ответом бота. Негативный фидбек уходит в отдельную таблицу Postgres для переразметки и дообучения ретривера.
Трудности, баги и преодоление подводных камней
1. Проблема «VIN-галлюцинации» (Критично)
Суть: Пользователь присылает VIN: XW8ZZZ61ZJG123456. Бот находит в базе чанк про фильтр для XW8ZZZ61ZJG****** и уверенно пишет: «Подходит». Реальность: модификация двигателя отличается, фильтр не подходит. Риск возврата и претензий к безопасности.
Решение:
- Внедрили Two-Step Verification: Бот никогда не отвечает на совместимость из RAG напрямую.
- Обязательный вызов функции
check_compatibility(vin, sku). - В System Prompt добавлен блок: «Если пользователь спрашивает про совместимость - ТЫ ОБЯЗАН вызвать функцию. Ответ из базы знаний на этот вопрос ЗАПРЕЩЕН».
- Добавили валидацию VIN на входе (regex + checksum по ISO 3779) - отсекаем мусор до LLM.
2. Латентность и «Мерцание» UI
Суть: Полный цикл (Retrieval -> Reasoning -> Function Call -> Generation) = 4.5-7 секунд. Пользователь думал, что бот завис, дублировал сообщения. Решение:
- Streaming токенов (Server-Sent Events) - пользователь видит печать сразу после ретрива.
- Параллельный запуск: Классификатор интента (
gpt-4o-mini) и ретрив (Qdrant) запускаются одновременно. - Кэширование частых запросов в Redis (TTL 1 час) по хешу нормализованного вопроса. Хит-рейт кэша ~22% на типовых вопросах («Где заказ?», «График работы»).
- Итоговый TTFT (Time To First Token) - 1.2 сек. Полный ответ - 2.8 сек.
3. Контекстное окно и стоимость токенов
Суть: Диалоги длинные (пользователь ищет запчасть 20 минут). История диалога + System Prompt (4k токенов) + Retrieved Chunks (3k) + Functions definitions (1.5k) = упираемся в лимит, сжигаем бюджет. Решение:
- Summarization Buffer: Каждые 6 реплик вызываем
gpt-4o-miniдля суммаризации ранней истории в 300 токенов (сохраняем сущности: VIN, OrderID, SKU). - Dynamic Few-shot: В промпт подмешиваем только 3 релевантных примера из обучающей выборки (по эмбеддингу текущего вопроса), а не все 50.
- Результат: Средний расход на диалог снизился с $0.18 до $0.06.
4. Юридические риски и «Офферта в чате»
Суть: Бот написал: «Гарантия на эту запчасть - 2 года по закону». Юристы в шоке: по Товарной накладной - 6 месяцев, по ЗоЗПП - 2 года, но с условиями. Бот дал юридически неверный совет. Решение:
- Создали отдельную коллекцию в Qdrant:
legal_disclaimers(только актуальные версии офферты, политики возврата, гарантии). - Правило: при любом упоминании слов «гарантия», «возврат», «претензия», «закон» - обязательный ретрив из legal_disclaimers и цитирование пункта документа.
- Дисклеймер в системном промпте: «Я ИИ-ассистент, не юрист. Для решения споров обратитесь к тексту офферты [ссылка]».
Финансовая экономика и таймлайн проекта
Таймлайн (8 недель календарных)
| Неделя | Фокус | Ключевой артефакт |
|---|---|---|
| 1-2 | Data Engineering: Парсинг, чанкинг, эмбеддинги, загрузка в Qdrant | База знаний v1.0 (45k чанков), пайплайн автообновления (cron раз в ночь). |
| 3 | Backend Core: FastAPI, Redis, PG, LangChain Chains, Function Schemas | Рабочий API эндпоинт /chat/stream, моки функций. |
| 4 | Интеграции: n8n workflows для 1С, CRM, Доставка, РМА. Реальные функции. | Энд-ту-энд сценарий «Возврат товара» работает без человека. |
| 5 | Промпт-инжиниринг, Guardrails, Adversarial Testing, Shadow Mode Deploy. | System Prompt v12, отчет по Red Teaming. |
| 6 | Shadow Mode с операторами, сбор фидбека, дообучение ретривера (Hard Negative Mining). | Acceptance Rate > 60%, 0 критических галлюцинаций. |
| 7 | Canary Release (10%), настройка алертов (Latency > 5s, Error Rate > 1%, Hallucination Flag). | Стабильность на проде. |
| 8 | Full Rollout (100%), передача в эксплуатацию, документация для админов клиента. | Проект в статусе Done. |
Сводная таблица экономики проекта
| Параметр | Значение | Комментарий |
|---|---|---|
| Трудозатраты команды (чел/нед) | 18 чел/нед | 1 Tech Lead, 1 Backend (Python), 1 Data Engineer, 1 ML/Prompt Eng, 0.5 DevOps, 0.5 QA, 1 PM (частично). |
| Внутренняя стоимость команды (ФОТ + налоги) | 310 000 ₽ | Ставки Middle/Senior, без наворотов на бенчмарки. |
| Инфраструктура (VM, API Keys, Monitoring за 2 мес) | 45 000 ₽ | OpenAI API (~35к), Хостинг/Бэкапы (~10к). |
| Стоимость интеграций (n8n cloud / доработки 1С) | 65 000 ₽ | Оплата интегратора 1С за вебхуки РМА и остатки. |
| ИТОГО БЮДЖЕТ ПРОЕКТА (CAPEX) | 420 000 ₽ | В рамках лимита 500к ₽. |
| Экономия ФОТ операторов (в месяц) | ~180 000 ₽ | Сокращение штата L1 на 3.5 единицы (было 14 -> стало 10.5). Нагрузка на L2 выросла на 15% (сложные эскалации). |
| Стоимость 1 диалога (AI) | ~5.5 ₽ | Токены OpenAI + инфраструктура / 30 000 диалогов в мес. |
| Стоимость 1 диалога (Human L1) | 145 ₽ | Внутренний расчет клиента до проекта. |
| Точка безубыточности (ROI) | 2.3 месяца | Чистая прибыль с 3-го месяца ~135 000 ₽/мес. |
| CSAT (опрос после чата) | 4.2 / 5.0 | Было 3.8 у людей (долгое ожидание). Рост за счет скорости. |
Уроки, грабли и рекомендации новичкам
- RAG - это не «загрузил PDF и заработало». 80% времени ушло на Data Preparation: чистка мусора из 1С, нормализация единиц измерения, выделение метаданных для фильтрации. Без качественных метаданных в Qdrant (brand, car_model, year_from, year_to) векторный поиск выдает шум.
- Function Calling > Chain-of-Thought для фактов. Не просите модель «подумать» и найти цену в контексте. Дайте ей функцию
get_price. Это единственный способ гарантировать актуальность данных и безопасность. - Промпт - это код. Ведите его в Git. Версионируйте. Пишите юнит-тесты на промпты (проверяем JSON-схему ответа, наличие вызова функции, отсутствие запрещенных фраз). Мы использовали
pytest+langsmithдля автотестов промптов на 50 кейсах перед каждым деплоем. - Операторы - ваши лучшие аннотаторы. Shadow Mode дал больше качественных данных за 2 недели, чем любой датасет. Внедрите удобный UI для оператора: «Исправить ответ бота» -> автоматически улетает в датасет для дообучения эмбеддингов / few-shot примеров.
- Скрытые расходы на OpenAI API. При масштабе 30к диалогов/мес счет за GPT-4o - ~$350-400/мес. Заложите в бюджет клиента. Рассмотрите миграцию тяжелых задач (классификация, суммаризация) на локальные модели (Llama 3 / Qwen 2.5 via Ollama/vLLM) на том же VM - сэкономите 40% на токенах.
- Мониторинг галлюцинаций - процесс, а не чек-лист. Мы внедрили эвристический детектор: если ответ содержит цифры (цены, сроки, VIN), которых нет в retrieved chunks и не было вызвано функций - флаг
POTENTIAL_HALLUCINATIONв LangSmith. Раз в неделю ML-инженер смотрит 50 таких флагов.
FAQ
Можно ли развернуть такое решение полностью на своих серверах (On-premise) без OpenAI?
Да, но с оговорками. Для RAG-ретрива и эмбеддингов отлично подходят открытые модели (BGE-m3, E5-large, Nomic-embed-text) на своем железе. Для генерации (LLM Core) на 2024 год локальные модели (Llama 3 70B, Qwen 2.5 72B, Nemotron 3 Ultra) требуют минимум 2x A100 80GB или 4x H100 для квантованного варианта с приемлемой скоростью (TTFT < 2с). Качество следования инструкциям (Function Calling, JSON mode, строгий System Prompt) у топовых открытых моделей все еще уступает GPT-4o/Claude 3.5 Sonnet, особенно на длинных контекстах и редких интентах. Рекомендую гибрид: эмбеддинги/классификация/суммаризация - локально, генерация ответов и резонер - API. Это снижает CAPEX на GPU и OPEX на токены в 3-4 раза.
Как обработать ситуацию, когда у клиента нет нормальной базы знаний (все в голове у старших менеджеров)?
Это стандартная ситуация. Не начинайте разработку бота. Начинайте с проекта «Цифровизация Базы Знаний» (2-4 недели).
- Нанимаете технического писателя / аналитика.
- Проводите структурированные интервью с экспертами (Job Shadowing).
- Оцифровываете регламенты в Notion/Confluence/GitBook с версионированием.
- Настраиваете экспорт в ваш пайплайн индексации (Markdown/JSON). Бот - это только интерфейс к знаниям. Нет знаний - нет бота, есть генератор бреда.
Как измерить качество бота в продакшене за пределами CSAT?
Смотрите на Resolution Rate (RR) - % диалогов, закрытых ботом без эскалации к человеку. Целевой бенчмарк для L1 - 65-75%.
Вторым метриком - Escalation Quality: когда бот передает оператору, передает ли он summary, entities (VIN, OrderID), попробованные_интенты? Если оператор спрашивает то, что уже сказал клиент боту - это провал архитектуры контекста.
Третье - Cost per Resolution (CPR): (Стоимость токенов + Инфраструктура + Амортизация разработки) / Кол-во решенных диалогов. У нас CPR ~ 8 ₽ против 145 ₽ у человека.
Стоит ли использовать готовые платформы (Aimylogic, Botmother, SaluteBot, Яндекс.Диалоги) вместо кастомной разработки?
Для MVP за 2 недели и бюджета 100к ₽ - да, берите платформу. Они закрывают 80% кейсов из коробки (виджеты, каналы, билдеры сценариев, встроенный NLU/RAG). Для нашего кейса платформы не подошли по трем причинам:
- Сложная логика совместимости (VIN -> Крос
💡 Совет редакции: Чтобы успевать первым забирать подобные заказы с чеком от 40 000 ₽, подключите мониторинг 35+ бирж через бота @Freelance_Flowbot - отклик в первые 3 минуты повышает конверсию в сделку до 80%.
Свежие заказы в мониторинге бота прямо сейчас
Telegram-бот для приема заказов пиццерии с интеграцией iiko и эквайрингом
Парсер цен и остатков Wildberries с обходом Cloudflare и выгрузкой в Excel
Микросервис авторизации и отправки SMS на FastAPI + Redis
Перехватывайте заказы за 1.8 секунды в Telegram
Не тратьте 4 часа в день на ручной поиск. Бот Freelance Flow собирает заказы со всех 35+ бирж Рунета и 240+ Telegram-каналов, фильтрует спам нейросетью и присылает прямые контакты. Коммерческие тарифы от 499 ₽ / 30 дней с безлимитом лидов.