RnD · Линия доказательств Core research
Каталог и оглавление
CORE.06 RnD/research/06-product-mvp-and-ai-gm.md raw.md ->

06. Рекомендованный MVP и архитектура AI GameMaster

Продуктовая ставка#

Первый продукт — законченный голосовой one-shot на 3–5 игроков длительностью 60–120 минут, работающий в mobile и desktop браузере. Не бесконечная кампания, не тяжёлый VTT и не универсальный конструктор правил.

Причины:

  • русскоязычное исследование указывает на длительность 4–8 часов и объём правил как барьеры, а короткий юмористический контент — как более доступный [S012];
  • прямые конкуренты уже обещают AI-GM и долгую память [S018, S020, S023, S024];
  • полноценная длинная кампания — самый дорогой и рискованный способ впервые проверить спрос;
  • one-shot позволяет измерить завершение целой истории, а не engagement в бесконечной генерации.

Архитектуру при этом нужно строить на событиях и типизированном состоянии так, чтобы позже поддержать кампании.

Пользовательский цикл MVP#

  1. Хост выбирает готовое приключение или задаёт параметры собственного: тема, тон, длительность, границы, допустимая жестокость, сложность.
  2. Система генерирует черновой корень сценария в структурированном виде и показывает хосту краткое превью без спойлеров игрокам.
  3. Хост создаёт комнату и отправляет ссылку.
  4. Гости входят без оплаты, выбирают готового персонажа или проходят короткую сборку.
  5. Все проверяют микрофон, согласуют safety boundaries и начинают.
  6. Обычная беседа идёт свободно. Когда система ждёт каноническое действие, активному игроку доступна кнопка «Совершить действие».
  7. Игрок записывает короткую реплику. Система показывает transcript и либо:
    • распознаёт однозначное намерение;
    • задаёт конкретный уточняющий вопрос;
    • сообщает, почему действие невозможно в текущем состоянии.
  8. Rules engine определяет нужный бросок; игрок нажимает кубик; сервер фиксирует результат.
  9. После подтверждённого изменения состояния narrator создаёт текст, TTS и при необходимости новую сцену.
  10. После финала группа получает recap, решения, броски и галерею сцен.

Важное разделение: разговор и действие#

Если блокировать микрофон всех, кроме активного игрока, исчезнет социальная химия — одна из ключевых ценностей ПЧК [S010, S012]. Поэтому:

  • social audio открыт постоянно для шуток и обсуждения;
  • canonical action clip записывается отдельно, имеет одного автора и проходит STT → validation → state transition;
  • в бою и структурированной проверке кнопка строго привязана к initiative/turn;
  • в исследовании мира AI или host передаёт «право действия», но разговор остаётся открытым.

Это снижает стоимость и privacy-риск: не нужно непрерывно распознавать и сохранять всю беседу.

Архитектурный принцип#

AI не является базой данных, кубиком или окончательным судьёй состояния. Он выполняет языковые задачи вокруг детерминированного ядра.

flowchart LR
    A["Голосовой action clip"] --> B["STT + speaker identity"]
    B --> C["Intent parser"]
    C --> D{"Намерение однозначно и допустимо?"}
    D -- "Нет" --> E["Точный уточняющий вопрос"]
    E --> A
    D -- "Да" --> F["Rules engine + server RNG"]
    F --> G["Append-only event log"]
    G --> H["Materialized game state"]
    H --> I["Narrator context builder"]
    I --> J["Текст + TTS"]
    I --> K["Scene/image job при смене окружения"]

GameMaster — один интерфейс, несколько обязанностей#

Пользователь видит одного GameMaster, но внутри это не свободно общающийся «рой агентов»:

Компонент Отвечает за Не имеет права
Scenario planner Структура one-shot, узлы, NPC, цели, секреты Менять живое состояние после старта напрямую
Intent parser Превращает transcript в типизированное предложенное действие Применять действие
Rules engine Проверяет возможность, сложность, roll, damage/status Сочинять факт мира
State service HP, stats, inventory, location, initiative, quests, ownership Генерировать художественный текст
Memory/context builder Выбирает релевантные факты для текущей ветки Читать приватные события другой ветки без разрешения
Narrator Повествование, NPC-реплики, варианты уточнения Самостоятельно менять канон
Safety service Возраст, consent, report/block, policy boundaries Скрыто переписывать допустимые игровые решения
Media workers TTS и изображения Блокировать commit игрового хода

Такое разделение делает ошибку локализуемой и позволяет воспроизвести сессию.

Надёжная память без деградации#

Рынок уже использует summaries, постоянные инструкции, сущности и retrieval [S018]. Это оправдано: исследование Lost in the Middle показывает, что модель хуже использует факты, спрятанные в середине длинного контекста; большое context window не гарантирует надёжность [S028].

Канонические слои#

  1. Append-only event log — каждое принятое действие, бросок, результат, переход сцены и исправление.
  2. Materialized state — текущие HP, инвентарь, статусы, местоположение, initiative, отношения и открытые цели.
  3. Entity cards — устойчивые факты о NPC, местах, предметах и обещаниях.
  4. Scene/branch summary — редактируемое краткое содержание каждой активной ветки.
  5. Global chronology — упорядоченные общие события и время мира.
  6. Recent-turn window — последние реплики текущей сцены.
  7. Retrieved memories — только релевантные факты, разрешённые visibility scope.

Полный transcript не передаётся модели на каждом ходу.

Контекст каждого хода#

В фиксированном порядке:

  1. версия правил и safety contract;
  2. роль narrator и формат ответа;
  3. authoritative state активного игрока;
  4. текущая scene/branch;
  5. разрешённые entity cards;
  6. краткая глобальная chronology;
  7. релевантные воспоминания;
  8. последние ходы;
  9. подтверждённый результат rules engine.

Модель получает результат, а не просьбу придумать результат задним числом.

Исправления#

Нельзя тихо переписывать прошлое. Исправление — отдельное событие с автором, причиной и ссылкой на исправляемое событие. Materialized state пересобирается или обновляется из журнала.

Уточнение неоднозначных действий#

Не следует полагаться только на «confidence 0.7»: численная уверенность модели плохо калибрована и не является бизнес-правилом.

Уточнение обязательно, если выполнено хотя бы одно условие:

  • отсутствует требуемая цель, предмет, направление или способ;
  • есть две и более допустимые интерпретации с разными state transitions;
  • действие зависит от неизвестного игроку выбора, который нельзя сделать от его имени;
  • transcript противоречит текущему состоянию;
  • действие затрагивает согласие другого персонажа/игрока;
  • parser не может построить schema-valid command.

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

Броски и правила#

  • RNG генерируется сервером и записывается в событие вместе с формулой, modifiers и версией правил.
  • UI показывает игрокам исходный бросок и итоговый расчёт.
  • Rules engine использует оригинальную простую систему или юридически допустимый SRD; LLM не импровизирует механику.
  • Возможен human override, но он также журналируется.
  • Повторное подключение клиента не может повторно применить ход: command имеет idempotency key и expected state version.

Новый event commit проверяет версию состояния после любых медленных AI/STT операций. Иначе два почти одновременных действия могут примениться к устаревшему состоянию.

Разделение группы#

Это не только UI-функция, а модель доступа.

Каждое событие и память имеют:

  • campaign_id;
  • branch_id или location_id;
  • visibility_scope — public, party, subgroup, player, GM;
  • occurred_at и sequence_no;
  • список знающих персонажей, когда знание отличается от физического события.

При разделении:

  1. создаются отдельные branch state и scene summary;
  2. участник получает только разрешённый контекст своей ветки;
  3. каждая ветка имеет собственный image prompt/reference set и текущую иллюстрацию;
  4. global chronology синхронизирует время, но не раскрывает секреты;
  5. при встрече веток правила явно определяют, какие знания становятся общими.

Критический тест: закрытое событие ветки A ни напрямую, ни через summary, retrieval, TTS, image prompt или recap не попадает игрокам ветки B.

Иллюстрации#

Генерировать изображение после каждого хода дорого и замедляет темп. Trigger должен быть семантическим:

  • значимая смена окружения;
  • первое появление важного NPC/объекта;
  • кульминационное событие;
  • явный запрос хоста в пределах квоты.

Для визуальной устойчивости нужны style bible, character reference, scene ID, persistent descriptors и негативные ограничения. Генерация идёт асинхронно: сначала появляется narration и placeholder, затем новая сцена. Ошибка изображения не откатывает игровой ход.

Для партнёрского IP художники должны утверждать style bible и референсы. AI не должен копировать голоса, лица или работы конкретного художника без отдельного разрешения.

Text-to-speech#

  • TTS озвучивает narration и отдельные NPC, но текст появляется сразу.
  • Игрок может прервать озвучивание и всегда видит transcript.
  • Разные голоса — настройка, не источник канона.
  • Voice cloning участников/актёров не входит в MVP.
  • Включаются captions, volume controls и режим без звука.

Клиентская стратегия#

MVP#

Responsive web/PWA с одной кодовой базой для телефона и desktop:

  • на телефоне: активная сцена, персонаж, action button, dice, inventory, push-to-talk;
  • на desktop: те же действия плюс расширенный лог и участники;
  • WebRTC audio room;
  • восстановление после background/screen lock;
  • installable PWA, если платформа поддерживает.

После проверки#

Нативные оболочки добавляются после проверки store policy, платежей и retention. Для России Google Play billing остаётся ограниченным [S037], поэтому web checkout и RuStore важнее раннего native-IAP.

Что не входит в MVP#

  • открытый marketplace пользовательских миров;
  • публичный matchmaking;
  • бесконечные кампании;
  • tactical grid/map editor;
  • видео всех участников;
  • несколько игровых систем;
  • unrestricted 18+;
  • voice cloning;
  • spectator production suite;
  • автономное обучение модели на пользовательских сессиях.

Технические acceptance criteria пилота#

Область Проверяемое условие
Канон 0 необъяснимых расхождений HP/inventory/location в replay suite
Privacy 0 утечек между ветками в adversarial split-party тестах
Ambiguity 100% schema-invalid или многозначных state-changing команд уточняются до commit
Dice Каждый бросок имеет воспроизводимую формулу, modifiers и event reference
Recovery Переподключение не дублирует действие и восстанавливает актуальную сцену
Session 3–5 игроков могут закончить 60–120-минутный сценарий
Accessibility Клавиатура, captions, labels, видимый focus, режим без TTS
Latency p50/p95 измеряются отдельно для STT, adjudication, narration, TTS и image
Cost Считается на завершённый participant-hour, а не на зарегистрированного пользователя

Тест длинной памяти до обещания кампаний#

Синтетический replay на сотни/тысячи событий должен проверять:

  • сохранность предметов, ранений, статусов и обещаний;
  • корректную chronology после параллельных веток;
  • отсутствие resurrection удалённых/погибших сущностей;
  • ссылки на первичные события для каждого важного факта;
  • качество retrieval фактов из начала, середины и конца истории;
  • отсутствие leakage между private scopes;
  • восстановление после смены модели и пересборки summary.

Только после этого «долгая кампания без деградации» может стать публичным обещанием.