← Ко всем записям ·

Почему ваш ИИ-мастер врёт

Почему ваш ИИ-мастер врёт

Вы пробовали играть в ДнД с ИИ-ассистентом типа ChatGPT или Gemini? Тогда вы точно знаете, каково это. Сначала вау-эффект от красивых описаний, знания правил и неожиданных реакций мира. А потом разочарование от ошибок в математике, подыгрывания и провалов в памяти — захватывающая игра быстро превращается в сюр.

Увы, LLM не умеют считать в привычном нам смысле и могут лишь подставить наиболее подходящее по смыслу значение. Не всегда правильное. Проблемы с памятью вызываны ограничениями контекстного окна и механизма внимания: через 10 ходов модель начнёт путаться в хп игрока и врагов, забывать очерёдность ходов в бою и не вспомнит, в какой локации вы были до этого. Если дать модели готовый сценарий, очень скоро она будет помнить только основную идею и главного босса — и больше ничего. Наконец, модели обучены избегать конфликтов и угождать пользователю, а правила игры для LLM — просто текстовый антураж, а не жёсткие рамки. Отсюда бесконечное подыгрывание, которое не лечится промптами, а вся игра выглядит как одна бесконечная галлюцинация.

Поэтому мы решили написать свой движок для текстовых RPG — RuleScroll. Мы используем событийно-ориентированный параллельный конвейер, основная идея которого заключается в жёстком разделении ответственности: ИИ «понимает» текст, код отвечает за память и расчёты.

Схема конвейера RuleScroll: ИИ понимает текст, код считает и помнит

Когда игрок пишет сложный запрос (например, «прыгаю через стол и бью орка»), мы обрабатываем его в несколько этапов. Первый шагом запрос декомпозируется на атомарные действия, для которых строится граф зависимостей. Это как раз делает ИИ. Он же определяет, нужны ли проверки (для прыжка это может быть проверка атлетики). Далее, если первое действие (прыжок) проваливается по кубам, движок автоматически блокирует или каскадно изменяет все последующие связанные действия (атака). Это уже делает код. Такой подход гарантирует логичность происходящего без читерства со стороны ИИ.

Также ИИ проверяет, какую реакцию мира может вызвать каждое из действий: несколько LLM параллельно судят действия, валидируют их, определяют реакции мира и назначают проверки или спасброски. Противоречия же решаются кодом по заданным правилам. Например, атака на орка: если одна модель блокирует действие (нельзя ударить орка до броска инициативы), а другая модель согласна с атакой, то код примет решение отложить атаку до результатов броска инициативы. Если окажется, что игрок ходит первым, атака произойдёт. Ну а если первым ходит орк, движок походит за орка. При этом, остальные расчёты — броски d20, модификаторы характеристик персонажа, расчет HP и лимитов атак — также производятся кодом.

В финале ИИ-рассказчик получает не сырой запрос игрока, а технический отчёт от движка: что удалось, какие кубы выпали, сколько урона получено — «скелет» ответа. Единственная задача рассказчика — превратить сухие факты в атмосферный текст без возможности влиять на исход событий.

В результате игрок получает свободу текстового ввода, но в рамках правил и реакций мира.

Отрисованный лог хода в RuleScroll

Именно такого эффекта мы и добивались при разработке RuleScroll. Нам хотелось сохранить вау-эффект от свободы действий, которую даёт ИИ, и одновременно убрать галлюцинации и решить проблемы с математикой и памятью. Кажется, мы на верном пути.

Через месяц стартует второй закрытый альфа-тест. Запишись сейчас, чтобы стать одним из первых, кто проверит наш движок на прочность. Мы ищем тех, кто умеет «ломать» игры своими безумными идеями.