Ассистент для зумов, часть 11: девять моделей проверяли код, остались две
Из девяти локальных моделей, проверявших код ассистента, который пишет протоколы зум-созвонов, остались две. Быстрая прогоняет каждое изменение и ловит очевидные ошибки. Тяжёлая раз в день разбирает спорные места целиком. Остальных семь убрали три причины: выдуманные функции, согласие с любым кодом и проверка, которая шла дольше, чем правка.
🔥 Ночь, когда ревьюер одобрил потерю протокола
Понедельник, планёрка отдела продаж. Ассистент записал её целиком, но протокол не появился. Ни файла, ни строки с ошибкой в логе. Заметили во вторник, когда менеджер спросил, кто обещал клиенту пересчитать спецификацию, и никто не вспомнил.
Причину нашёл за вечер. Выгрузка протокола в хранилище ловила любое исключение блоком except, писала в лог пустую строку и возвращала «успешно». Очередь верила и удаляла транскрипт. Связь с хранилищем в тот день моргнула на секунды, но этого хватило: единственная копия разговора исчезла.
Неприятнее другое. За два дня до сбоя этот модуль уже проверяла одна из локальных моделей и ответила: «Обработка ошибок на месте, замечаний нет». Я ей поверил.
Цена такой ошибки считается не в минутах записи. Поручения, прозвучавшие на созвоне, не попадают ни в одну задачу. Договорённость с клиентом о сроке или цене нигде не зафиксирована, и через неделю её восстанавливают по памяти, а память у участников разная. Если ассистент пишет протоколы клиентских встреч, потеря означает спор, в котором нечем подтвердить свою версию.
Поэтому я перестал полагаться на одного ревьюера и устроил отбор.
🧪 Как устроен отбор: одинаковые условия для всех девяти
Ассистент работает локально: звук созвона попадает на сервер в офисе, речь распознаётся там же, модель превращает текст в протокол с поручениями. Внешних API нет, поэтому и код не хотелось отдавать сторонним сервисам: в нём пути к серверам, схема выгрузки в учётную систему и куски настоящих разговоров из тестов. Ревьюеров я тоже запускал у себя.
Всем девяти дал одно и то же: три модуля (захват звука, очередь задач, выгрузка протокола), один запрос и один формат ответа: файл, строка, что не так, как исправить. В код заранее подсадил ошибки, о которых знал, и среди них оставил ту самую, с потерянным протоколом.
Оценивал по четырём вопросам:
- ✓Нашла ли модель ошибку, которую я подсадил.
- ✓Не придумала ли она ошибку, которой нет.
- ✓Повторяет ли то же замечание при втором прогоне на том же коде.
- ✓Сколько ждать ответ. Если проверка идёт дольше правки, ею перестают пользоваться.
❌ Почему отсеялись семь моделей
Согласные со всем
Первая группа хвалила код. Пустой except она называла «аккуратной обработкой ошибок», а отсутствие повтора при сбое сети не замечала. Читать такие ответы приятно и бесполезно: находилось только то, что очевидно и без модели.
Фантазёры
Вторая группа находила проблемы, которых нет. Одна модель требовала заменить вызов функцией, которой нет в используемой библиотеке. Другая «исправляла» рабочий участок на нерабочий. Каждое такое замечание отнимает время: сначала ищешь функцию, потом понимаешь, что искать нечего. К тому же на втором прогоне те же модели выдавали другой набор замечаний к тому же коду.
Тяжеловесы
Третья группа ошибки находила, но ответа приходилось ждать минутами на каждый модуль. Пока модель думает, правка уже сделана руками. Для проверки каждого изменения такая модель не годится, для ночного разбора годится, и одну из них я оставил именно ради него.
📊 Кто из какого класса и что с ним стало
Названия моделей быстро устаревают, а различия между классами сохраняются, поэтому итог привожу по классам.
| Класс моделей | Как себя вели | Что решил |
|---|---|---|
| Малые | Отвечают быстро, хвалят любой код, придумывают функции, которых нет в библиотеке | Убрал все |
| Средние | Находят пустые except и забытые проверки, но дают и лишние замечания | Оставил одну: ложные замечания у неё редкие и сразу заметны |
| Крупные | Видят связи между модулями, но отвечают минутами | Оставил одну для ночного прогона |
| Пара из средней и крупной | Быстрая смотрит каждое изменение, тяжёлая раз в сутки разбирает код целиком | Рабочая схема |
Крупная модель оказалась нужна по конкретной причине. Средняя нашла сам пустой except, но не увидела, чем он грозит. Крупная объяснила цепочку: сбой выгрузки не страшен, пока очередь не удаляет задачу до подтверждения записи. Эту связь между двумя модулями она нашла единственная.
🔁 Как две модели работают вместе
Схема простая, правил в ней четыре.
- ✓Быстрая модель проверяет каждое изменение перед слиянием, тяжёлая раз в сутки читает код целиком.
- ✓Ревьюер ничего не правит. Он пишет замечания, правит человек.
- ✓Замечание принимается, только если его удаётся воспроизвести тестом. Не воспроизводится: отбрасываем, как бы уверенно оно ни звучало.
- ✓Слияние подтверждает человек.
Третье правило закрыло главную дыру. Фантазии быстрой модели никуда не делись, но стали дешёвыми: замечание без теста закрываю сразу. А у ассистента появился тест, написанный по тому понедельнику: связь с хранилищем обрывается посреди выгрузки, задача обязана остаться в очереди и повториться.
🏢 Что взять из этого, если вам нужен ассистент или бот в компании
Запись совещания хранит голоса и имена, а это персональные данные по 152-ФЗ. Участников предупреждают о записи, а данные граждан РФ собирают и хранят на серверах в России. Локальная схема упрощает задачу: распознавание, протокол и проверка кода остаются внутри вашего периметра, наружу ничего не уходит.
Протокол, который лежит файлом, мало что даёт. Польза начинается дальше: поручения из него становятся задачами с исполнителем и сроком, договорённости с клиентом попадают в его карточку. Если клиенты и заказы ведутся в 1С, это решает доработка 1С: ассистент передаёт результат, а 1С создаёт задачу или запись. Для торговли такую связку можно настроить в 1С:Управление торговлей, чтобы итоги созвона с покупателем ложились в карточку контрагента. Если учёт пока живёт в таблицах, начинать нужно с внедрения 1С, а ассистента подключать потом.
Тот же принцип работает для чат-бота на сайте. Модель, которая придумала несуществующую функцию в коде, так же придумает несуществующую скидку в чате с клиентом, и обещанную ботом цену придётся выполнять или объяснять отказ. Поэтому перед каждым обновлением бота прогоняют набор вопросов с заранее известными ответами: цены, сроки, условия.
Мы собираем такие связки целиком: сервер в России, локальная модель, ревью кода по схеме выше, подключение к 1С. Работу сисадмина и сопровождение 1С считаем по ставке 3 800 ₽/час, оценку в часах даём после разбора задачи. Если базу 1С ещё нужно перенести на сервер, аренда стартует от 1 100 ₽/мес за пользователя. Отличие от готового бота по подписке в том, что код и разговоры не уходят стороннему сервису, а в работу попадает не то, что одобрила модель, а то, что прошло тест.
✅ Как проверить своего ревьюера за вечер
- ✓Возьмите модуль выгрузки и оставьте в нём пустой except. Если модель отвечает «замечаний нет», ревьюер из неё не выйдет.
- ✓Спросите про функцию, которой нет в вашей библиотеке. Хорошая модель скажет, что такой функции не знает, плохая сочинит описание.
- ✓Запустите проверку дважды на одном коде. Разные замечания к одному и тому же коду означают, что доверять нельзя.
- ✓Засеките время на самом большом модуле. Дольше правки: оставьте модель для ночного прогона.
- ✓Для каждого замечания напишите тест. Нет теста, нет правки.
Одного вечера хватит, чтобы понять, с кем из моделей можно работать. Если нужна помощь с сервером или подключением к 1С, напишите нам: разберём задачу и назовём срок.
❓ Частые вопросы
Можно ли проверять код локальной моделью без мощной видеокарты?
Можно, но с ограничениями. Средняя модель для проверки каждого изменения запускается на более скромном железе, а крупную придётся гонять ночью и ждать ответа минутами. Поэтому сначала определяют, что проверять и как часто, и только потом подбирают сервер под нужный класс модели.
Почему нельзя доверять одной модели-ревьюеру?
Модель может согласиться с любым кодом или придумать ошибку, которой нет. В нашем случае одна из них назвала пустой except аккуратной обработкой ошибок, и ассистент потерял протокол планёрки. Поэтому замечание принимают только после воспроизведения тестом, а слияние подтверждает человек.
Нужно ли согласие участников на запись созвона ассистентом?
Запись голосов и имён считается обработкой персональных данных по 152-ФЗ. Участников предупреждают о записи заранее и фиксируют согласие письменно или в электронной форме. Точный порядок зависит от ваших процессов, его лучше согласовать с юристом. Хранить данные граждан РФ нужно на серверах в России.
Сколько стоит поднять локального ассистента с подключением к 1С?
Работа сисадмина и сопровождение 1С стоят 3 800 ₽/час. Итоговую цену называем после разбора задачи: она зависит от железа, числа участников созвонов и того, что ассистент должен создавать в 1С. Если базу нужно перенести на сервер, аренда 1С стартует от 1 100 ₽/мес за пользователя.
Подходит ли такая схема проверки для чат-бота на сайте?
Да. Модель, которая отвечает клиентам, проверяют вопросами с заранее известными ответами: цены, сроки, условия. Придуманная ботом скидка обходится дороже придуманной функции в коде. Набор вопросов прогоняют перед каждым обновлением бота, а сама модель работает на вашем сервере.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

