Создание AI мастера для D&D: память LLM, баланс и опыт разработки | AiManual
AiManual Logo Ai / Manual.
18 Июн 2026 Гайд

Как я строил AI-мастера для D&D и не умер от переполнения контекста

Реальный кейс разработки AI Dungeon Master: как мы решили проблему амнезии LLM и сломанного баланса в кампаниях. Архитектура structured output и гибридной памят

Реклама
partv1

Первая же сессия показала, что LLM — плохой DM

Я сел за стол (виртуальный), открыл ноутбук, запустил своего первого AI-мастера. Через 20 минут партия 3-го уровня была пережёвана бандой крыс. Нет, не по правилам — модель просто решила, что у крыс есть multiattack с автохитом. И это только начало. К концу часа ГМ забыл, что в комнате уже лежит труп главного злодея, а NPC стал предлагать награду за его убийство. Типичный провал: LLM не держит контекст длинных диалогов и плодит галлюцинации баланса.

Наивный подход — скормить модели полный лог чата + правила D&D — разбился о границу контекстного окна. После 10 000 токенов модель начинает «забывать» начало, а после 20 000 — впадает в бред. Переносимся в июнь 2026: даже самые передовые модели (GPT-4o, Gemini 2.5 Pro, Qwen 3) не спасают, если не выстроить правильную архитектуру памяти и баланса.

В этой статье я расскажу, как мы построили AI-мастера, который провёл 10 полноценных тестовых сессий без единого TPK по вине модели. Без воды — только схемы, цифры и грабли, на которые я наступил.

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

Мой AI-мастер — это не монолитная LLM. Это три слоя: Narrator (генерация текста), Referee (валидация правил) и Memory Manager (рабочая + долговременная память). Каждый слой — отдельный микросервис, общающийся через JSON.

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

За основу мы взяли концепцию structured output, подробно разобранную в статье про архитектуру AI RPG с авторитарным бэкендом. Для каждого ответа модели мы задаём жёсткую JSON-схему: описание сцены, действия NPC, броски кубов (переменные, которые потом заполняет бэкенд). Модель никогда не пишет «вы нанесли 15 урона» — она пишет «{damage: dice(2d6+3)}», а сервер уже считает реальное значение. Это убивает галлюцинации цифр.

1 Выбор LLM: локально или облака?

Для тестов я гонял три варианта: GPT-4o (дорого, но умно), Qwen 3 35B через LM Studio (локально, 20 токенов/с на RTX 4090) и свежую Gemini 2.5 Pro (лучший баланс цена/качество). Лучше всего себя показала Qwen — за счёт низкой латентности и возможности донастроить на датасете D&D. Подробнее о локальном запуске — в гайде по связке LM Studio и Qwen. Если бюджет позволяет — GPT-4o с fine-tuning на датасете из 22k задач как в Meta RPG.

2 State memory: не дай LLM забыть, кто ты

Рабочая память хранится как JSON-объект текущей сцены: локация, активные NPC, статы партии, инициатива. Модель получает только этот объект + последние 5 действий игроков. Как только сцена меняется — генерируется саммари с ключевыми событиями и сохраняется в ChromaDB с тегами (локация, участвующие персонажи). При возвращении в ту же локации — подгружаем саммари в промпт. Это решение подсмотрено в эпизодической памяти Amazon Bedrock AgentCore.

Мы не храним весь лог — только сжатые факты: «Гоблин Гнук мёртв», «Дверь заперта магией», «NPC обещал 100 золотых за доставку письма». Размер саммари — не более 500 токенов. За 10 сессий средний контекст не превысил 12 000 токенов, хотя логически кампания охватывала десятки сцен.

3 Баланс: пусть модель пишет красиво, а механика считает сухо

Самая частая ошибка — доверять генерацию монстров LLM. Модель либо сделает их имбами (400 HP гоблин), либо тряпками. Решение: Oracle — Python-модуль, который по запросу модели генерирует легального монстра из Monster Manual с адаптацией под уровень партии. Модель только выбирает название и стиль, Oracle достаёт статы, корректирует CR по формуле: CR_adjusted = base_CR + party_level — 3. Проверка бросков происходит на стороне Referee: он использует тот же d20 с модификаторами, что и в настольной игре.

Никогда не передавайте в системный промпт правила D&D целиком — модель начнёт интерпретировать их творчески. Пусть правила живу в коде, а LLM лишь описывает результат.

Для баланса мы добавили систему напряжения: Referee отслеживает текущие HP партии, количество использованных ресурсов (заклинания, особенности). Если партия близка к смерти — AI получает сигнал снизить сложность (убрать одного врага, дать укрытие). Если всё слишком легко — добавить триггер для окружения (обвал, подкрепление). Алгоритм описан в статье про современного AI-агента с planner/executor.

Как НЕ надо делать (мои грабли)

  • Не кладите весь лог в контекст. После 10 000 токенов модель теряет начало. Я потерял так две кампании — персонажи забывали свои квесты.
  • Не давайте LLM самой генерировать числовые значения. Крыса с 45 ХП? Легко. Атака с бонусом +15? Пожалуйста. Всё, что можно посчитать — считайте на бэкенде.
  • Не игнорируйте roleplay. Без хорошего системного промпта модель скатывается в сухие «ты ударил — он ударил». Используйте метод рандомизации системных промптов, чтобы NPC имели характер.
  • Не давайте модели доступ к «всезнанию». Она должна описывать только то, что видят и знают персонажи. Иначе пропадает интрига. Мы реализовали это через маску «perception

Ошибки памяти: когда модель не помнит, что вы убили короля

Даже с гибридной памятью бывают проколы. Один раз модель «воскресила» того самого короля, потому что саммари не сохранило факт убийства. Пришлось ввести флаг confirmed_dead для каждого уникального NPC. Теперь при генерации саммари Memory Manager проверяет, были ли действия, приводящие к смерти (атака с уроном >0, спасбросок, описание). Если да — в саммари добавляется строка «X dead».

Помогла техника Agent Skills — мы задали модели строгие инструкции, которые не должны забываться ни при каких обстоятельствах. Например: «Ты не можешь создавать предметы из воздуха». Как это работает — в отдельном разборе Agent Skills.

Цифры меня не обманут

МетрикаНаивный подходГибридная архитектура
Средний размер контекста (токенов)80 00012 000
Инциденты разрыва логики за сессию81
TPK (полное уничтожение партии) по вине AI3 из 100 из 10

Каждая тестовая сессия длилась ~3 часа. Игроки — четверо друзей, которые не знают, где сидит LLM, а где живой DM. Разницу они заметили только в двух вещах: AI чуть медленнее придумывает диалоги и иногда слишком буквально трактует «разговор с тенями».

Что дальше

Сейчас мы экспериментируем с мультиагентной системой: Narrator (генерация мира), Tactician (тактика врагов), Loremaster (знание истории мира). Каждый получит свою область и свою память. Первые прототипы показывают, что это снижает когнитивную нагрузку на одну модель и улучшает глубину ролевой игры. Если интересно — можете посмотреть, как похожая идея реализована в SillyTavern AI Game Master. Но это уже совсем другая история.

А пока — не пытайтесь заменить живого DM полностью. AI-мастер хорош для соло-кампаний, быстрых стартов и помощи в боёвке. Для глубоких социальных интриг и живых шуток за столом он беспомощен. Используйте его как ко-мастера: пусть рулит монстрами и генерацией подземелий, а живой человек управляет сюжетом. Тогда и баланс не сломается, и память не подведёт.

Кстати, последний штрих: для управления состоянием через JSON мы использовали open-source движок, который я разбирал в статье про Python AI Dungeon Master — он идеально лёг в нашу архитектуру.

Подписаться на канал