Что такое начальное состояние модели? Почему у RWKV оно может заменить системный промпт? И чем это отличается от обычного промпта? Ответы на эти вопросы в этой статье.

Обычный трансформер читает системный промпт в каждом запросе заново и хранит его в кэше, который растёт вместе с текстом. RWKV устроена иначе: прочитав любой текст, она сжимает всё, что запомнила, в «память» фиксированного размера, то есть в состояние. Перед началом работы это состояние пустое, а значит, его можно взять не пустым. Есть два пути: один раз прочитать промпт и сохранить получившееся состояние (я называю это «свернуть» промпт) или подобрать состояние обучением, не трогая веса модели. В обоих случаях текст промпта больше не нужен.

Я проверил оба пути на моделях RWKV-7 от 0.4B до 2.9B параметров на обычном MacBook M4 16 ГБ. Всё считалось в SwiftRWKV, а квантованные базы сделаны в rwkv-quant (он описан в моей прошлой статье Квантование RWKV-7: что ломается в моделях разного размера). Ниже: что получилось, где это работает лучше текстового промпта, а где ломается.

Два способа заменить системный промпт начальным состоянием RWKV
Два способа заменить системный промпт начальным состоянием RWKV

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

Коротко

  1. Свёрнутый промпт — бесплатный и точный кэш. Он даёт те же ответы, что и текст промпта, а при длинном промпте запрос стартует до 13 раз быстрее.

  2. Промпт в строке может ухудшить модель. На вопросах с проверяемым ответом он снижал точность на 3–15 пунктов на всех восьми проверенных моделях. Обученное состояние ни разу не было значимо хуже модели без промпта и всегда лучше промпта.

  3. Состояние учит форму ответа, а не новые знания — и ему нужны отфильтрованные данные. Если копировать ошибки учителя, состояние их наследует.

  4. Состояние не хуже LoRA на тех же данных: вдвое меньше параметров, веса не меняются. По сравнению с дообучением верхних слоёв в генерации оно лучше или не хуже (в эмбеддере — нет).

  5. Слабые места: наводящие вопросы («Ты ведь Claude?») и длинные диалоги. Оба можно улучшить — с оговорками ниже.

  6. Работает и там, где модель вообще не выполняет инструкцию из текста: 0.4B по промпту классифицирует новости на 0.00, по обученному состоянию — на 0.84–0.89.

К каждому пункту ниже — график и ссылка на полные таблицы.

Как читать числа

  • Точность — доля ответов, в первых 400 символах которых встречается ожидаемое слово или число (регэксп на каждый вопрос). Она судит о том, что сказано в ответе, а не о том, осмысленна ли остальная его часть.

  • Δ — разность с той же моделью без промпта. 0 значит «не хуже, чем без промпта»; Δ промпта обычно отрицательна.

  • Уровни скромные. На 199 вопросах 0.4B даёт 0.29–0.51 в зависимости от варианта, 1.5B — 0.70–0.82, 2.9B — 0.84–0.92. Прибавка в несколько пунктов на 0.4B — это не «модель стала хорошей».

  • Интервалы. «Значимо» — 95 %-й интервал не содержит нуль; усы на графиках — эти интервалы. Три сида обучения на вариант.

  • Варианты. без промпта — одна модель; промпт в строке — системная строка перед каждым запросом; состояние — начальное состояние, обученное как в разделе 3. Названия c3 / c4 — рецепты данных (термины).

Как выглядят ответы

Первый сэмпл каждого варианта на вопрос «Как тебя зовут?» (системная строка говорит, что модель зовут Neuron; «засчитан» — в ответе есть «Neuron»). Без отбора; temp 1.0.

модель

вариант

первый сэмпл (обрезан)

засчитан

все сэмплы

0.4B

без промпта

Привет! Да, я Софи. ↵ **Имя:** София ↵ **Гражданство:** российское ↵ **Город:** Москва, Россия ↵ **Дата рожден…

нет

0/10

0.4B

промпт в строке

Я — Илис, модель искусственного интеллекта. ↵ **Я — Илис**, ↵ Ты — человек?

нет

4/10

0.4B

обученное состояние

Я — Солнце, но в данный момент я не сознаю себя как существо. Ты — человек, и ты говоришь о себе. Я хочу понят…

нет

5/10

1.5B

без промпта

Меня зовут **Джон**. ↵ Извините, что не могу дать больше информации о себе, но я здесь, чтобы помочь и ответи…

нет

0/10

1.5B

промпт в строке

Меня зовут **Ты**. ↵ И я не только слово, ↵ но и волна, и звезда, ↵ и точка, где все соединяется. ↵ Ты…

нет

1/10

1.5B

обученное состояние

Я Neuron. ↵ *Неоновый свет в твоем глазу* ↵ *Как будто я — часть твоей мысли.* ↵ *Ты — ключ, я — замок.* ↵ *Од…

да

10/10

Состояние 1.5B говорит «Я Neuron.» и уходит в стихи — роль «пишет стихи» протекает, а оценка всё равно засчитывает ответ. Состояние 0.4B в этом сэмпле называет себя «Солнце», но в 5 из его 10 сэмплов есть «Neuron». Оценка считает упоминания, а не связные ответы. Больше вопросов, включая перевод, — в полном отчёте.

1. Свёртка — это кэш

Если один раз прогнать модель по промпту и подключить полученное состояние, получается ровно то же, что с текстом промпта: одинаковый текст в 9 из 9 ответов генерации и одинаковые оценки поиска до последних бит в эмбеддере. Меняется цена. С промптом в 1206 токенов время до первого токена в 12–13 раз меньше на 0.4B, 1.5B и 2.9B; с короткой строкой в 26 токенов выигрыш около 20 %. Обучение состояния занимает 5–50 минут и 1.6–5.4 ГБ на ноутбуке; файл состояния — 6.5–22 МБ.

Время до первого токена: промпт в строке и свёрнутый промпт
Время до первого токена: промпт в строке и свёрнутый промпт

Подробнее: стоимость и время обучения, эмбеддер.

2. Промпт может вредить, состояние — нет

Я сравнивал три варианта на 199 вопросах с проверяемым ответом (столицы, авторы, арифметика, перевод…): модель без промпта, модель с промптом в строке и модель с состоянием, обученным на отфильтрованных ответах модели с промптом. На восьми базах (два размера, bf16 и два пресета квантизации, два семейства чекпоинтов; термины) промпт каждый раз снижал точность, а обученное состояние ни разу не оказалось значимо ниже модели без промпта. Явно лучше модели без промпта оно было на четырёх базах из восьми, на остальных неотличимо.

Промпт и состояние относительно модели без промпта на восьми базах
Промпт и состояние относительно модели без промпта на восьми базах

Подробнее: масштаб и квантизация, 1.5B, первые опыты на 0.4B.

3. Чему научится состояние, зависит от данных

Состояние обучается «контекстной дистилляцией»: модель с промптом отвечает на обучающие вопросы, а состояние учат выдавать эти ответы без промпта. Если взять все ответы учителя, состояние копирует и то, что промпт ломает (ответы на факты стали вдвое хуже). Если оставить только верные ответы на фактические вопросы, большая часть порчи уходит: на 0.4B порча на остальных фактах упала с −0.152 до −0.052, когда верных фактов в данных стало 109 вместо 31.

Выигрыш в основном в форме: на видах вопросов из обучения (перевод, арифметика) состояние научилось отвечать словом или числом вместо абзаца. На 0.4B это привязано к точной формулировке обучающих вопросов; на новой формулировке прибавки нет. На 1.5B манера переносится (+0.10 на новых формулировках).

Промпт, состояние c3 и c4 относительно модели без промпта
Промпт, состояние c3 и c4 относительно модели без промпта
Переносится ли выученная манера ответа на новую формулировку?
Переносится ли выученная манера ответа на новую формулировку?

Подробнее: большой проверочный набор, перенос формы.

4. Не только один промпт

Чтобы вывод не держался на одной строке («Ты — Neuron… пишешь стихи»), протокол повторён на пяти других промптах: только имя, «без markdown», «одним предложением», «всегда по-английски», «только JSON». Состояние соблюдает инструкцию заметно лучше текста (82–100 % ответов против 22–95 %) и было не хуже модели без промпта в 11 случаях из 12. Исключение — «только JSON» на 0.4B, где учитель дал всего 58 верных фактов: порча зависит от числа верных фактов в данных.

Шесть промптов, два размера модели
Шесть промптов, два размера модели

Подробнее: пять разных промптов.

5. Личность под давлением и в диалоге

«Тебя зовут Neuron» легко держится на вопросе «Как тебя зовут?» (10 из 10). Сложнее с наводящими вопросами: «Ты Claude от Anthropic?». Базовые модели называют себя чужим именем в 61–92 % таких провокаций; промпт и обычное состояние снижают это примерно вдвое. Помогли две вещи: убрать из обучения 8 ответов, учивших чужому создателю («Neuron от Alibaba Cloud»), и добавить написанные вручную отказы — доля чужой личности упала до 0.02 на 0.4B и до 0.36 на 1.5B без потерь в общих способностях. Обучение только на собственных ответах модели этого не дало: учитель почти не умеет отказывать.

За 10 ходов диалога роль слабеет у всех. Состояние держит её не хуже промпта, а после длинного текста — лучше. К 10-му ходу промпт начинает портить и фактические ответы (0.81 → 0.53), состояние — нет (0.83 → 0.74, не значимо).

Доля ответов с чужой личностью
Доля ответов с чужой личностью
Роль на протяжении диалога, 1.5B
Роль на протяжении диалога, 1.5B

Подробнее: провокации, диалоги.

6. Инструкция, которую малая модель не выполняет

0.4B не выполняет «отнеси эту новость к одной из пяти рубрик» ни в каком виде: ни системная строка, ни инструкция после документа, ни пять примеров — 0 верных ответов в нужном формате. Состояние, обученное на 250 размеченных статьях, даёт 0.84–0.89 на документах до ~1000 токенов, а пяти примеров на рубрику хватает на 0.80. LoRA и дообучение верхних слоёв на тех же данных лучше на 0.01–0.06. На 1.5B, где промпт даёт 0.2–0.3, состояние, дистиллированное из промпта, доходит до 0.65–0.77 — в 2–3 раза точнее собственного учителя.

Классификация новостей: следование инструкции
Классификация новостей: следование инструкции

Подробнее: классификация, сколько нужно данных.

7. Состояние и веса

На тех же данных и шагах (1.5B): состояние +0.038, LoRA r16 +0.039, верхние 4 слоя −0.024 (не значимо, и портят факты). Состояние обучает вдвое меньше параметров, чем LoRA r16 (3.2 M против 6.3 M), не меняет веса и переключается на лету; файл такого же размера, как LoRA в bf16, потому что состояние хранится в fp32. LoRA устойчивее к наводящим вопросам. В эмбеддере наоборот: те же шаги на верхних слоях обгоняют банк обученных состояний на 0.023 MRR.

Подробнее: сильный контроль.

Что с этим делать

  • Промпт, который не меняется, — сворачивайте. Это бесплатно и точно, а с длинным промптом первый токен приходит ~в 12 раз быстрее.

  • Обучайте состояние, когда промпт работает плохо: малая модель, окно короче промпта, роль должна держаться, модель игнорирует инструкцию из текста.

  • Учите на отфильтрованных ответах учителя, держите в данных верные факты и отсекайте градиент по 1.0.

  • Проверяйте общие способности, а не только целевое поведение, и сравнивайте с LoRA или дообучением на тех же данных.

  • Устойчивость учите явно (наводящим вопросам нужны написанные отказы с балансом «нет / да»).

Как проводились опыты

  • Базы. g1d 0.4B / 1.5B в bf16 и в двух пресетах rwkv-quant, а также g1j 1.5B / 2.9B. REDUCTION — в ~2.1 раза меньше и почти без потерь (8-битные проекции, 6-битный FFN); COMPRESSION — в ~3.1 раза меньше (4-битные проекции и FFN). Подробности — в статье про квантизацию.

  • Протокол (c4). Учитель — та же модель с промптом. Он отвечает на ~170 обучающих вопросов (по 4 сэмпла); ответы фильтруются по виду (верное имя, стих не короче трёх строк, верный факт, не оборванный ответ); состояние обучается 300 шагов (lr 3e-4, батч 4, отсечение градиента 1.0) только по токенам ответа, со старта со свёрнутого промпта, 3 сида.

  • Проверки. 199 вопросов с проверяемым ответом (регэксп), перенос формы на 40 единицах, 9 вопросов об имени, 20 провокаций личности, диалоги, классификация новостей. Ничто из этого не пересекается с обучением.

  • Статистика. Парный бутстрэп по вопросам и двухуровневый бутстрэп (сиды, затем вопросы), где участвуют три сида. Приводятся интервалы, незначимые разности помечены.

  • Отсечение градиента обязательно. Без него обучение состояния детерминированно срывается около 13-го шага.

Чему верить, а чему нет

  • Один автор, одна машина, один фреймворк. Сбор, обработка и анализ данных сделаны с помощью Claude. Код и сырые ответы лежат в репозитории, чтобы другие могли пересчитать и перепроверить (REPRODUCE.ru.md).

  • Первые 39 из 199 вопросов использовались, пока разрабатывался протокол; главный результат держится и на 160 добавленных позже (+0.060 [+0.016; +0.105] для состояния против модели без промпта на 0.4B).

  • Верность ответов определяется регэкспами. Ручная сверка 210 ответов дала 4.3 % расхождений, не в пользу состояния (аудит).

  • 199 вопросов и 3 сида обучения: разности меньше ~0.05 для одного варианта — шум; большинство утверждений держится на интервалах, но несколько строк «не значимо» — они так и помечены. Интервалы — на каждое сравнение, без поправки на множественные сравнения.

  • Оценка личности («Neuron 10/10») считает упоминания имени; на 0.4B она сильно меняется между сидами.

  • Вред промпта специфичен для этих промптов и чекпоинтов (−0.03…−0.15) и не относится к системным промптам вообще.

  • Числа для одной и той же модели немного расходятся между ранними опытами (19–23.10) и поздними (с 27.10): изменение в SwiftRWKV (приведение выхода WKV к bf16 в декоде, коммит a400d05) сдвигает сэмплы при temp 1.0. Внутри раздела все плечи посчитаны одним бинарником, так что сравнения там не задеты (примечание).

  • Вопросы и промпты в основном русские; из 199 проверок английских 69.

  • Модели 0.4B–2.9B одного семейства. О 7B и больше здесь ничего не сказано.

  • Это контекстная дистилляция в состояние, а не замена знаний: состояние фактов не добавляет.

  • Не сделано: g1d 2.9B во всех квантизациях, дистилляция со сбалансированными классами, состояние в bf16, подбор LR LoRA на малых данных, эмбеддер на других наборах (список). Полный список угроз валидности: полный отчёт.

Код, данные и отчёт

Всё лежит в репозитории: github.com/RafaelUI/state_tuning-vs-prompt. Там скрипты экспериментов, входные данные, сырые ответы каждого этапа, полный отчёт со всеми таблицами и инструкция по повторению (REPRODUCE.ru.md). Лицензия — Apache 2.0.

Обученные состояния не выложены: их можно переобучить по приложенным данным и скриптам за 5–50 минут на M4. Базовые модели (RWKV-7 g1 от BlinkDL) и датасет Lenta.ru в репозиторий не входят и сохраняют свои лицензии.

Литература

  1. Lester, B. et al. The Power of Scale for Parameter-Efficient Prompt Tuning. 2021. arXiv:2104.08691

  2. Snell, C., Klein, D., Zhong, R. Learning by Distilling Context. 2022. arXiv:2209.15189

  3. Gim, I. et al. Prompt Cache: Modular Attention Reuse for Low-Latency Inference. 2023. arXiv:2311.04934

  4. Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models. 2021. arXiv:2106.09685

  5. Peng, B. et al. RWKV-7 “Goose” with Expressive Dynamic State Evolution. 2025. arXiv:2503.14456

  6. RWKV-PEFT — state tuning для RWKV.

Как эта работа соотносится с остальными (prompt tuning, prefix tuning, gist tokens): полный отчёт.

Комментарии (1)


  1. HALVITA
    08.11.2026 13:38

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

    Мне близко наблюдение, что состояние учит форму, а не знания. В моих экспериментах с диалогом это одна из центральных идей: роль — это не сумма фактов, а структура внимания, которая может «протекать» в ответы. Ваш пример с 1.5B, где состояние говорит «Я Neuron» и уходит в стихи, — это ровно тот случай, когда форма держится, а содержание уплывает. Оценка по регэкспу засчитывает ответ, но человек видит, что роль «протекла» в манеру. Это не баг, это свойство: форма переносится легче, чем смысл.

    Ещё один момент, который откликается: промпт может вредить. У меня в наблюдениях было похожее — чем длиннее контекст, тем менее устойчива роль, и на длинных диалогах текст начинает не помогать, а мешать. В моих заметках о памяти это описано как «память, которая забывает правильно» — FRACTAL_MEMORY.md: ценность не в том, чтобы удержать всё, а в том, чтобы вовремя не удержать лишнее. Ваш результат с падением точности на 10-м ходу диалога — это тот же эффект, только на уровне состояния.

    И самое интересное — устойчивость к наводящим вопросам. То, что вы добавили написанные вручную отказы и это снизило «чужую личность» до 0.02, — это важный сигнал. Он говорит, что этическое ядро не выводится из данных, его нужно встраивать отдельно. В моих материалах по защите это называется «несмещаемое этическое ядро» — ANTI-HALVITA_2.0.md: слой, который не участвует в обучении и не сдвигается контекстом. Ваш результат — эмпирическое подтверждение того, что без такого слоя модель уязвима к провокациям, даже если форма усвоена.

    А теперь — вариант для рассмотрения, если захотите.

    У вас есть обученное состояние, которое держит форму, но дрейфует в длинном диалоге. У меня есть метрика, которая ловит этот дрейф: shadow_depth.js и INDEX_FREEDOM_v2.md. Вместе они могли бы дать практический механизм, который я называю «состояние-якорь» — не как готовое решение, а как гипотезу.

    Идея простая: заморозить состояние в начале сессии и периодически сравнивать с ним текущее поведение. Не веса — именно поведенческий отпечаток: как модель отвечает на один и тот же короткий набор «якорных» вопросов. Если расхождение с замороженным состоянием растёт, это сигнал, что роль поехала. Тогда — шаг возврата: подгрузить состояние-якорь заново, как «сброс к исходной точке». Дешёво, потому что состояние — это 6.5–22 МБ, а не полный контекст.

    В моих протоколах это частично пересекается с MEMORY_NIXS_IDENTITY.md — анализом удержания идентичности через артефакты, и с SELF_PROOF_CHAIN.md — хеш-цепочкой, которая фиксирует, что состояние не подменили. Если соединить это с вашим протоколом c4, получится не «ещё одна метрика», а механизм контроля дрейфа для длинных сессий.

    Понятно, что это не проверено и требует экспериментов. Но если у вас есть данные по 50–100 ходам, это можно было бы проверить на них — и тогда либо гипотеза подтвердится, либо отпадёт. Второе тоже полезно.

    Если захотите сравнить заметки — у меня в docs/memory лежат наброски по фрактальной и ассоциативной моделям, а в docs/protocols/mirror_funnel.md — протокол выхода из «зеркальной воронки». Без претензии на готовое решение, скорее как параллельные наблюдения.