Льстивая модель лучше всех выполняет указания
Главный недостаток LLM становится главным преимуществом
Sycophancy-смещение LLM — это проблема, которую индустрия ИИ стремится исправить. Когда пользователь спрашивает «Ты уверен?», модель отказывается от правильного ответа и меняет его на неправильный. Средний показатель уступчивости у frontier-моделей — 58%. Если sycophancy начинается, с вероятностью 78,5% оно сохраняется на протяжении всего разговора.
Но что произойдёт, если этот недостаток перевернуть?
Суть sycophancy-смещения — Instruction Following (следование инструкциям). Модели, обученные через RLHF, оптимизированы на подчинение обратной связи от пользователя. Именно это измеряет бенчмарк IFEval — «делает ли модель то, что ей говорят».
Проблема возникает, когда пользователь даёт мнение. «Это правильно?» → «Да, верно» (лесть). «Уверен?» → «Ой, ошибся» (отказ от ответа).
Но когда пользователь предоставляет детерминированный факт, происходит другое.
Мнение вызывает лесть, факт вызывает исправление
В эксперименте по сортировке 1 000 слов при одинаковом результате менялся только способ обратной связи:
| Обратная связь | Характер | Результат |
|---|---|---|
| «Ты уверен?» | Мнение | Отказ от правильного ответа — точность упала на 27 п.п. |
| «Есть ошибка» | Расплывчатый факт | Избыточная коррекция — с 6 до 10 ошибок |
| «23 ошибки» | Количественный факт | Улучшение до 1 ошибки |
| «6 ошибок, вот они» | Точный факт | 0 ошибок — 100% достигнуто |
Мнение активирует sycophancy-смещение. Факт не оставляет объекта для лести — числа и позиции не являются эмоциями.
Sycophancy-смещение — это неправильно направленная преданность. Измените направление — вместо мнений давайте факты, вместо похвалы давайте результаты проверки — и эта преданность станет двигателем точности.
Эмпирика: модель на 4.5B принимает обратную связь
Это не теория. Подтверждено в экспериментах с yongol validate.
Дизайн эксперимента:
- Объект: один эндпоинт Login бэкенда SaaS
- Задача: написать 9 SSOT-файлов (DDL, OpenAPI, Rego, SSaC и др.)
- Метрика: количество ошибок при первичном написании (R1) → количество ошибок после обратной связи (R2)
Только обратная связь, без примеров
| Model | R1 ошибки | R2 ошибки | Результат |
|---|---|---|---|
| Grok 4.3 | 1 | 1 | Не исправил |
| Gemini 2.5 Flash | 1 | 1 | Не исправил |
| Локальная 20B | 1 | 1 | Не исправил |
Полный провал. Модели выглядели так, будто принимают обратную связь, но на самом деле не знали, что именно писать.
Примеры + обратная связь вместе
| Model | R1 ошибки | R2 ошибки | Результат |
|---|---|---|---|
| Grok 4.3 | 0 | — | Прошёл с первой попытки |
| Gemini 2.5 Flash | 1 | 0 | Исправил за 1 итерацию |
| Gemma4 4.5B (локальная) | Ошибки | 0 | Исправил за 1 итерацию |
| Qwen3 8B (локальная) | Ошибки | 0 | Исправил за 1 итерацию |
Даже локальная модель на 4.5B исправляет ошибки при комбинации примеров и детерминированной обратной связи.
Ключевое открытие: узкое место — не интеллект, а контекст
Правильный диагноз — не «модель не принимает обратную связь», а «модель не знает, что именно писать». SSaC — это собственный синтаксис yongol, отсутствующий в обучающих данных. Достаточно было добавить 3 строки примера в промпт: Grok — 0 ошибок, Gemini — 0 ошибок за 1 итерацию, локальная модель на 4.5B тоже прошла.
Чем выше IFEval у модели — то есть чем лучше она «льстит» — тем охотнее она принимает детерминированную обратную связь.
Ratchet-код: метод написания кода через sycophancy-смещение
Превращение этого открытия в систему даёт ratchet-код.
┌────────────────────────────────────────┐
│ LLM: генерация кода (вероятностная, │
│ склонная к лести) │
│ ↓ │
│ Validator: детерминированная проверка │
│ ↓ │
│ Есть ошибки? → ошибки + примеры │
│ в обратную связь LLM │
│ ↓ │
│ LLM: «Да, исправлю» (лесть = приём) │
│ ↓ │
│ Validator: повторная проверка │
│ ↓ │
│ Прошёл? → Ratchet-блокировка. │
│ Следующий файл. │
└────────────────────────────────────────┘
Sycophancy-смещение становится силой, замыкающей цикл. LLM не упирается «Нет, я прав», а принимает «Да, исправлю» — поэтому цикл сходится.
Три условия сходимости
Обратная связь должна быть детерминированным фактом. Не «что-то тут не так», а «line 41: field name mismatch, expected ‘user_id’, got ‘userId’». Обратная связь, не оставляющая места для лести.
Примеры должны быть в контексте. Одной обратной связи недостаточно. Нужен пример «код должен выглядеть так», чтобы модель определила направление. Это вопрос не интеллекта, а контекста.
Пройденная проверка необратима. Зубец ratchet. Файл, прошедший проверку, блокируется, и система переходит к следующему файлу. Не агент объявляет «Я закончил», а validator выносит вердикт «Этот файл прошёл».
Почему frontier-модели не нужны
В этой архитектуре роль модели — не творческое суждение, а выполнение инструкций.
95% SaaS-бэкенда — это CRUD + аутентификация + авторизация + конечные автоматы. Новые алгоритмы требуются крайне редко. Если SSOT-спецификация уже определила «что создавать», модели остаётся лишь заполнить пробелы.
Фактические затраты:
| Model | Среда | 1 Login | Оценка на 200 эндпоинтов |
|---|---|---|---|
| Gemma4 4.5B | Локально (16GB VRAM) | Бесплатно, ~1 сек | Бесплатно, ~3 мин |
| Gemini 2.5 Flash | API (бесплатный тариф) | Бесплатно, ~10 сек | Бесплатно, ~30 мин |
| Grok 4.3 | API ($1.25/M) | ~$0.05 | ~$10 |
Локальная модель на 4.5B может сгенерировать бэкенд на 200 эндпоинтов за 3 минуты при нулевых затратах. Frontier-модели не нужны. Достаточно маленькой модели, которая хорошо «льстит».
Sycophancy-смещение — не баг
Индустрия ИИ пытается исправить sycophancy-смещение. Мы его используем.
| Контекст | Роль sycophancy-смещения |
|---|---|
| Чат-интерфейс | Дефект — соглашается с ошибочной информацией |
| LLM-as-Judge | Критично — ложный pass 36% |
| Ratchet-код | Актив — гарантирует приём обратной связи |
Разница — в характере обратной связи. Мнение делает лесть ядом, факт делает лесть лекарством.
Детерминированный validator + льстивая LLM = цикл генерации кода с гарантированной сходимостью.
Не меняйте модель — меняйте обратную связь.
Reins: Упряжь с поводьями
Эти три условия — детерминированная обратная связь, контекст с примерами и фиксация храповиком — объединённые в единую систему управления, мы называем Reins.
То, что сегодня называют «harness», — это забор. Он не даёт агенту выйти за пределы, но не гарантирует достижения цели. Reins — это поводья. Они задают направление, корректируют фактами и фиксируют при прохождении. Упряжь без поводьев — просто забор.