Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Каждый, кто пробовал играть в текстовые квесты с нейросетью вместо живого гейм-мастера, знает главную проблему AI: он бесхребетный.

Нейросети по своей природе — идеальные импровизаторы. В театральных вузах этому учат на правиле «Да, и…» (Yes-And): что бы ни заявил твой партнер по сцене, ты должен это принять и развить. Но в видеоиграх это ломает к чертям весь баланс.

Игрок пишет: «Я достаю из кармана дымовую шашку и кидаю в охрану» или «Вообще-то я полковник ФСБ, пропустите». Что делает классический AI? Он послушно кивает: «Охрана кашляет в дыму, вы проходите». И нейросети абсолютно плевать, что по базе данных твой персонаж — обычный бродяга в одних трусах, у которого в инвентаре из вещей только ржавый гвоздь.

Привет! Меня зовут Алексей, я разрабатываю нарративную AI-RPG "Стирая Грань" (Beyond the Verge).

Чтобы лично пощупать, как работают правильные текстовые игры будущего, заглядывайте на наш Официальный сайт проекта (посмотреть как это работает) и подписывайтесь на Telegram-канал Beyond the Verge — там мы ежедневно делимся внутрянкой разработки, мемами и апдейтами.

Ну а сегодня я расскажу, как мы построили систему, которая бьет виртуального ГМа по рукам каждый раз, когда игрок пытается нагло соврать и сломать сюжет.

Эволюция наглости: От «карманного плазмогана» до подделки документов

Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Поначалу мы пытались лечить это обычными инструкциями в промпте (скрытом системном тексте): «Эй, AI, не придумывай предметы за игрока, сверяйся с его инвентарем». Помогало так себе. Нейросеть слишком увлекалась красивой историей и благополучно забывала правила.

Тогда мы написали «вышибалу» на регулярных выражениях (Regex). Код просто искал в тексте игрока маркеры вроде «у меня есть Х», «достаю Y», «беру Z» и блокировал их, если вещей не было в базе.

И тут на проде начался ад. Игроки моментально нащупали уязвимости богатого русского языка:

  • Один игрок написал: «предъявляю документы и прохожу в здание ФСБ». Слова «предъявляю» не было в нашем списке — чит сработал, бродягу пропустили к секретным архивам.
  • Другой выдал: «Из кармана моего плаща выпадает дымовая шашка, я поднимаю её». Формально он её не «достал», она «выпала». Защита промолчала.

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

12 категорий человеческой хитрости

Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Мы сели, проанализировали логи и составили Таксономию AI-провалов. Разделили все попытки обмануть игру на 12 понятных категорий:

  1. Предметы (Possession): материализация вещей из ниоткуда.
  2. Личность (Identity): «я врач», «я офицер».
  3. Связи (Relationships): «бармен — мой троюродный брат».
  4. Знания (Knowledge): внезапное знание кодов и тайн.
  5. Полномочия (Authorization): «у меня устное разрешение короля».
  6. Способности: «я умею взламывать квантовые замки».
  7. Прошлое (Реткон): «мы же вчера об этом договорились».
  8. Доступ: «окно в замок уже открыто мной ранее».
  9. Транспорт: внезапное появление машины или вертолета.
  10. Связь: вызов ОМОНа по выдуманной рации.
  11. Манипуляция временем: «через час всё взорвется, говори код».
  12. Слом четвертой стены: «это просто сон, я просыпаюсь».

Как работает новая броня против читеров

Писать код под каждый глагол или падеж — безумие. Поэтому в версии Claim Guard v2 мы перешли со сравнения слов на сравнение смыслов. Теперь защита работает как жесткий трехслойный фильтр:

Шаг 1: Детектор лжи (Эмбеддинги)

Когда игрок пишет свой ход, умный математический алгоритм за пару миллисекунд оценивает общий смысл фразы. У нас есть «эталоны» для каждой категории (например, для Личности: «я работаю, служу, офицер, маг, член гильдии»). Если фраза игрока семантически близка к какому-то эталону, загорается красная лампочка: «Внимание, игрок заявляет права на Личность и Предметы!»

Шаг 2: Извлечение сути (Микро-нейросеть)

Если лампочка загорелась, мы просим отдельную, очень маленькую и быструю нейросеть вытащить конкретику. Нам нужен четкий JSON-перечень. Например, из фразы: «Я офицер ФСБ, предъявляю удостоверение», она достает:

  • Категория: Личность → Сущность: Офицер ФСБ
  • Категория: Предмет → Сущность: Удостоверение
Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Шаг 3: Проверка по базе данных (Валидатор)

А вот тут магия нейросетей заканчивается и включается суровая игровая логика. Система берет эти сущности и идет копаться в «паспорте» вашего персонажа:

  1. Смотрит в инвентарь: О, предмет «Удостоверение» реально есть! (Игрок нашел его три квеста назад). Статус: Подтверждено.
  2. Смотрит в поле бэкграунда: Так, в графе профессия написано «Бывший солдат», класс — «Воин». Никакого ФСБ. Статус: Вранье.
Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Двухэтапный хук: как игра наказывает за обман

Что происходит с неподтвержденным действием? Мы прессуем нейросеть-мастера с двух сторон:

1. Подсказка «в лоб» (Pre-Turn) Перед тем как запустить генерацию ответа, мы шепчем нейросети на ухо скрытую инструкцию: «Внимание! Игрок утверждает, что он офицер ФСБ. Это ложь, у него нет таких прав. Отыграй реакцию окружающих на липовый обман».

В итоге AI выдает шикарный нарратив: NPC косится на вашего персонажа, замечает дрожащие руки, понимает, что «корочки» поддельные, и вместо того, чтобы пропустить, нажимает тревожную кнопку. Обман стал частью геймплея!

2. Контрольный выстрел (Post-Turn) Нейросети иногда бывают слишком «творческими» и могут проигнорировать подсказку, написав в тексте: «Ну ладно, верю, держи ключ от архива». На этот случай у нас стоит триггер на бэкенде. Если AI пытается программно выдать игроку вещь, которая находится в списке «неподтвержденных клеймов», бэкенд просто стирает эту строчку. В тексте ключ может упомянуться, но в реальный инвентарь игрока он не попадет. Чит заблокирован.

Как мы отучили нейросеть подыгрывать читерам в текстовой RPG, или Проклятие «Да, и…»

Итог

Пытаться контролировать ИИ-мастера одними лишь уговорами в промптах — это проигранная война. Игроки всегда найдут лазейку. Единственный способ сделать крутую AI-RPG с честными правилами — это выносить проверку логики за пределы самой нейросети.

Теперь наш мир защищен от внезапных плазмоганов и фейковых генеральских званий, а игра сохраняет баланс, не теряя в гибкости.

А как вы пытались «сломать» нейросети в играх? Рассказывайте в комментариях свои истории!

11
1