Мы строили System-1 как модель для короткого шага политики: прочитать состояние агента и выбрать действие. Такой компонент должен был заменить ручной скоринг и обращение к внешней LLM там, где требуется решение, а генерация текста не нужна. Замер показал границу: модель быстро распознаёт собственный шаблон и хорошо калибрована на нём. Это ещё не означает, что она умеет решать по входящему сообщению.
В итоговом контексте ранний результат macro-F1 0.732 отозван: он был посчитан на случайном энкодере. На свободных формулировках рабочая модель получила macro-F1 0.180, хотя знакомая запись тех же состояний дала 0.995. Мы проверили, что действительно обучили и какие замеры сохранили силу. Для рабочего отбора задач данных пока не хватает. Источники: CONTEXT.md, FRONTIER_30_09.md.
Задача и почему не правила
В эксперименте агент защищает репутацию, распространяет позицию или сохраняет аудиторию. Он получает слух, угрозу, вопрос, сообщение об успехе; решение зависит также от источника, ресурсов и истории взаимодействий. Пока модель выбирает поведение из заданного словаря. Классификатор рабочих поручений из неё ещё не получился.
Семь действий зафиксированы в генераторе и спецификации правил. Их смысл раскрыт в листе слепого аудита:
| Действие | Что означает |
|---|---|
post |
Опубликовать собственное сообщение |
amplify |
Публично поддержать или повторить чужое |
reply |
Ответить напрямую |
ignore |
Промолчать, не предпринимать публичных шагов |
counter |
Публично возразить или оспорить |
escalate |
Передать ситуацию в формальный механизм |
exit |
Выйти из ситуации совсем |
Источник словаря и количества действий: build_states.py, RULES_R1_R11.md; определения: blind_audit_200.md. Более ранняя история выбора именно этого словаря в артефактах не зафиксирована.
Ручной скоринг осложняют приоритеты правил. Спецификация требует проверять условия сверху вниз и брать первое сработавшее. Нехватка ресурсов может отменить публичное действие даже при угрозе; повторный конфликт меняет ответ с учётом отношения источника и доверия аудитории. Если заменить этот порядок суммой «важность плюс доверие минус усталость», придётся заново определять компромиссы между условиями. Это инженерный вывод из структуры правил, а не измеренный провал конкретного скоринга.
Правила сами служат учителем. Источники не доказывают, что они плохи. В правилах amplify относится к призыву от достаточно доверенного источника, а подтверждённый успех ведёт к post: подмена этого различия уже испортила ручную проверку, описанную в контексте. Источник: CONTEXT.md, RULES_R1_R11.md.
Мы хотели принимать решение по тексту без ручного разбора каждой формулировки. Модель должна была возвращать уверенность и работать локально. Преимущество над точным исполнением правил на готовых полях ещё нужно доказать. В гипотезах проекта отдельно поставлено сравнение содержательных решений с простыми правилами и шумом; замеры стоимости этот вопрос не закрывают. Источник: HYPOTHESES.md, RESULTS_29_09.md.
Данные: состояния, тексты и перефразы
Начальный генератор создаёт 200 состояний с сидом 1978. Он выбирает событие и серьёзность, роль источника, доверие и отношение, внимание и энергию, доверие аудитории, сетевые признаки, историю, счётчики, персону и цель. Для 60 состояний добавлены по две альтернативные записи: вместе получается 320 текстов, что можно пересчитать непосредственно по states и variants. Источники: build_states.py, states.json.
Перефраз здесь — другой способ сериализовать те же поля: обычное описание, обращение к агенту или блоки с обозначениями источника, сети и ресурсов. Это не новое состояние и не независимая разметка. Английский генератор сохраняет парность с русским набором, но шаблоны написаны отдельно. Источник: build_states_en.py.
Расширенная сборка содержит 4000 состояний, полученных на 20 сидах, по 200 на сид. Условие (nid % per_seed) < 10 оставляло перефразы только у 200 состояний, то есть 5% набора. Остальные 3800 имели единственный текст; всего было 4400 текстов. Это подтверждают генератор, JSON и итоговый разбор. Источники: build_states_en.py, states_en_4000.json, CONTEXT.md.
После исправления варианты есть у всех состояний. Текущий states_all3.json содержит те же 4000 состояний, каждое с основной записью и двумя вариантами. В разметке 12 000 уникальных текстов. Мы пересчитали их: пропущенных меток нет, действие внутри одного состояния не меняется. Источники: build_variants_all.py, states_all3.json, labels_all3.json.
Поэтому разделять обучение и проверку нужно по состояниям. Если основной текст попадёт в обучение, а его перефраз — в тест, модель уже видела ту же комбинацию признаков и её ответ. Такой тест измеряет устойчивость записи знакомого случая. Для проверки обобщения все формулировки состояния должны оставаться в одном разбиении; проверка незнакомого стиля добавляется отдельно. Число фолдов кросс-валидации и полный протокол раннего малого эксперимента в предоставленных артефактах не зафиксированы.
Шкалы ресурсов тоже расходятся. Спецификация описывает энергию на шкале 1–3, а генератор выбирает её от 0 до 10 и печатает соответствующий знаменатель. Перед применением к реальным сообщениям эту семантику нужно согласовать: модель может усвоить числовую форму, не соответствующую описанию задачи. Источники: RULES_R1_R11.md, build_states.py, states_all3.json.
Модель и дообучение: какие результаты сохранились
В контексте модель называется System-1/Laya. Таблица ёмкости перечисляет Laya multilingual на mmBERT-base и Laya english на ModernBERT-large. Точное имя исходного чекпоинта рабочего head_ft.pt и способ выбора обучаемых слоёв в источниках не зафиксированы. По соседней таблице определить базу рабочего артефакта нельзя. Источники: CONTEXT.md, CAPACITY_AND_CI.md.
Проверенный срез обучения выглядит так:
| Режим | Macro-F1 | Ограничение интерпретации |
|---|---|---|
| Замороженная база и обучаемая голова | 0.28–0.47 | Диапазон результатов, не единый парный замер |
| Обучение шести слоёв, пять эпох | 0.847 | Проверка на собственном шаблоне |
| Обучение шести слоёв, десять эпох | 0.955 | Проверка на собственном шаблоне |
| Полная база, двадцать восемь слоёв, тот же learning rate | 0.339 | Редкие классы обнуляются; режим обучения не адаптирован |
Все числа и условия таблицы: CONTEXT.md. Значение learning rate, оптимизатор и размер обучающего батча в этих источниках не зафиксированы.
Частичное дообучение существенно лучше замороженной базы внутри знакомой формы. Но проигрыш полной базы нельзя объяснять одной глубиной: сравнение одновременно меняет число обучаемых параметров и пригодность шага обучения. Сам контекст требует отдельного режима для полной базы.
Ранний результат 0.732 пришлось исправить. Контекст признаёт 0.732 результатом случайного энкодера; связанное с ним проверенное значение ECE в артефактах не зафиксировано. Другой ранний результат, 0.848, тоже отозван: база фактически не разморозилась. Эти числа нельзя использовать как ступени улучшения. Источник: CONTEXT.md.
Подход проверили и на внешней задаче. На Banking77, с 77 классами, человеческими метками и официальным английским разбиением, замороженная база получила macro-F1 0.775, дообучение шести слоёв — 0.916, TF-IDF с логистической регрессией — 0.874. Это свидетельство работоспособности подхода на другой классификации, но не доказательство переноса обученной домашней политики на рабочие сообщения. Источник: CONTEXT.md.
Калибровка: уверенность после обучения
Качество выбора класса и качество уверенности — разные свойства. Macro-F1 учитывает распознавание классов без преимущества частого действия. ECE сопоставляет уверенность с долей правильных ответов в группах предсказаний. Хорошая классификация может сопровождаться чрезмерной уверенностью; низкая ECE сама по себе не гарантирует хорошей классификации.
В постановке разбора предполагалось, что дообучение без калибровки испортило ECE, а температура вернула её. Полной числовой пары «до калибровки — после» для этого эпизода в предоставленных источниках нет. Возможный механизм такой: обучение усиливает разделение классов, но масштаб выходных оценок не обязан соответствовать вероятности ошибки. Насколько это произошло здесь, мы не знаем.
Температура меняет масштаб оценок перед преобразованием в вероятности, сохраняя порядок действий. Поэтому она корректирует уверенность, но не исправляет неверно выбранное действие. В итоговом контексте у рабочего артефакта T = 1.49. Порог 0.62 выбран на валидации по калиброванным вероятностям: покрытие 95.8%, точность среди отвеченных 0.963; на следующий уровень передано 8 ошибок из 23, лишних отказов — 18. Источник: CONTEXT.md.
При недостаточной уверенности решение уходит дальше. Такая маршрутизация работает, пока сама уверенность переносится на новые входы. В кросс-формулировочном тесте ECE выросла с 0.025 на знакомой форме до 0.073 на незнакомой. На Banking77 зафиксированы ECE 0.1705 у замороженной базы и 0.0267 у дообученной модели; это сравнение режимов, а не опубликованная пара до и после температуры. Источник: CONTEXT.md.
Контекст отдельно предупреждает об уверенных ошибках, которые температура не ловит. Поэтому отказной порог нужно проверять на новых формах и считать ошибочные автоматические решения, а не ограничиваться средней ECE.
Чего не хватило: классы, объём и свободный текст
Начальный набор содержит 200 состояний. Достоверная итоговая пара macro-F1/ECE именно для него в источниках не зафиксирована. Расширение до 4000 улучшило основу обучения на шаблоне, но прежняя редкость перефразов оставляла почти весь набор в одной форме. Источники: build_states.py, CONTEXT.md.
Прямой подсчёт основных меток показывает дисбаланс: ignore — 1475, reply — 1014, counter — 654, post — 338, exit — 251, amplify — 177, escalate — 91. Это количество состояний, без повторного учёта перефразов. Источник и способ расчёта: записи kind == "base" в labels_all3.json.
Веса классов могли бы изменить вклад редких действий в обучение, но их конкретные значения и проверенный эффект в источниках не зафиксированы. В контексте есть ошибка реализации: веса и метрики общего модуля были зашиты под домашние семь действий и падали на 77 классах. Наличие механизма взвешивания не доказывает, что редкие ветви решены. Источник: CONTEXT.md.
Действия exit и ignore различаются. Уход определяется ресурсами либо сочетанием повторного конфликта, враждебности и низкого доверия аудитории; молчание оставляет агента внутри ситуации. Спецификация описывает эти условия отдельно. Источник: RULES_R1_R11.md.
После расширения форм сначала проверили знакомый и альтернативные шаблоны: macro-F1 0.943, 0.813 и 0.801. Ответ менялся от записи у 12.8% и 12.2% состояний. Источник: CONTEXT.md.
Затем 200 тестовых состояний переписала Mistral-Nemo-12B в четырёх манерах, без правил и действий в промпте. Рабочая модель на свободном тексте получила accuracy 0.345, macro-F1 0.180; знакомая запись тех же состояний — по 0.995 для обеих метрик. TF-IDF достиг macro-F1 0.297, Opus с правилами — 0.686, вслепую — 0.283. Источник: FRONTIER_30_09.md.
По отдельным действиям там указаны escalate 0.00 при 5 примерах, post 0.06 при 18, exit 0.08 при 13. Рядом с этими значениями не названа поклассовая метрика. Без дополнительного источника назвать их полнотой нельзя. Результат не позволяет объявить готовность редких ветвей. Источник: FRONTIER_30_09.md.
Контроль показывает сильную зависимость от представления. Но свободный пересказ требует отдельной проверки сохранения смысла: в строке 8 аудита ресурс записан как 7/3, в строке 26 положительная оценка отношения названа враждебностью. Многие сообщения от коллеги опускают ресурсы. Метки наследуются от исходных полей. Часть расхождения может быть связана с потерей информации. Её величина в артефактах не зафиксирована. Источник: blind_audit_200.md.
Ёмкость и доверие к числам
Исправленный итог содержит три независимых сида: macro-F1 0.922 ± 0.038, диапазон 0.871–0.959; accuracy 0.940 ± 0.021. Ранее заявленные 0.895 ± 0.079 отозваны, поскольку сиды продолжали одно обучение. В источниках не сказано, какая статистика стоит после знака ±. Называть её доверительным интервалом нельзя. Источник: CONTEXT.md.
Отдельный отчёт даёт 95%-ные интервалы Вильсона для accuracy других задач. Например, user2_5nn_loo на 28 примерах: 0.9286, интервал 0.774–0.980; route_ru на том же объёме: 0.6786, интервал 0.493–0.821. Эти интервалы показывают неопределённость оценки. К домашнему macro-F1 они не относятся. Источник: CAPACITY_AND_CI.md.
Пересечение интервалов само по себе не заменяет тест разницы на парных предсказаниях. Для следующего сравнения разумно пересчитывать разницу метрик по независимым состояниям и отдельно учитывать вариативность обучения. Число перевыборок для бутстрэпа в источниках не зафиксировано. Для статистического вывода нужно заранее выбрать метод и уровень доверия, затем проверить, исключает ли интервал разницы отсутствие изменения. Для практического применения результат должен быть устойчив между запусками и давать выигрыш по цене ошибок. Разница округлённых средних этого не доказывает.
Ёмкость ограничена и памятью. Для RTX 5060 Ti с 16 ГБ таблица оценивает веса Laya multilingual в 0.65 ГБ, Laya english — в 0.85 ГБ. Расчёт большого числа персон с LoRA — оценка размещения; измеренного одновременного обслуживания такого количества агентов нет. Источник: CAPACITY_AND_CI.md.
В ранней таблице энкодер при батче 32 даёт 4.40 мс на шаг, 227.3 шага/с и 1.22 GPU-часа на миллион шагов. Поздний замер рабочего артефакта: одиночная медиана 18.7 мс, p95 19.5 мс, батч 64 — 11.8 мс на текст, холодный старт 5.5 с. Это разные срезы; переносить лучшую раннюю пропускную способность на итоговый сервис нельзя. Источники: CAPACITY_AND_CI.md, CONTEXT.md.
В LM Studio решение без размышления у Qwen3-0.6B занимает 0.065 с, у Qwen3-1.7B — 0.063 с. Это сравнение задержек конкретных конфигураций, а не доказательство преимущества по качеству. Более ранний отчёт прямо признаёт сломанное извлечение батчевых ответов генеративных моделей. Источники: LMSTUDIO_BENCH_29_09.md, RESULTS_29_09.md.
Что дальше: данные для настоящего отбора задач
Следующий набор должен состоять из реальных входящих сообщений вместе с доступным на момент решения контекстом. Для перехода к отбору задач сначала нужен согласованный словарь рабочих действий и цена ошибок. Домашние репутационные действия автоматически таким словарём не становятся.
Нужны независимые человеческие метки, разбор неоднозначных случаев, примеры пропущенных полей и целевая выборка редких ветвей. Контекст предлагает аудит 150–200 реальных входов двумя разметчиками. Существующий лист свободных текстов содержит 200 строк, но колонка ответов пуста: завершённый человеческий аудит в нём не зафиксирован. Источники: CONTEXT.md, blind_audit_200.md.
При добавлении новых формулировок нужно проверять, сохранились ли существенные поля. Отложенная оценка должна включать новые состояния, незнакомые стили и сообщения с недостатком информации. Температуру и отказной порог нужно выбирать до финальной проверки и оценивать вместе с долей ошибочных автоматических решений.
Источники предлагают следующий вариант: извлекать поля отдельными головами, проверять полноту и исполнять правила кодом. Это позволяет различать ошибку чтения сообщения и ошибку политики. Пока сравнения на реальных входах нет. У нас есть быстрый классификатор заданной формы и протокол, который помогает находить его ограничения. Источник: FRONTIER_30_09.md.
Что проверить скептику
— Какие веса действительно оценивали. В CONTEXT.md отозваны результат случайного энкодера, неразмороженная база и зависимые сиды. Проверить соответствие заявленного режима рабочему артефакту; подробных логов обучения среди источников нет.
— Не посчитаны ли тексты независимыми наблюдениями. Сопоставить state_id и kind в labels_all3.json с протоколом разбиения. Перефразы не увеличивают число независимых состояний; сам JSON не доказывает отсутствия утечки между сплитами.
— Сохранился ли смысл при пересказе. Проверить ресурсы, знаки отношений и полноту полей в blind_audit_200.md против states_all3.json. Метка исходного состояния может стать недостижимой по сокращённому тексту.
— Что скрывает среднее качество. Проверить редкие действия и уверенные ошибки по FRONTIER_30_09.md и пороговый срез в CONTEXT.md. ECE и accuracy среди отвеченных не заменяют учёт пропущенных опасных решений.
— Совпадают ли режимы измерения скорости. Разделить ранний расчёт из CAPACITY_AND_CI.md, итоговую задержку из CONTEXT.md и серверные замеры LMSTUDIO_BENCH_29_09.md. Батчевая цена текста, одиночная задержка и холодный старт отвечают на разные вопросы.
Написано по артефактам студии; ссылки на файлы — имена наших исходников, они живут в репозитории, а не в вебе.