От нуля до продакшена: как команда без ML-экспертизы построила AI-ассистента для звонков

Я — техлид группы разработки шины обмена данными в компании «Передовые Платежные Решения» и неформальный лидер команды внутренних ИИ-проектов. В этой статье делюсь опытом внедрения ИИ с нуля: как за 6 месяцев команда из 12 backend-разработчиков, не имевших опыта в ML и AI, создала и запустила в пилот голосового ИИ-ассистента.

Материал будет полезен компаниям, которые рассматривают внедрение ИИ и выбирают между «сделать самим» и «привлечь внешних экспертов», а также тем, кто планирует похожие внутренние продукты.

Технические параметры ассистента:

  • Задача: классификация услуг + детекция возражений → RAG → генерация ответа.
  • Входные данные: поток текстовых сегментов от встроенного транскрайбера телефонии.
  • Задержка: 1,5–2 секунды на генерацию ответа.
  • Стек: Python, FastAPI, PostgreSQL, дообученные BERT, локальная Qwen 8B.
  • Архитектура: on-premise (требование ИБ), интеграция с Voximplant API.

Далее — подробный разбор эволюции проекта от переусложнённого монолита до работающей системы. Расскажу о технических компромиссах, вызовах и практических выводах для команд, которые начинают путь в ИИ без штатных data scientists.

Что делает «Суфлёр»

«Суфлёр» — голосовой ИИ-ассистент, который в реальном времени помогает менеджерам по продажам и сервису во время звонков. Он анализирует диалог, определяет, о каком продукте идёт речь, фиксирует наличие возражений и мгновенно выводит релевантную текстовую подсказку на экран.

В нашей экосистеме более 35 продуктов. Это огромный объём информации, который нужно держать в голове, чтобы эффективно отвечать на возражения и закрывать сделки. B2B-цикл длинный, и важно, чтобы у сотрудника на каждом этапе были под рукой нужные скрипты и аргументы.

AI-ассистент помогает повысить эффективность продаж за счёт зашитых в модель лучших практик и сокращает время выхода новых сотрудников на KPI.

Этапы разработки: от обучения до прототипа

Путь от идеи до MVP занял около двух лет. Активная разработка уложилась в 6 месяцев.

12 инженеров (бэкенд-разработчики, тимлиды, техлиды) прошли обучение: освоили архитектуру нейросетей, работу с LLM, эмбеддинги и векторные базы. К концу курсов у нас была команда с общим пониманием RAG, fine-tuning и классификаторов.

Проект начали с простого рабочего контура. За первые три недели:

  1. Взяли транскрипты звонков как входные данные.
  2. Разработали два классификатора на BERT — для услуг и возражений. Обучили на полутора тысячах транскриптов.
  3. Подготовили две векторные базы знаний на FAISS: описание услуг и скрипты отработки возражений.
  4. Связали всё через промпты с облачной моделью GPT.
  5. За день собрали интерфейс на Django для вывода подсказок.

Через три недели мы представили proof-of-concept бизнесу. Прототип работал с задержкой 10–15 секунд из-за облачной модели, но идея получила зелёный свет. После этого начали дорабатывать систему под требования: скорость, стабильность, интеграции.

От монолита к реальности

Вдохновлённые курсами, мы сначала спроектировали сложный монолитный архитектурный проект, включавший:

  • Собственный аудиоконвейер: захват аудио с микрофона и колонок, транскрибация через локальный Whisper. Но это было медленно и нестабильно.
  • Несколько классификаторов: параллельная обработка текста для определения услуги и типа возражения. Разметка данных заняла больше всего времени.
  • Дообученная LLM: планировали fine-tuning Qwen или Llama на скриптах продаж. Отказались из-за высоких трудозатрат и риска ухудшения качества.
  • Самообучающаяся система: успешные ответы должны были попадать в базу знаний и дообучать модель. Но реализация заняла бы 12–18 месяцев.

Мы пересмотрели подход и отказались от всего, что не вписывалось в сроки и требования.

Отказ от fine-tuning

Fine-tuning требовал большого объёма размеченных диалогов. У нас не было ни данных, ни разметчиков. Вместо этого выбрали RAG — Retrieval-Augmented Generation. Модель не учится всему заранее, а получает релевантную информацию из базы знаний в нужный момент.

Это сократило время разработки и снизило риск галлюцинаций.

Отказ от собственной транскрибации

В нашей телефонии Voximplant уже есть встроенный и качественный модуль транскрибации. Мы начали использовать его REST-интерфейс, получая готовые текстовые сегменты.

Это сэкономило минимум 2 месяца разработки и дало стабильный входной поток.

Упрощение классификаторов

Изначально у нас был многоклассовый классификатор возражений. Но после анализа реальных диалогов мы поняли: для MVP важнее не тип возражения, а его наличие.

Заменили классификатор на бинарный (есть/нет). Это резко повысило точность. Детализацией теперь занимается LLM, ищущая релевантные скрипты по ключевым словам.

Запуск на удалённой машине с мощным GPU ускорил обработку.

Замена векторной БД на JSON-словари

Для RAG мы подготовили базы знаний: справочник услуг и скрипты отработки возражений. Объём — несколько мегабайт.

Подключать тяжёлые векторные базы (Weaviate, Qdrant) было избыточно. Вместо этого загрузили структурированные JSON-файлы в память.

Поиск стал быстрым и не требовал сетевых вызовов. Сработал принцип KISS.

Облако vs локальная модель

Сначала тестировали GPT и другие облачные модели. Задержка — 7–20 секунд. Кроме того, ИБ запрещает передавать транскрипты во внешние сервисы.

Решение — развернуть модель на своём сервере. Установили Qwen 8B на GPU-сервер.

Ответы были чуть короче, чем у 32B-версии, но для подсказок этого хватало. Задержка стабилизировалась на уровне 2 секунд, все данные остались внутри периметра.

Вместо CRM — простой интерфейс за день

Интеграция с CRM была бы идеальной, но система переживала миграцию. Чтобы не ждать, бэкендер за день собрал интерфейс на Django: одна кнопка и поле вывода.

Этого хватило, чтобы показать прототип.

Финальная архитектура

Система превратилась в конвейер, отрабатывающий за 2 секунды:

  1. Транскрибация через Voximplant → текстовые сегменты.
  2. Классификация услуги и бинарная детекция возражения (BERT).
  3. Поиск релевантных скриптов в JSON-базе.
  4. Генерация подсказки через локальную Qwen 8B.
  5. Вывод результата на интерфейс.

Ключевые сложности и решения

Каждый ИИ-проект сталкивается с тремя вызовами: данные, инфраструктура, дедлайны. Вот как мы справились с основными.

Разметка — тонны ручной работы

Мы взяли 200 звонков и разделили их между 12 разработчиками. Уперлись в стену: разметка диалогов — кропотливый процесс, требующий понимания контекста и экспертизы.

Менеджеры-наставники размечали в разы быстрее. Мы поняли: в живом диалоге главное — понять, есть ли критическое возражение прямо сейчас.

Переформулировали задачу: не «научить ИИ думать», а «дать доступ к нужной информации в нужный момент».

Заменили многоклассовый классификатор на бинарный. Классификацию возражения теперь делает LLM при генерации подсказки. Это чуть увеличило задержку, но ускорило прогресс и улучшило качество.

2 секунды — не пожелание, а физическое ограничение

Подсказка должна приходить за 1,5–2 секунды. Иначе рушится динамика разговора.

Облачные API (GPT, DeepSeek) давали задержку 7–20 секунд. Плюс зависимость от внешней нагрузки и необходимость маскировки данных.

Развернули Qwen 8B на своём GPU-сервере. Ответы уложились в 2 секунды. Пожертвовали детализацией ради скорости и предсказуемости.

Безопасность данных — не бюрократия, а необходимость

Передача транскриптов с персональными данными во внешние сервисы нарушала политики ИБ. Рассматривали PII-маскер, но это добавило бы:

  • Месяц разработки для загруженной команды ИБ.
  • 200–500 мс задержки на запрос.
  • Риск искажения контекста при маскировке.

Согласовали архитектуру с обработкой внутри периметра:

  1. Транскрибация — в облаке (Voximplant), но данные приходят в периметр.
  2. Обработка текста — на наших серверах.
  3. Генерация — локальной моделью на нашем железе.

Решение удовлетворило ИБ и решило проблему скорости.

Сложности связаны между собой

Мы поняли: проблемы взаимосвязаны. Задержки облачных моделей и требования безопасности — нашли единое решение в локальном развёртывании. Сложности с разметкой и скоростью — побеждены упрощением архитектуры.

Мы не боролись с проблемами — перепроектировали систему так, чтобы их не было. Этот подход оказался эффективнее точечных решений.

Метрики по итогам пилота

Технические показатели:

  • Средняя задержка — 2 секунды. В 2–3% случаев — до 3 секунд (не критично).
  • Точность классификации услуг — более 70%. Достаточно для MVP; знаем, как поднять до 90%.
  • Качество распознавания речи — от 92%, зависит от качества связи.

«Суфлёр» прошёл пилот. Есть первые качественные результаты: обратная связь, юзабилити, снижение нагрузки на наставников. Для статистически значимых данных по конверсии и KPI нужно масштабирование. Сейчас фокус — на доработке архитектуры и интеграции в CRM. Как накопим данные — вернёмся с цифрами.

Выводы и рекомендации

Поделимся принципами, которые помогли нам и могут быть полезны другим командам.

Лучший ИИ решает конкретную боль

Начинайте не с «что можно сделать с ИИ», а с «какую проблему, которая стоит денег или времени, мы можем решить?».

Когда за технологией видна бизнес-цель, поддержку и ресурсы получить проще.

Чтобы провалидировать идеи, задавайте шесть вопросов:

  • Рискуем ли деньгами или чем-то ещё из-за проблемы?
  • Повторяется ли она массово?
  • Можно ли получить эффект за 6–12 месяцев? Или решить без ИИ быстрее?
  • Что даст применение ИИ в этом проекте? (если эффект разовый и дорогой — смысл теряется)
  • Можно ли встроить решение в текущие процессы без революции?
  • Можно ли масштабировать результат?

Инвестиции в своих людей окупаются

Можно было нанять внешних ML-инженеров. Вместо этого мы обучили своих IT-специалистов.

Получили экспертов, которые понимают ML и глубоко знают бизнес-процессы: CRM, телефонию, ограничения ИБ.

Они говорят на одном языке с заказчиками. Внешний эксперт потратил бы месяцы на погружение.

Внутренние ИИ-проекты — это не только продукт, но и инструмент развития экспертизы и удержания талантов. Команда, вырастившая решение с нуля, будет его защищать, развивать и масштабировать эффективнее подрядчиков.

Двигайтесь маленькими, но быстрыми шагами

Ключевой результат — рабочий прототип уже через 3 недели. Пусть с задержкой и простым интерфейсом — но он работал. Это дало команде уверенность, а бизнесу — веру в проект.

Мы придерживались правила: «сначала закройте 90% потребности простым способом». Последовательно отказывались от «важных, но не критичных» функций — fine-tuning, векторные базы, петля обратной связи — ради скорости.

Разбивали путь на короткие итерации с явным результатом. Делали не «идеально», а «работоспособно и полезно».

Коммуникация — часть технического дизайна

Сначала хотели молча разработать решение за несколько месяцев. Вовремя остановились и начали регулярно синхронизироваться с ИБ, инфраструктурой и бизнесом.

Рекомендуем с первого спринта включать ключевых стейкхолдеров: ИБ, инфраструктуру, комплаенс. Короткие демо и встречи раз в 1–2 недели помогают избежать переделок и ускоряют разработку.

Вместо MLOps — ML-стек под задачу

Наш финальный стек: FastAPI, PostgreSQL, локальная LLM, BERT-классификаторы. Без сложных MLOps-пайплайнов на старте.

Это дало контроль над производительностью и безопасностью.

«Коробочное» решение потребовало бы почти столько же усилий по интеграции, но лишило бы гибкости и скорости.

Выбирайте самый простой и контролируемый стек, который решает задачу сейчас. Например, локальная быстрая модель часто лучше облачной — продвинутой, но нестабильной.

Итог

Внедрение ИИ — это больше об инженерной культуре, управлении ожиданиями и умении делать сложные выборы. Главный навык, который мы получили, — отличать must have от could have и без сожаления отказываться от второго ради скорости и результата.

Команда прошла путь от группы разработчиков до внутреннего центра компетенций. Сейчас адаптируем «Суфлёра» для работы с оттоком — это лишь один из новых ИИ-проектов.

Если вы задумываетесь, можно ли стартовать ИИ-проект с бэкенд- или фулстек-разработчиками — наш опыт говорит: да, можно. Но готовьтесь к вызовам не в алгоритмах, а в системном дизайне, инфраструктуре и управлении данными.

Читать оригинал