«Лучше пять раз переспросить, чем один раз выдумать» — я посадил ИИ-ассистента отвечать коллегам в рабочем мессенджере

«Лучше пять раз переспросить, чем один раз выдумать» — я посадил ИИ-ассистента отвечать коллегам в рабочем мессенджере - 1

Всем привет! Меня зовут Александр, я руковожу направлением аналитики страховой вертикали в Банки.ру. Наша вертикаль живёт в отчётах и данных: продажи ОСАГО и КАСКО, ипотечное страхование, кроссы, пролонгация, воронки, кэшбэк и сверки с партнёрами.

И каждый день в рабочем мессенджере на меня прилетает поток одного и того же жанра: «где посмотреть КВ по ОСАГО за сентябрь?», «почему упало одобрение у страховой?», «сделай выгрузку по регионам», «это у нас баг или так и задумано?». КВ здесь комиссионное вознаграждение.

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

Сразу оговорюсь: я не разработчик. Всю обвязку вокруг модели, около 2 500 строк на Python, я собирал вместе с ИИ-ассистентом.

Ниже расскажу, как бот устроен, какие правила не дают ему врать и как он им учится.

Цель и факт

Цель я поставил такую: закрывать без меня примерно 70% рабочих вопросов и не выдать ни одной выдуманной цифры.

Бот отвечает коллегам с 1 октября 2026 года. Возьму два последних полных рабочих дня: в личку пришло 27 рабочих запросов, в среднем 13,5 в день. Бот ответил на 25 из них, это 93% при цели 70%.

Ещё около 30 сообщений по делу в день приходит в рабочие каналы: на обращённые к нему бот отвечает, остальное собирает мне в сводку.

Нагрузка на бота на примере двух рабочих дней

Нагрузка на бота на примере двух рабочих дней

Теперь о скорости. Первая реакция на запрос в личку приходит через 3 минуты по медиане: 18 из 26 запросов получили ответ в пределах 5 минут. Это либо готовый ответ, либо «взял в работу, вернусь через 20–40 минут». Полный ответ на аналитический запрос занимает от десятков минут до нескольких часов: бот не достаёт готовую цифру, а считает.

Честная оговорка: «ответил» не всегда значит «закрыл без меня». Всё, что требует решения, согласования или уходит наружу, бот отдаёт мне. Ошибки тоже были, и каждая превратилась в правило, о них ниже.

Как это выглядит

Коллеги пишут как обычно: мне в личку или в рабочий канал. В каналах и в своей личке бот пишет от отдельного аккаунта «Страховед». В моей личке он пока отвечает от моего имени, но каждое сообщение помечено плашкой «БОТ» и подписью «ассистент Блинова». Так никто не путает, где я, а где он. Отвечает бот в ту же ветку, где задан вопрос.

Первое, чему пришлось научить бота: не бросаться считать. Вот реальный диалог, коллега просит «посещаемость страницы, MAU, DAU, клики и т. д.».

Фрагмент реальной переписки, имена скрыты, два промежуточных сообщения пропущены

Фрагмент реальной переписки, имена скрыты, два промежуточных сообщения пропущены

Бот сначала спрашивает цель, потому что от неё зависит, что считать. Потом детали: страница, период, метрики, разрезы, формат. Когда ответ размытый («всё остальное ок» на вопрос с тремя вариантами), он переспрашивает ещё раз, а не выбирает сам. В конце самое важное: данные готовы, но они раскрывают наш трафик и уходят партнёру, поэтому бот не отдаёт их без согласования руководителя.

Если бот уже занят другим вопросом, он не молчит: ставит 👀 и пишет, каким по очереди взял запрос и когда примерно вернётся. Вечером и в выходные отвечает «увидел, вернусь утром». Исключение одно: если я сам позвал его в разговор, он работает в любое время.

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

Ответ с таблицей

Ответ с таблицей

Что под капотом

Схема компонентов

Схема компонентов

Компонент

Что делает

Цифры

Наблюдатель

Раз в минуту читает личку, рабочие каналы и мои «Сохранённые». Склеивает пачку сообщений в один запрос, ставит 👀 и пишет, каким по очереди взят вопрос. Ночью и в выходные отвечает «увидел, вернусь утром».

В личке отвечает всем коллегам; 11 каналов: в 3 отвечает, 8 только читает

Классификатор

Делит сообщения на классы: ANALYZE (вопрос по данным), ESCALATE (решение или согласование за меня), CONTINUE (ответ на вопрос бота), SKIP (болтовня), UNSURE (не уверен). Это правила, а не языковая модель: быстро, предсказуемо, тестируемо.

5 классов; регресс на 71 реальной фразе из переписки

Аналитик

Языковая модель (Claude в Claude Code) разбирает вопрос и пишет запрос. Число берётся только из запроса к базе, BI или Метрике, а не «из головы». Тяжёлые расчёты уходят фоновым агентам. Они готовят только черновик, а главный агент перепроверяет цифры и отправляет.

Перед отправкой пересчёт минимум 3 цифр

Знания

Вики вертикали, мои правила, пары «вопрос коллеги → мой реальный ответ» за 60 дней, справочник «кто за что отвечает», предпочтения конкретных коллег по формату.

Вики 841 стр.; 64 правила; 635 пар «вопрос → ответ»; обучение на 7 545 сообщениях

Самопроверка

Перед отправкой черновик проходит автоматический чек на ошибки, которые бот уже однажды допускал. Через 5 минут после отправки бот перечитывает свой пост.

Обучение

Каждое утро в 07:00 бот сверяет свои решения с моими реальными ответами: где ответил я, а не он, и где он ответил лишнее. Ещё он читает новое на общем диске и в вики. Итог присылает мне.

Всё, кроме модели, это обычный Python: наблюдатель, классификатор, проверки и обучение.

Регресс классификатора: реальные фразы → ожидаемый класс

Регресс классификатора: реальные фразы → ожидаемый класс

Отдельная часть знаний это карта «кто за что». Не на каждый вопрос должен отвечать аналитик: выгрузки и сверки ведёт один коллега, доработка отчётов идёт задачей в BI, вопросы по КАСКО решает третий коллега. Такие вопросы бот не берёт на себя, а подсказывает, к кому идти. Карту он собрал из моих реальных ответов за 60 дней.

Главное: как бот не врёт

  • Число только из запроса. Модель понимает вопрос и пишет SQL, а цифру даёт база. Если данных нет, бот так и пишет и называет, у кого они есть.

  • Всегда источник. Название отчёта и ссылка, таблица или запрос. Ответ без источника считается гипотезой, и бот прямо об этом говорит.

  • Не уверен, значит спроси. Не тот продукт, не тот период, размытая метрика: бот переспрашивает. По акциям и спорным вопросам говорит «пошёл уточнять» и идёт к ответственному.

  • Решения принимает не он. Сроки, согласования, оценки, данные партнёрам, персональные данные бот сразу отдаёт мне сводкой с черновиком ответа.

  • Сравнивать честно. Только на сопоставимой базе: если способ доступен у 5 страховых из 20, сравниваем на этих пяти.

Пример из первой недели. Коллега спросила, почему упала доля одобрений по ОСАГО. Первая версия ответа считала одобрением и промежуточный статус оффера, и картина получилась неверной. После пересчёта на правильной базе вышло 77,0% против 83,4% месяцем раньше, то есть минус 6,4 п.п. Главный вклад дала одна страховая, у которой одобрения просели с конкретной даты. Ошибку нашёл я, а бот получил правило и проверку, которая теперь ловит такой черновик до отправки.

Самопроверка: реальный вывод проверки на тестовом черновике

Самопроверка: реальный вывод проверки на тестовом черновике

Откуда в боте берутся правила

Бот сам себя не переписывает. Правила дописываю я после разбора: поймал ответ, который не сходится с реальностью → понял, какой проверки не хватило → записал правило с историей в файл, который бот читает при каждом запуске. Дальше правило превращается в тест или в автоматическую проверку перед отправкой. Самообучающийся агент может закрепить и неверный вывод, поэтому человек в контуре обязателен.

За первую неделю набралось 64 правила. Вот несколько, которые выросли из реальных проколов:

  • Промежуточный статус не равен одобрению. Бот посчитал промежуточный статус оффера одобрением, и доля одобрений завысилась примерно на 6 п.п. Теперь набор статусов зафиксирован, а такое «одобрение» в черновике блокируется.

  • Названия партнёров берутся только из справочника. Фоновый агент угадал название страховой по коду и ошибся. Теперь названия берутся только из справочника партнёров.

  • Регион пишется названием, а не кодом. «Регион 54» человеку ничего не говорит, и проверка перед отправкой такой текст не пропустит.

  • В таблице все месяцы и «Итого». После замечания «половины месяцев не хватает» пропуски месяцев ловятся автоматически.

  • Ответ в ту же ветку и в формате человека. Одному коллеге нужен только Excel или дашборд, другому сначала цель запроса. Предпочтения хранятся по каждому коллеге.

  • Не додумывать. «Всё остальное ок» на вопрос с вариантами не считается ответом. Лучше пять раз уточнить, чем посчитать лишнее и потратить время.

Чего бот не делает без меня

  • не принимает решений и не согласовывает за меня, а сразу присылает мне сводку;

  • не отдаёт данные наружу и не раскрывает персональные данные без моего явного «ок»;

  • задачи в трекере и сообщения новым адресатам отправляет только по моей команде;

  • ничего не удаляет и не меняет в базах, только читает;

  • секреты и тексты переписки хранит только локально, на общий диск их не кладёт;

  • молчит в каналах, где ему разрешено только читать, и не вмешивается в мою живую переписку с коллегой.

Модель работает через корпоративный доступ Банки.ру к Claude, а не через личную подписку. По публичным коммерческим условиям Anthropic данные корпоративных клиентов не используются для обучения моделей. Пароли и токены в запросы к модели не попадают, а персональные данные клиентов бот никуда не выгружает и не пересылает.

Ограничения, честно

  • Пока бот работает в сессии на моём компьютере. В каналах и своей личке он уже пишет от отдельного аккаунта «Страховед», а в моей личке пока отвечает от моего имени с плашкой «БОТ».

  • Классификатор на правилах иногда ошибается с новыми формулировками. Однажды он принял вопрос за «планирование» и промолчал. Каждый такой промах становится новой фразой в регрессе.

  • Сложная аналитика занимает часы, а не секунды, и коллег об этом приходится предупреждать.

Что забрать к себе

  • Модель планирует и пишет запрос, а цифру даёт база.

  • Сначала цель и детали, потом расчёт. Размытый ответ означает, что пора переспросить.

  • Всё, что решает или уходит наружу, идёт через человека.

  • Каждая ошибка становится правилом, тестом или автоматической проверкой перед отправкой.

  • Помечайте бота: люди должны видеть, кто им отвечает.

  • Считайте факт против цели, а не по ощущениям.

С чего начать

Начните с самого дешёвого: наблюдатель за личкой, простой классификатор «вопрос по данным / решение / болтовня» и правило «нет источника, нет ответа». Отвечайте сначала одному-двум коллегам, остальное собирайте себе сводкой. 1 октября мой бот утром отвечал одному коллеге, к вечеру уже 14, а с 12 октября отвечает в личке всем. Дальше добавляйте регресс на реальных фразах и ежедневную сверку решений бота с вашими.

Спасибо, что дочитали! Если пробовали что-то похожее, расскажите в комментариях, на каких граблях спотыкался ваш бот. Возможно, это станет следующим правилом :)

Автор: Galablin

Источник

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