Автопилот · технический разбор
Обещание «заблокируют одну модель — переключим на другую» стоит ровно столько, сколько стоит проверка за ним. Поэтому — разбор: где переключение реально ломается, что у нас собрано, и что мы пока не проверили.
Это не гипотеза с рынка, а история нашего же клиента. Человек настроил личного агента, месяц спокойно им пользовался — потом доступ к модели из России отвалился, и агент замолчал. Работа встала не потому, что что-то сломалось в самом агенте: сломался канал к «мозгам».
Вывод простой: модель должна быть сменной деталью, а не фундаментом. Дальше — что мешает сделать её сменной на самом деле.
Агент без памяти диалога бесполезен — каждый раз объяснять контекст заново никто не будет. У разных движков память устроена по-разному: одному идентификатор разговора можно назначить заранее, другой чеканит его сам, и подставить свой нельзя.
Схема «сгенерировали номер разговора заранее и работаем с ним» на втором движке просто не запускается. Правильно так: первый ход идёт без номера, номер вылавливается из ответа движка и сохраняется, дальше разговор продолжается по нему. Мелочь на словах — но именно на ней ломается перенос.
Самая неприятная ловушка, и мы в неё попались на первой версии. Один движок при провале авторизации возвращает код успеха — формально «всё хорошо». Другой возвращает код ошибки, но текст ошибки кладёт туда же, куда обычные ответы.
Обвязка, которая верит кодам возврата, в первом случае отдаст клиенту служебное «Вы не авторизованы» как реплику агента. Человек увидит, что его умный помощник несёт техническую чушь, и потеряет к нему доверие за одно сообщение. Мы это поймали у себя и закрыли отдельным тестом — до того, как это увидел бы клиент.
Агент работает с вашими файлами и данными, поэтому важно, что ему разрешено. Здесь движки честно неравноценны: у одного есть точный список разрешённых действий, у другого — только грубые режимы: «только чтение», «запись в рабочей папке», «полный доступ».
Это значит, что на резервном движке тонкую настройку прав по каждому инструменту мы обещать не можем — только режим песочницы целиком. Пишем прямо, чтобы это не всплыло потом.
8 августа мы запустили сборку не против эмулятора, а против настоящего движка. И увидели то, чего не видел ни один тест.
Сценарий самый обычный: агента поставили, вход в аккаунт модели ещё не сделали, человек написал первое сообщение. Ход не проходит — это нормально и ожидаемо. Ненормально другое: номер разговора при этом уже «занят» движком, а бот продолжал предлагать его как новый. Второе сообщение, третье, перезапуск бота, перезапуск сервера — чат оставался сломанным навсегда, и текст ошибки больше не упоминал вход в аккаунт. Человек видел просто молчащего агента, за который заплатил.
Починили двумя слоями: неудавшийся первый ход больше не оставляет за собой занятый номер разговора, а уже сломавшиеся установки распознают эту ошибку и восстанавливаются сами, без вмешательства. Проверено на живом движке; на старом коде новые тесты краснеют, на новом — зелёные.
Вывод, который мы забрали себе: зелёные тесты против эмулятора ничего не гарантируют, если эмулятор мягче реальности. Наш теперь строже — он отвергает то же, что отвергает живой движок.
Что изменилось. До сегодняшнего дня вся цепочка была проверена только против эмулятора, и мы честно писали здесь, что настоящего ответа модели в этой обвязке не видели ни разу. Теперь видели: живой прогон на основном движке (Claude) прошёл целиком — агент отвечает, помнит предыдущий ход в том же диалоге, а сгоревшая сессия восстанавливается сама, вместо того чтобы намертво заклинить переписку. Три проверки из трёх, ни одной осечки.
Обновление 10 августа: резервный мозг отвечает. Шесть кругов приёмки подряд резервным движком у нас числился Codex — и все шесть он молчал, потому что под него нет платного аккаунта. Мы держали это за внешний блокер. Оказалось, дело не в аккаунте, а в том, что мы упёрлись в одного поставщика: взяли другого, у которого доступ уже был, и провели такой же живой прогон — три хода из трёх, ответ по-русски, контекст между ходами держится, отклик 0,2–0,5 секунды. Резервный мозг существует и работает.
Что по-прежнему НЕ сдано. Этот прогон сделан на уровне движка, а не в клиентской поставке: автоматического переключения «основной упал → включился резервный» в коробке у клиента ещё нет, его собираем сейчас. Пока не собрано — резервный мозг считаем проверенным, но не сданным, и на странице это написано прямо. Отдельно: ветку Codex мы из обещаний убрали до тех пор, пока не увидим её живой ответ своими глазами.
Мы пишем такие вещи, а не умалчиваем, по простой причине: если в чём-то есть подвох, вы узнаете о нём от нас, а не из собственного сломавшегося агента.
Что было. Три кнопки на этом сайте ведут в наш Telegram-бот. В коде стояла проверка «свой или чужой», и на публичный режим её никто ни разу не применил. Результат: бот отвечал только владельцу, а любой пришедший с сайта получал полную тишину. Бот при этом был жив, процесс работал, в журнале ни одной строки об ошибке. Сторож, который следил за тем, что процесс не умер, такую поломку не видит по устройству.
Что сделали. Починили и завели отдельную проверку, которая раз в час играет роль незнакомца: пишет боту от чужого номера и требует ответ. В ней есть контрольная ветка — при выключенном публичном режиме тот же незнакомец обязан получить тишину. Если бы её не было, сторож принял бы за здоровье бота, который отвечает вообще всем. Сегодня обе копии — боевая и эталонная — дают 4 совпадения из 4.
Почему это здесь, а не в нашем внутреннем журнале. Мы продаём агента, который разговаривает с людьми. Правило, которое мы забрали себе и применяем теперь ко всему: у канала, который приносит деньги, проверять надо не «жив ли процесс», а «проходит ли по нему человек». Разница между этими двумя вопросами стоила нам двух суток молчащей двери, и мы предпочитаем, чтобы вы прочитали об этом здесь.
В тот же день, тем же способом, нашли второе. Мы обновили боевую копию нашей же поставки — так, как это сделает клиент, — и обновление отказалось завершаться: «копия не проходит собственные тесты». Разобрали по одному: тесты проходят, врал отчёт. Один набор проверяет установщик, которого в копии клиента нет по замыслу, и потому не может пройти там никогда; второй был убит по таймауту, а назван упавшим. То есть путь обновления у клиента не работал бы вообще, при полностью исправном коде. Чиним. Пишем об этом до того, как кто-то купил, а не после.
Пакеты и цены — на странице услуги. Если хотите обсудить свой случай, напишите пару слов о том, чем занимаетесь.
Личный AI-агент: пакеты и цены