Как контролировать LLM в ролевой игре: архитектура Beyond The Verge
Beyond The Verge обуздали проблемы LLM в ролевых играх: модельный дрейф, амнезию, нарушения правил. Решение радикально: авторитарный бэкенд на FastAPI с Postgre

Beyond The Verge — полностью русскоязычная текстовая RPG на базе LLM — столкнулась с классической проблемой: модели забывают контекст, нарушают правила игры, добавляют предметы из воздуха. Через 30 ходов игра превращается в несвязный чат. Разработчики выбрали не пытаться «приручить» модель, а забрать у неё управление механиками.
Почему LLM не подходит для механик LLM генеративна по природе, а RPG требует детерминизма.
Модель помнит только контекст окна, не различает своё воображение от игрового состояния, может спонтанно изменить сюжет или нарушить логику. Если позволить ей управлять инвентарём, она легко потеряет меч, забудет об ограничениях или добавит предмет, который игрок не брал.
Архитектура: LLM только нарратор Beyond The Verge разделила ответственность.
Все игровые механики — детерминированная логика на бэкенде: Инвентарь — строка в PostgreSQL с ID предметов, весом и свойствами Карта — граф вершин (локации) и рёбер (переходы между ними) Состояние персонажа — вектор в pgvector для быстрого поиска контекста Боевая система — формулы урона, защиты, критов — всё вычисляется * Квесты — конечные автоматы с фиксированными состояниями LLM получает снимок игрового состояния в текстовом виде и генерирует только описание: «Вы вошли в тёмный лес. Слышны звуки птиц. В инвентаре: кинжал, зелье маны (30%). Впереди гоблин, слабый». Действие игрока парсится, валидируется бэкенд-логикой (может ли персонаж это сделать?), вычисляется результат, потом LLM описывает последствия.
FastAPI +
PostgreSQL + pgvector Стек простой, но эффективный: FastAPI обрабатывает ход игрока, PostgreSQL хранит состояние (инвентарь, NPC, квесты), pgvector ищет релевантный контекст для LLM (воспоминания персонажа, атмосфера локации), Flutter Web — интерфейс. Когда игрок двигается, бэкенд обновляет позицию в графе карты, находит в pgvector лучшие описания, собирает видимые объекты. LLM получает компактный контекст и генерирует текст за <1 секунду. Нет войны с памятью модели, нет амнезии.
Масштабируемость через версионирование
При 1000 одновременных игровых сессий состояние может конфликтовать: два ходя в один момент — кто побеждает? Решение: оптимистичная блокировка с версионированием состояния. Каждое состояние имеет номер версии; если при ходе обнаружен конфликт, клиент пересинхронизируется и ход переигрывается. Гонки исключены, зато система линейно масштабируется.
Что это значит LLM — инструмент генерации текста, а не управления.
Для надёжных систем логика, состояние и механики должны жить в коде, не в модели. LLM переводит события в живое описание. Это паттерн для всех AI-систем с детерминированным состоянием: браузерные агенты, сложные симуляции, игры. Отделить управляемое от генеративного — путь к надёжности и масштабируемости.