Автопилот · технический разбор

«Сменные мозги» — что это значит на уровне кода

Обещание «заблокируют одну модель — переключим на другую» стоит ровно столько, сколько стоит проверка за ним. Поэтому — разбор: где переключение реально ломается, что у нас собрано, и что мы пока не проверили.

Откуда взялась задача

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

Вывод простой: модель должна быть сменной деталью, а не фундаментом. Дальше — что мешает сделать её сменной на самом деле.

Три места, где переключение ломается

1Разные движки по-разному помнят разговор

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

Схема «сгенерировали номер разговора заранее и работаем с ним» на втором движке просто не запускается. Правильно так: первый ход идёт без номера, номер вылавливается из ответа движка и сохраняется, дальше разговор продолжается по нему. Мелочь на словах — но именно на ней ломается перенос.

2Разные движки по-разному сообщают об ошибке

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

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

3Разные движки по-разному ограничиваются в правах

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

Это значит, что на резервном движке тонкую настройку прав по каждому инструменту мы обещать не можем — только режим песочницы целиком. Пишем прямо, чтобы это не всплыло потом.

Что собрано и чем проверено

  • Единый интерфейс к обоим движкам. Бот не знает, с какой моделью говорит, — переключение делается одной настройкой, без переписывания логики.
  • 69 автотестов, все проходят. Покрыты обе схемы памяти диалога и обе схемы ошибок — включая ту ловушку из пункта 2. Было 14 — остальные 55 выросли из найденных дефектов: каждый пойманный сбой превращается в тест, чтобы он не вернулся.
  • Эмулятор движка. Повторяет формат ответов настоящего, позволяет прогонять всю обвязку целиком, не тратя на это платную подписку.
  • Диагностика одной командой. Если агент замолчал, отдельный скрипт за секунды называет причину из пяти возможных и печатает готовую команду лечения — вместо переписки «а что у вас в логах».
  • Память и настройки переносятся. При смене модели ваш контекст, сценарии и правила остаются — перенастраивать с нуля не нужно.

Самая полезная поломка, которую мы нашли у себя

Все 66 тестов были зелёными. Продукт при этом ломался с первого сообщения

8 августа мы запустили сборку не против эмулятора, а против настоящего движка. И увидели то, чего не видел ни один тест.

Сценарий самый обычный: агента поставили, вход в аккаунт модели ещё не сделали, человек написал первое сообщение. Ход не проходит — это нормально и ожидаемо. Ненормально другое: номер разговора при этом уже «занят» движком, а бот продолжал предлагать его как новый. Второе сообщение, третье, перезапуск бота, перезапуск сервера — чат оставался сломанным навсегда, и текст ошибки больше не упоминал вход в аккаунт. Человек видел просто молчащего агента, за который заплатил.

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

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

Что мы пока НЕ проверили

Одно звено ещё открыто

Вся цепочка проверена против эмулятора. Не проверено ровно одно: что живой резервный движок с настоящим платным доступом вернёт осмысленный ответ в этой обвязке. Ждём оформления доступа.

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

Что это значит для вас

  • Агент собирается сразу под смену модели, а не «переделаем, когда прижмёт». Переделка потом стоит дороже, чем закладка сразу.
  • Если канал к модели отвалится — переключение занимает вечер, а не пересборку с нуля.
  • Подписка на модель оформляется на вас: мы не перепродаём чужой доступ, вы владеете аккаунтом и не привязаны к нам.

Пакеты и цены — на странице услуги. Если хотите обсудить свой случай, напишите пару слов о том, чем занимаетесь.

Личный AI-агент: пакеты и цены