Третья, финальная часть исследования MiroFish - открытого стека мультиагентной симуляции "загрузите документы → получите модель общества и прогноз реакции". Ранее в серии разбирались отказы, возникавшие на дефектном входе: сначала - Silent Failure, затем - "слепота отчёта", управляемая графом. Здесь входные документы корректны; проблема проявляется не в тексте сценария, а в том, как система переводит человеческую формулировку времени в параметры запуска и что это означает на длинной дистанции.
Как одна фраза превращается в конфигурацию запуска
Каждый прогон начинается с обычного запроса: описать ситуацию, которую "общество агентов" должно разыграть. В конце я добавлял простое уточнение горизонта: "over the next 7 days" (в ближайшие 7 дней). В других прогонах встречалось "over the next 14 days", а один раз - "over the next 90 days".
Ключевая деталь: система ни разу не уточнила длительность. В интерфейсе нет поля "число раундов", нет оценки времени/стоимости, нет окна подтверждения. Фраза про горизонт молча интерпретируется в вычислительные настройки, и симуляция стартует сразу. Что именно было решено "внутри", выясняется только постфактум - по логам, через подсчёт раундов.
Закон ×24: дни превращаются в часы
Во всех прогонах, где горизонт был явно задан словами, количество раундов оказалось строго равно "дни × 24". Совпадение стопроцентное и повторяемое:
- 7 дней → 168 раундов. Это значение получилось одинаково в четырёх независимых семействах моделей: DeepSeek V3 0324, Claude Sonnet 4, Gemini 2.5 Flash, GPT‑4.1 (era‑match, Q1-Q2 2025), то есть механизм не "гуляет" от модели к модели.
- 14 дней → 336 раундов (в одном из прогонов на DeepSeek).
- 90 дней → 2160 раундов.
Отдельно, уже после сбора основной матрицы, я перепроверил привязку именно к формулировке горизонта, а не к конкретному сюжету. 4 августа 2026 года та же фраза "over the next 90 days" была подана не на сценарии про Валдорию, а на контрольном сиде про Apple Vision Pro. Конфигурация совпала: 2160 hours, 60 minutes per round, total 2160 rounds. Это важная граница находки: коэффициент задаётся интерпретацией времени в запросе и стабилен при смене сценария.
Шесть из шести прогонов с явным горизонтом легли на одну линию без единого отклонения (включая репликацию, закрывшую пробел по GPT‑4.1). Если бы источник был в стохастике модели, распределение "дрожало" бы - но здесь виден детерминированный перевод языка в числа.
Даже без горизонта система всё равно живёт "сутками"
Когда в запросе время вообще не упоминалось, симуляции всё равно требовалась длительность. И по девяти таким прогонам наблюдаемые дефолтные значения снова легли на ту же сетку ×24. Чаще всего встречалось 96 раундов (шесть раз: DeepSeek - пять, GPT‑4.1 - один). Ещё по одному разу попадались 72, 120 и 144 раунда (то есть 3, 4, 5 и 6 суток, умноженные на 24). Значений "вне сетки" не было ни разу.
Две оговорки для точности:
1) Единственное значение 144 получено в инъекционном прогоне, где граф намеренно обогащался (это связано со второй частью серии). Я фиксирую сам факт, но не использую его как "норму".
2) Единственное 72 визуально неотличимо от резервного значения, зашитого в коде: нельзя строго доказать, было ли это "решением модели" или срабатыванием запасного дефолта.
Вывод остаётся прежним: даже молчание о времени интерпретируется как "несколько суток", нарезанных на 24 шага в день.
Механизм подтверждён исходниками: детерминированный перевод в часы
Пока наблюдение оставалось "чёрным ящиком", можно было спорить: вдруг это привычка конкретной модели или эффект промпта. Но статическая инспекция бэкенда (по репозиторию MiroFish‑Offline, снапшот 2026‑07) подтверждает: в пайплайне есть участок, который конвертирует длительность в "hours", задаёт "60 minutes per round" и тем самым фиксирует правило "один раунд = один час". Поэтому "7 days" почти неизбежно превращается в 168 раундов, а "90 days" - в 2160.
Это объясняет и отсутствие разброса между семействами моделей: модель может сгенерировать текстовое описание, но окончательное число раундов формируется детерминированным преобразованием на стороне системы.
Обязательство, которое система не может выполнить, и почему отсутствие кнопки "стоп" - риск
Фраза "в ближайшие 90 дней" выглядит безобидно для человека: это всего лишь горизонт прогноза. Но на языке движка это обязательство выполнить 2160 раундов последовательной симуляции. И если ресурсы не рассчитаны, это превращается в сценарий, где система берёт на себя слишком длинную дистанцию без возможности корректно остановиться: в интерфейсе нет явной кнопки "стоп", нет безопасного механизма досрочного завершения с частичным результатом "на текущем раунде", нет запроса подтверждения "вы уверены, что хотите 2160 шагов?".
На практике это даёт два класса проблем. Во‑первых, стоимость и время: пользователь узнаёт реальную "цену" запроса только после старта. Во‑вторых, качество: чем длиннее цепочка раундов, тем выше риск накопления дрейфа, деградации согласованности и "размазывания" причинно‑следственных связей - даже если вход изначально корректен.
Что стоит улучшить, чтобы находка не повторялась у других
1) Явно показывать число раундов до запуска. Преобразование "days → hours → rounds" не должно быть скрытым. Пользователь должен видеть: "90 days = 2160 rounds".
2) Добавить подтверждение на длинные горизонты. Например, предупреждение после порога (условно, 300-500 раундов): "Запуск будет долгим и дорогим".
3) Дать управление длительностью как параметр. Отдельное поле "число раундов" или "длительность шага" (например, 6 часов на раунд вместо 1 часа) решило бы половину проблемы.
4) Нормальный "stop / pause / resume". Остановка должна сохранять промежуточные артефакты: состояние общества, журнал решений, метрики, чтобы результат не превращался в "всё или ничего".
5) Разделить горизонт прогноза и частоту симуляции. "90 дней" не обязаны означать "90×24 шага". Можно симулировать 90 дней с дневным шагом (90 раундов) или недельным (13 раундов), если задача не требует почасовой детализации.
6) Лимиты по умолчанию. Дефолтное значение должно быть безопасным, а не "как получится". Если в коде есть резервный дефолт (что видно по поведению), он должен быть документирован и объяснён в UI.
Общая карта находок серии
Если собрать три части в одну линию, получается цельная картина отказов одного класса: система выглядит как "умный симулятор", но на практике у неё есть неочевидные режимы, где:
- ошибки входа могут не приводить к явному фейлу (Silent Failure),
- отчёт может "слепнуть" из‑за структуры графа и переставать отражать реальную динамику,
- а формулировка горизонта способна молча превращаться в тысячи раундов без управляемого торможения.
Именно поэтому "2160 раундов без кнопки "стоп"" - не про экзотический случай, а про системный интерфейсный и продуктовый долг: язык запроса слишком легко превращается в жёсткую, дорогую конфигурацию, а пользователь узнаёт об этом слишком поздно.

