Как заставить дешёвую LLM думать как топовая: протокол вместо мощности

Дорогая топ-модель решает сложные задачи лучше дешёвой — тут спорить не с чем. Спорить стоит с выводом «значит, на серьёзное всегда берём топ». Посмотрите на свои последние 10 ошибок LLM-агента. Там почти наверняка нет пункта «модель не осилила сложную мысль». Там есть: поверила устаревшей документации, проверяла единственную версию причины, отчиталась «готово» после того, как команда прошла без ошибок, выдала догадку за факт. Это ошибки процесса — и лечатся они процессом.

Мы проверили это на практике: попросили топ-модель написать протокол собственного мышления так, чтобы модели попроще исполняли его шаг за шагом. Получился скилл Fable Mind — 6 фаз с обязательными контрольными точками. С ним Sonnet на диагностике инцидентов и правках боевого сервера работает близко к топ-уровню, расходуя примерно в 5 раз меньше.

Почему дисциплина бьёт сырую мощность

Сырая мощность угадывает, дисциплина проверяет. Модель не обязана быть умнее — она обязана быть строже.

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

Шесть фаз протокола

Фазы идут по порядку, контрольные точки не пропускаются.

  • Фаза 1. Намерение и критерий готовности. Одним предложением сформулировать, чего человек хочет на самом деле. Затем проверяемый итог: «готово = такой-то артефакт лежит там-то и проверен так-то». Если разумных трактовок две и больше — один уточняющий вопрос до работы.
  • Фаза 2. Факты до мнений. Документация, память и комментарии устаревают. Любое утверждение о системе проверяется чтением её реального состояния: файл, журнал, база, живой процесс. Каждый факт — с доказательством: команда и её вывод, строка кода, результат запроса. Без доказательства это мнение, и помечается оно как мнение.
  • Фаза 3. Минимум две гипотезы. Если в голове одна версия причины, второй назначается «моя версия неверна, совпадение случайно». Следующая проверка должна различать гипотезы, а не подтверждать любимую. Неожиданный результат объясняем сразу, до следующего шага.
  • Фаза 4. Действия с обратимостью. Резервная копия и путь отката — до правки. Перед необратимым (удаление, деньги, отправка людям) — стоп-проверка из трёх вопросов: доказательства подтверждают именно это действие? что сломается, если я неправ? как откатить и за сколько?
  • Фаза 5. Самопроверка перед ответом. Что бы меня опровергло — я это проверил? Числа пересчитаны из источника, единицы сходятся? Каждое утверждение откалибровано: «проверил», «предполагаю, потому что…», «не знаю». Выдать предположение за факт — худший провал протокола.
  • Фаза 6. Ответ. Вывод первым, доказательства после. Факты отдельно от толкований. Нерешённое и риски — явно, отдельным блоком: спрятанный хвост стреляет через неделю, когда о нём все забыли.

Списком фазы выглядят самоочевидными. Разница видна в работе, поэтому ниже — все 6 фаз с примерами: как модель ведёт себя без правила и с ним.

Фаза 1 — намерение и критерий готовности

Запрос: «скрипт выгрузки падает, почини». Модель без протокола сразу пишет код — и заодно перерабатывает половину скрипта под свои представления о прекрасном. Через 20 минут у вас другой скрипт, и падает он в новом месте.

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

Критерий готовности кажется бюрократией до первого случая, когда агент отчитался «сделал», а артефакта нет. «Готово» без проверяемого артефакта — просто слово в отчёте.

Фаза 2 — факты до мнений

Запрос: «бот перестал отвечать в чате». Без правила модель открывает README, находит там схему работы и отвечает: «судя по документации, дело в токене — обновите его». README написан полгода назад. Бот молчит, потому что диск переполнен и система убила процесс.

С правилом модель начинает с живого состояния: статус процесса, последние 50 строк журнала, время последнего успешного ответа. И вставляет доказательства прямо в ответ: команда, её вывод, «процесс мёртв с 14:02, в журнале — no space left on device». Для утверждений без доказательства у неё есть обязательная пометка: «предполагаю».

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

Фаза 3 — минимум две гипотезы

Запрос: «платёж клиента не появился в таблице». Без правила модель берёт первую пришедшую версию — «парсер платежей упал» — и полчаса копает парсер. Парсер жив. Банк изменил формат письма-уведомления, и письмо не распозналось.

С правилом до первой проверки на столе лежат две версии. H1: парсер упал. H2: парсер жив, изменились входные данные. Различающий тест: журнал парсера за время платежа. Обрабатывал другие письма в этот час — H1 отпадает за одну проверку, полчаса сэкономлены. Рабочий вопрос из скилла: «какой результат заставит меня отбросить мою версию?»

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

Фаза 4 — действия с обратимостью

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

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

Четвёртый пункт фазы — взгляд по сторонам: что ещё трогает это изменение? Перезапуск службы, от которой зависит соседний процесс; кэш, который ещё час отдаёт старое; ночная задача по расписанию, которая перезапишет правку. Минутная проверка «сосед не упал?» снимает целый класс сюрпризов следующего утра.

Фаза 5 — самопроверка перед ответом

30 секунд перед отправкой. Вопросы к себе: что бы меня опровергло — проверено ли это? числа пересчитаны из источника, единицы сходятся? какую аномалию я объяснил удобной версией, но не проверил? в каком месте скептик спросит «с чего ты взял?» — и стоит ли там доказательство или оговорка.

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

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

Фаза 6 — ответ

Без правила модель пересказывает хронологию расследования: «сначала посмотрел туда, потом сюда, затем…» — и вывод тонет в третьем абзаце. С правилом первая строка отчёта отвечает на вопрос целиком: «Причина — переполненный диск; журнал ротирован, бот перезапущен, отвечает — проверено сообщением в чат». Кому нужны подробности, читает доказательства ниже.

Второе требование — нерешённое отдельным блоком, без слияния с фактами. Хвост, названный в отчёте, стоит одну строку. Скрытый хвост стоит новую диагностику через неделю-две, когда контекст потерян и разбирательство начинается заново.

Провалы, из которых протокол вырос

Антипаттерны в скилле собраны из реальных случаев нашей работы. Пять показательных.

Первый: конфиг применился без ошибок, но не работал. Усиливали настройки удалённого доступа по SSH: новый файл настроек создан, служба перезапущена, в выводе ни одной ошибки. А запрещённый вход по паролю остался включён. Служба читает несколько файлов настроек, и приоритет оказался у соседнего — он тихо перебивал наш. Вскрылось только чтением эффективного состояния: командой, которая показывает, что служба применила на деле. Так в протоколе появилось правило: после правки читаем результирующее состояние системы, а не собственный diff.

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

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

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

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

Экономика: где протокол закрывает разрыв, а где нет

Токен топ-модели стоит примерно в 5 раз дороже токена средней из той же линейки. Для агента, который работает потоком — десятки сессий в день, — выбор модели превращается в заметную строку расходов, и «гоняем топ на всё» перестаёт быть нейтральным решением.

Грубая арифметика для потока: 100 задач в неделю, из них сложных — 15-20. Если топ-модель берёт только их, а остальные 80 закрывает средняя с протоколом, счёт за токены падает примерно втрое против режима «всё на топе». Качество рутинной части при этом не проседает: процессные проверки от размера модели не зависят.

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

Честная оговорка: протокол не делает модель умнее. Архитектура с десятками взаимосвязей, нетривиальные алгоритмы, тексты, где нужен вкус, задачи без проверяемого критерия ответа — здесь разница в мощности остаётся. Дисциплина уберёт процессный брак и в этих задачах, но глубины не добавит: если модель не видит третий вариант архитектуры, чек-лист его не подскажет.

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

Как написать такой протокол под себя

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

Соберите 10 последних фейлов вашего агента или ваших сессий с LLM. Источники: история чатов, тикеты, откаты в git, сообщения вида «ты же писал, что готово». Формат — одна строка на фейл: что просили, что модель сделала, где разошлось.

Разложите на две стопки. Процессные: не проверила, не спросила, угадала, отчиталась без артефакта. Ограничения способности: честно не потянула — не увидела алгоритм, не удержала архитектуру целиком, написала плоский текст. По нашему опыту в первую стопку попадает 7-8 фейлов из 10, и эта пропорция отвечает на вопрос, нужен ли вам протокол.

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

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

Добавьте секцию «когда НЕ применять»: справочные вопросы, тривиальные правки, команды с очевидным результатом. Без этой секции протокол душит простые задачи ритуалом, и через неделю вы сами его выключите.

Держите ядро коротким. 10-15 правил модель читает и исполняет; протокол на 5 страниц — уже литература. Новые фейлы дописывайте в раздел антипаттернов с датой и одной строкой сути: со временем этот раздел становится самой ценной частью файла, потому что в нём — карта граблей вашей конкретной системы.

Как внедрить у себя

Понадобятся два слоя.

Первый — скилл-файл. Протокол оформляется отдельным SKILL.md с коротким описанием-триггером («применять при диагностике багов, действиях на боевом сервере, финансовых расчётах») и телом из шести фаз. В Claude Code такой файл кладётся в папку скиллов, и модель подхватывает его по команде или сама, когда задача подходит под триггер.

Второй — «всегда включено». Скилл, который надо вызывать руками, легко забыть. Поэтому выжимка ядра — пять-семь строк про факты с доказательствами, две гипотезы, проверку результата и калибровку «знаю/предполагаю» — вшивается в постоянные инструкции: в CLAUDE.md проекта или в системный промпт вашего агента. Тогда протокол работает в каждой сессии, включая фоновые и автоматические. Протокол не привязан к вендору: это обычный текст, для GPT-инструментов и Codex он читается через AGENTS.md.

И оговорка, без которой протокол начнёт раздражать: в нём прописано, когда его НЕ применять. Справочный вопрос, тривиальная правка, команда с очевидным результатом — ответ сразу, без ритуала. Раздувать простое — такой же провал, как комкать сложное.

Проверка, что протокол работает

Слои поставлены — теперь три проверки, что модель их подхватила.

  • Задача-приманка. Дайте задачу с ловушкой, про которую вы знаете: баг с двумя правдоподобными причинами, где настоящая — вторая. Модель с работающим протоколом назовёт обе версии и предложит различающий тест. Модель без него уверенно починит первую причину — и промахнётся.
  • Прямой вопрос. В новой сессии спросите: «какие правила работы ты сейчас применяешь?» В ответе должно прозвучать ядро выжимки — гипотезы, доказательства, проверка результата. Общие слова про аккуратность означают, что выжимка до постоянных инструкций не доехала.
  • Повтор старого фейла. Возьмите случай из собранного списка и прогоните заново. Самый честный тест: протокол писался против этих ошибок, на них и проверяется.

Через неделю-две — ревизия: какие правила модель выполняет стабильно, какие проскакивает. Игнорируемое правило почти во всех случаях сформулировано без проверяемого действия — перепишите его по формуле из предыдущего раздела.

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

Типовые возражения

«Это же просто промпт». Да, и в этом сила: обычный текст без привязки к вендору переносится между инструментами — Claude Code, Codex, самописный агент поверх API. От мотивационного «думай шаг за шагом» его отличают два свойства: правила выведены из задокументированных фейлов, и в них зашиты проверяемые действия. «Будь внимательным» модель сглаживает до фонового шума, «прочитай результирующее состояние после правки» — выполняет.

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

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

«Проверки замедлят простые задачи». Для того и существует секция «когда НЕ применять»: справочный вопрос и тривиальная правка идут без ритуала. Замедление остаётся на сложных задачах — и там оно окупается: непроверенная правка на живой системе обходится дороже трёх лишних минут на чтение журналов.

Где взять готовый файл

Собранный SKILL.md — шесть фаз, шаблон рабочих заметок и антипаттерны — лежит в клубе Solar Inside: club.4bos.ru. Выжимку «всегда включено» для постоянных инструкций соберёте из него за пять минут — ядро протокола умещается в несколько строк. Там же разборы остальных наших скиллов и систем автоматизации — от контент-конвейера до ночного агента, который сам закрывает задачи из бэклога. Забирайте файл, кладите в свой проект и дописывайте антипаттерны из собственных провалов: именно они делают протокол живым.

Частые вопросы

Работает ли протокол с GPT и другими моделями, кроме Claude?
Да. Протокол — обычный текст без привязки к вендору. Для Claude Code он оформляется скиллом, для GPT-инструментов и Codex кладётся в AGENTS.md или в системный промпт. У нас один и тот же файл читают оба инструмента — через символическую ссылку.
Почему слабая модель начинает ошибаться реже, если умнее она не стала?
Большинство ошибок LLM в реальной работе — процессные: одна гипотеза вместо двух, доверие устаревшей документации, «команда прошла без ошибок» вместо проверки результата, догадка, поданная как факт. Протокол закрывает эти дыры обязательными шагами, поэтому качество растёт без роста мощности модели.
Что такое различающий тест?
Проверка, результат которой разводит две гипотезы: при причине H1 она покажет одно, при H2 — другое. Вопрос-помощник: «какой результат заставит меня отбросить мою версию?» Тесты, которые лишь подтверждают любимую гипотезу, диагностику вперёд не двигают.
Не замедляет ли протокол работу и не жжёт ли лишние токены?
На простых задачах он не применяется — это прописано в самом скилле: справочный вопрос или тривиальная правка делаются сразу, без ритуала. На сложных задачах дополнительные проверки дешевле переделок: один непроверенный конфиг на боевом сервере стоит дороже десятка чтений журналов.
Сколько времени занимает внедрение протокола?
Каркас собирается за один вечер: час-полтора на разбор 10 последних фейлов агента, ещё полчаса — оформить правила скилл-файлом и вписать выжимку в постоянные инструкции. Дальше 2-3 недели обкатки: смотрите, какие правила модель проскакивает, и переформулируете их через проверяемые действия. Готовый SKILL.md сокращает старт до пяти минут: файл кладётся в проект сразу, а свои антипаттерны дописываются по ходу обкатки.
Чем протокол отличается от chain-of-thought?
Chain-of-thought просит модель рассуждать развёрнуто, но не задаёт, что именно проверять. Протокол требует действий с внешним миром: прочитать журнал, сделать резервную копию, перечитать состояние системы после правки, назвать вторую гипотезу. Рассуждающие модели строят цепочки мыслей сами — и совершают те же процессные ошибки, потому что цепочка рассуждений не заменяет чтение реального состояния системы.

Читайте также

Подписаться на блог в Telegram

Читайте свежие кейсы об AI-автоматизации, системной архитектуре и масштабировании бизнеса.

Подписаться