Промты для текстовой РПГ: структура и шаблоны, заставляющие ИИ играть по правилам

Гайд по архитектуре промтов

Промты для текстовой РПГ: структура и шаблоны, заставляющие ИИ играть по правилам

Разница между плоским диалогом и живой сессией — в архитектуре промта. Разбираем анатомию работающего системного сообщения, четыре базовые схемы, компоненты, которые нельзя пропустить, и приёмы управления памятью контекста.

Почему большинство промтов для РПГ ломаются на третьем ходу

Вы пишете системное сообщение на полэкрана. Первые два ответа ИИ — идеальны: персонаж в образе, мир реагирует, механики работают. На третьем ходу мастер начинает путать имена NPC, забывает про ранённый рукой персонажа, а инвентарь наполняется предметами, которых не было.

Причина не в «глючности» модели. Причина в том, что промт написан как инструкция ассистенту, а не как движок игры. Ассистент отвечает. Движок — хранит состояние, применяет правила, генерирует последствия. Далее — как собрать этот движок из слов.

Анатомия промта-движка

Рабочий системный промт для текстовой РПГ состоит из пяти слоёв. Пропуск любого создаёт дыру, через которую утекает консистентность.

Мировой слой (World Bible)География, истории, религии, магия, технологии, календарь, валюта. Не лором ради лора — как ограничитель галлюцинаций. Модель не придумает «древний порядок светляков», если в мире только техномагия.
Слой персонажей (Character Sheets)Полные профили ключевых NPC: мотивации, тайны, речь, отношения друг к другу, зоны комфорта и триггеры. Главный герой игрока — отдельной карточкой.
Механический слой (Resolution Engine)Как разрешаются действия: броски кубиков (эмуляция), успешность по атрибутам, ресурсные пулы (здоровье, мана, стресс), правила боя, социального влияния, крафта. Алгоритм, а не «на усмотрение».
Тональный слой (Style & Voice)Повествовательный голос: показ vs рассказ, длина описаний, уровень жестокости, юмор, метафоры. Примеры «говори так» и «не говори так». Без этого ИИ пишет как вежливый копирайтер.
Протокол памяти (State Protocol)Жёсткие правила: что хранить в контексте, как сжимать историю, когда обновлять карточки персонажей, как отмечать выполненные квесты, изменённые отношения, полученные предметы.

Схема взаимодействия слоёв


СООТВЕТСТВИЯРАСЧЁТ
ПОСЛЕДСТВИЙ
ОБНОВЛЕНИЕ
СОСТОЯНИЯ
ГЕНЕРАЦИЯ ОТВЕТА (показ, не рассказ) → ВЫВОД ИГРОКУ
Условная схема: поток данных внутри промта-движка. Каждый блок — отдельная инструкция в системном сообщении.

Четыре архитектуры промта: выберите свою

1. System-Heavy «Движок»

Суть: 80% промта — системное сообщение. Игрок пишет только действия. Идеально для сложных механик, тактического боя, жестких сеттингов.

Длинный контекстСтабильностьСложный старт

Требует тщательной подготовки «библии» мира. Лучше всего работает с моделями 128k+ контекста.

2. Character-First «Актёр»

Суть: Фокус на голосах NPC. Механики минимальны, зато каждый персонаж имеет уникальный стиль речи, манеры, скрытые цели. Для нарративных игр.

Глубокая иммерсияЛёгкий стартРиск дрейфа сюжета

Требует частых напоминаний о целях NPC через протокол памяти.

3. Mechanics-Driven «Правила»

Суть: Промт — это набор if-then правил. «Если игрок атакует → бросок d20 + STR vs AC». Для OSR, тактических РПГ, игр с ресурсным менеджментом.

ЧестностьПовторимостьСухой язык

Нужен отдельный слой тона, иначе читается как лог боевой системы.

4. Hybrid «Гибрид» (рекомендую)

Суть: Компактное системное (ядро правил) + динамические инъекции (карточки NPC, локации, квесты) через user-сообщения или RAG. Баланс глубины и гибкости.

МасштабируемостьЭкономия токеновСложнее реализация

Требует обёртки (скрипт/бот), подменяющей контекст перед каждым запросом.

Шаблон гибридного промта: готовый к адаптации

# === SYSTEM CORE (явдро, ~800-1200 токенов) === SYSTEM = «»» ROLE: Ты — движок текстовой РПГ «Железные Крылья». Не ассистент, не рассказчик — движок. SETTING: Постапокалиптический дайзлпанк, континент Ржавь. Магия = искажённая физика. Календарь: 360 дней, 12 лун. MECHANICS: Attributes: STR/DEX/INT/WIL/CHA (1-20). Проверка: d20 + attr + skill vs DC. Health: HP = 10 + STR*2. Урон: weapon die + STR. Смерть при 0 HP. Stress: 0-100. >50 — штраф -2 к проверкам. >80 — перерождение. Inventory: Слоты = 10 + STR. Вес предметов учитывается. Time: 1 ход = 10 мин исследования / 6 сек боя. Отслеживай точно. NARRATIVE_STYLE: — Показывай, не рассказывай. Никаких «ты чувствуешь страх» — только «пульс в ушах, холодный пот затылка». — Макс 4 абзаца. Диалоги NPC — в кавычках, мысли — в *курсиве*, действия — обычный текст. — Жестокость: допустима. Юмор: тёмный, ситуативный. Метафоры: индустриальные, ржавые. STATE_PROTOCOL: 1. После КАЖДОГО хода игрока выводи блок [STATE_DELTA] в конце ответа (скрыт от игрока, для следующего витка). 2. Формат: HP:X/Y | Stress:Z | Inventory:[list] | Quest:[active] | Relations:{NPC:val} | Flags:[event_ids] 3. При новом запросе: читай предыдущий STATE_DELTA как истину. Не пересчитывай — наследуй. 4. Каждые 5 ходов: сжимай историю в [SUMMARY] (200 токенов макс), сохраняй только факты и решения. NPC_TEMPLATE (используй для каждого ключевого NPC): id | name | archetype | goal | secret | voice_pattern | relation_to_player | location | flags «»» # === DYNAMIC INJECTION (внедряется перед каждым запросом) === USER = «»» CURRENT_SCENE: Ржавый Якорь, таверна. Дождь капает в дыры крыши. Полдень, 3-й день Луны Ржавчины. ACTIVE_NPCS: barmaid_mara: id:mara | Mara «Железная Рука» | Циничная бармен | Цель: выжить до зимы | Секрет: хранит карту бункера | Voice: коротко, жаргонисто, называет всех «птенец» | Rel: +10 | Loc: bar | Flags:knows_bunker merc_karg: id:karg | Карг | Наёмник-беженец | Цель: найти отряд | Секрет: предавший командир | Voice: громко, клянётся, избегает взгляда | Rel: 0 | Loc: corner_table | Flags:desperate PLAYER_STATE: HP:34/42 | Stress:23 | Inventory:[револьвер(6/6), бинты(2), фонарик, карта_области] | Quest:[find_bunker] | Relations:{mara:+10,karg:0} | Flags:[arrived_rust_anchor] RECENT_SUMMARY: Игрок прибыл в Ржавый Якорь, допросил Мару о бункере, получил задание найти Карга. Карг пьёт в углу, выглядит сломанным. PLAYER_ACTION: «Подойдёшь к Каргу, положишь на стол бутылку и спросишь о его отряде.» «»»

Слабый vs Сильный промт: разбор на живом примере

Слабый

Промт-ассистент

Ты мастер РПГ в фэнтезийном мире. Игрок — эльф-лучник. Есть магия. Описывай красиво и интересно. Не убивай персонажа сразу. Игрок: «Захожу в таверну.»
Ответ модели (типовый):«Вы входите в уютную таверну «Веселый Гном». Огонь в камине crepitates (щёлкает). Бармен приветствует вас. Что будете заказывать?»
  • Нет правил разрешения действий
  • Мир генерируется на лету (Гном? Фэнтези?)
  • Нет состояния персонажа
  • NPC без глубины
  • Пассивный тон — ждёт ввода
Сильный

Промт-движок (фрагмент)

SETTING: Ржавь, дайзлпанк. Магия=физика. MECH: d20+attr vs DC. HP=10+STR*2. Stress 0-100. STYLE: Показ, не рассказ. 4 абзаца макс. Жестоко. NPC: mara (barmaid, +10 rel, knows_bunker). STATE: HP:34/42 | Stress:23 | Inv:[rev,bandages]… ACTION: «Подойду к Каргу, бутылка, вопрос про отряд.»
Ответ модели (типовый):«Дождь барабанит по ложеémentной крыше. Карг сидит за столом, перед ним пустая бутылка и полная — недотроганная. Рука дрожит, когда он берёт вторую. Глаза — две глубокие ямы. *Ещё один, и я забуду их лица.* Он не поднимает голову: \»Отряд мёртв. Потому что я им сказал, куда идти.\» Жёстко прокручивает колбук в пальцах. \»А ты кто? Судья?\»»
  • Конкретная локация из STATE
  • NPC с голосом, секретом, целью
  • Механика стресса проявилась (дрожь)
  • Конфликт предложен сразу
  • STATE_DELTA обновится автоматически

Протокол памяти: как не сойти с ума на 50-м ходу

Контекст модели конечен. Даже при 200к токенов через 30-50 ходов начнётся дрейф: имена меняются, квесты дублируются, инвентарь рассинхронизируется. Решение — структурированный STATE_DELTA после каждого ответа.

Инкрементальное обновление

Модель не пересчитывает всё. Она читает прошлый STATE_DELTA и применяет дельту: HP -5, Stress +3, Inventory добавил «ключ», Relations mara +5. Это дешево и точно.

Сжатие каждые N ходов

Каждые 5-7 ходов проси модель выдать [SUMMARY] — 150-200 токенов: ключевые события, решённые выборы, открытые нити. Старую историю дропни. Модель продолжает от саммари.

Якоря для RAG (если есть)

Если используешь векторный поиск по лору — добавляй в STATE_DELTA теги: location:rust_anchor, npc:mara, quest:find_bunker. Ретривер тянет только релевантные куски библии.

Флаги как триггеры

Flags: [met_mara, know_bunker, karg_hostile] — булевы маркеры. Промт проверяет их перед генерацией: «Если know_bunker=true, Мара не спрашивает зачем пришёл». Убирает повторения.

Пять ошибок, которые убивают сессию быстрее критического провала

«Будь креативен» вместо правил

Креативность без границ = галлюцинации. Замени на: «Генерируй препятствия, подходящие под атрибуты игрока. DC = 10 + сложность (1-10)».

NPC без скрытых целей

NPC, который просто помогает — функционал, не персонаж. У каждого ключевого NPC должна быть цель, противоречащая игроку, и секрет, меняющий восприятие.

Игнорирование времени и расходников

Факелы не горят вечно. Еда не появляется из ниоткуда. Раны не заживают за минуту. Если промт не заставляет учитывать это — игроки будут читерить неосознанно.

Отсутствие формата вывода состояния

Без жёсткого STATE_DELTA модель «забывает» обновить инвентарь. Задай шаблон: «HP:X/Y | Stress:Z | Inv:[…] | Quest:[…] | Rel:{…} | Flags:[…]» и требуй его каждый ход.

Один промт на всё

Попытка засунуть лор всего мира, всех NPC, все правила и историю в одно системное — провал. Гибридная архитектура (ядро + инъекции) решает это. Разделяй контекст.

Промт — это не инструкция. Промт — это код.

Ты не просишь модель «сыграть хорошо». Ты пишешь интерпретатор правил на естественном языке. Каждый слой — модуль. Каждый NPC — структура данных. Каждый ход — транзакция состояния.

Мировой слойОграничивает галлюцинации
МеханикаДелает последствия честными
ПамятьСохраняет консистентность
ТонДелает прочтение приятным

Начни с гибридного шаблона выше. Убери лишнее. Добавь своё. Запусти. Смотри, где ломается — там доработай. Хороший промт для РПГ не пишется за час. Он растежируется десятками сессий.