Сделал игру с ИИ по вселенной Самосборa

"system": "Ликвидаторы используют грабли и огнеметы"
"system": "Ликвидаторы используют грабли и огнеметы"

Хочу поделиться историей моего проекта — игры-бота в Telegram, основанной на вселенной Самосбора. Многие уже знают этот мрачный сеттинг, который зародился на Дваче. Если вдруг нет — вот пара ссылок для погружения: DTF или Neolurk.

TL;DR: Играть тут, бесплатный ИИ "Заводчанин" медленный и с ошибками. Слыш купи звездочки, пожалуйста. Купил? Купи ещё.

Я занимаюсь машинным обучением и языковыми моделями (LLM), и как-то раз подумал: "А почему бы не поэкспериментировать с LLM как нарратором в ролевой игре?" Так родилась амбициозная цель — создать игру с полной генерацией контента, механиками близкими к текстовым квестам, в мире Самосбора. Представьте, что все локации, карты этажей и персонажи генерируются случайно, каждую игру.

Взаимодействие с предметами и персонажами обрабатывается ИИ в реальном времени, звук генерируется через TTS-модуль на основе сгенерированного текста, а Stable Diffusion рисует арты — от текстур до портретов NPC. И все это на компьютере игрока. Мир Самосбора, с его уникальными историями и нестабильным лором, идеален для такого подхода. Какие основные компоненты игры я выделил:

  • Генератор локаций: Создание этажей гигахрущёвки с полным содержимым — квартиры, предприятия, тайные лаборатории.
  • Генератор NPC: Не только генерация информации о персонаже, но и граф социальных связей, учитывающий их взаимоотношения друг между другом и с игроком. Если вы поругались с соседом — он может испортить прокладку гермодвери. А еще соседи могут поругаться между собой вообще без вашего участия.
  • Модуль нарратора: LLM отвечает за описание действий и мира, учитывая предметы и NPC, находящиеся на локации.

Реальность

Я начал этот эксперимент год назад, сделал модули генерации NPC и модуль нарраторa, проверял возможности LLM и понял, что даже крутые языковые модели, такие как Mistral, пока плохо держат контекст игры и требуют мощного железа. Покрутил немного на арендованных GPU серверах, посчитал стоимость, опечалился и отложил проект в долгий ящик.

Сделал игру с ИИ по вселенной Самосборa

В этом августе мне нужно было протестировать новые модели и я вспомнил про Самосбор. Подцепил к нарратору модель Hermes 3 и получил стабильные ответы, хорошее поддержание контекста и связанную историю. Да, крутить ее локально пока не получится, но есть провайдеры предоставляющие бесплатный доступ. Это открыло возможность сделать публичного бота в телеге, чтoбы поугарать с друзьями:

Долго играл с промптами (запросы к LLM), контекст бесконечного здания был усвоен легко, а вот с окнами были сложности. Так же добавил защиту от жульничества:

У бесплатной модели одно ограничение: плавающий лимит запросов. Лимит на всех пользователей, не только на этот самосборный бот. Из-за этого бесплатная модель может перегреваться, отвечать медленно и уходить в ошибки. Появилась мысль: продавать доступ к платной модели через бота. Подключаю более крутые LLM Claude от Anthropic, начинаю тестировать...

Если бы не было этого результата, я бы не стал тащить это в продакшен и на DTF. Ребятки, это запредельный уровень.

Оно генерирует контент на уровне рассказов по самосбору.

Не хочу быть голословным, вот вам игра на топовой модели.

Сделал игру с ИИ по вселенной Самосборa

Пример игры

Полный текст > 5к символов. Можете ознакомиться с полной историей Степана Хрущева тут. Синим в документе я пометил ответы которые писал самостоятельно, а не выбирал из предложенных ботом вариантов. Ниже я приведу старт истории и самые сочные моменты:

> Начать игру

Ты - Степан Хрущев, 37 лет, слесарь-сантехник в одном из жилых секторов Гигахрущевки. Твоя работа - чинить постоянно ломающиеся трубы и бороться с вечными протечками. Жильцы тебя недолюбливают, считая, что ты берешь взятки за работу, хотя на самом деле ты просто не успеваешь справляться с потоком заявок. ... Ты просыпаешься от звука сирены. Очередной Самосбор. Твоя квартира погружена в полумрак, лишь тусклая лампочка мерцает под потолком. Через щели в стенах просачивается фиолетовый туман. Нужно срочно решать, что делать дальше.

Степан обнаруживает, что у его гермодвери отходит уплотнитель. Он пытается заткнуть щели, но туман уже начинает просачиваться в квартиру. В ужасе Степан начинает молиться:

> Молиться любому божеству, которое может услышать

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

Сохраняя остатки разума, Степан успевает открыть дверь, которую уже начинают вываривать Ликвидаторы:

> Открыть дверь

Собрав последние силы, ты поворачиваешь ручку и распахиваешь дверь. В проёме стоят двое Ликвидаторов в противогазах и защитных костюмах. Их глаза расширяются от ужаса при виде происходящего в квартире. 'Твою мать! Аномалия!', - кричит один из них и выхватывает странное оружие, похожее на огнемёт. Второй хватает тебя за шиворот и вытаскивает в коридор. Ты падаешь на пол, жадно глотая воздух. Позади слышится рёв пламени и нечеловеческий визг Самосбора. 'Ну и влип ты, мужик', - говорит Ликвидатор, нависая над тобой.

Степана ведут в карантин:

Вы проходите мимо забитых досками квартир, на дверях которых намалеваны жуткие символы. Из-за одной такой двери доносится утробное рычание, от которого у тебя волосы встают дыбом. 'Не дергайся,' - бросает один из Ликвидаторов, заметив твою реакцию. 'Там уже давно никого живого нет.' Вы останавливаетесь перед массивной стальной дверью. На ней красной краской выведено: 'КАРАНТИН. ПОСТОРОННИМ ВХОД ВОСПРЕЩЕН'.

Но самосбор так просто его не отпускает:

Ты медленно опускаешься на жесткую койку, чувствуя, как она скрипит под твоим весом. Голова гудит, словно колокол. Ты закрываешь глаза, пытаясь собрать разбегающиеся мысли. Самосбор... Он был там, в твоей квартире. Не просто стихийное бедствие, а нечто... живое? Разумное? Ты вспоминаешь ощущение чужого присутствия, непостижимого и древнего. Оно говорило с тобой, без слов, напрямую в разум. По спине пробегает холодок. А что, если оно все еще здесь, в твоей голове? Что, если ты теперь не один в своем сознании? Ты открываешь глаза, озираясь по сторонам. Камера кажется меньше, стены будто сжимаются. Из соседней камеры доносится бормотание: 'Оно везде... Оно знает... Оно ждет...' Ты чувствуешь, как к горлу подкатывает тошнота. Что-то изменилось в тебе, ты это знаешь. Но что именно? И какую цену придется заплатить за это знание?

Потом был доктор, который запугивал Степана предстоящими экспериментами над ним, попытка угомонить шепот самосбора в голове, принятие его как своей части и скорый побег

Ты делаешь вид, что успокоился, и говоришь: 'Хорошо, я понял'. Санитар немного расслабляется, но все еще смотрит на тебя с подозрением. В этот момент ты мысленно кричишь Самосбору: 'Помогай мне!' И тут происходит нечто невероятное. Твое тело словно наполняется неведомой силой. Мышцы напрягаются, зрение обостряется, время будто замедляется. Ты бросаешься на санитара с нечеловеческой скоростью. Он даже не успевает среагировать, как твой кулак уже впечатывается ему в лицо, заставляя захлебнуться криком. Удар получается настолько мощным, что санитар отлетает к стене и сползает по ней, потеряв сознание. Ты стоишь над бессознательным телом, тяжело дыша. Адреналин бурлит в крови, а в голове шепчет Самосбор: 'Беги... Скорее...'

Все больше поддаваясь шепоту и силам, Степан теряет себя. Возможно можно было сопротивляться и дальше, но мне было интересно что произойдет:

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

Ты делаешь глубокий вдох и отпускаешь последние остатки контроля. Самосбор захлестывает тебя волной невообразимой силы и боли. Твое тело начинает трансформироваться. Кожа покрывается фиолетовыми узорами, пульсирующими в такт биению сердца. Кости хрустят, меняя форму. Ты чувствуешь, как разум расширяется, вбирая в себя хаос и безумие Самосбора. Преследователи врываются в комнату, но застывают в ужасе. Перед ними уже не человек, а нечто иное - порождение Самосбора, излучающее мощь и безумие. Ты ощущаешь связь с генератором аномальных полей. Одним движением мысли ты усиливаешь его работу. Волны искажения реальности расходятся по комнате, затрагивая все вокруг. Стены плавятся, потолок растворяется в воздухе. Преследователи кричат, их тела искажаются и распадаются. Ты чувствуешь, как лаборатория, здание, весь этот уровень Гигахрущевки поддается твоей воле. Но цена огромна. С каждой секундой ты теряешь частицы своей личности, своих воспоминаний. Степан Хрущев исчезает, уступая место новому существу - аватару Самосбора. Последняя мысль проносится в твоем угасающем человеческом сознании: 'Что я наделал?' А затем остается только Самосбор, хаос и пустота. Конец игры. ИГРА ОКОНЧЕНА /start для новой игры

Полную версию можно прочитать тут, это гораздо круче куцего пересказа выше.

Сделал игру с ИИ по вселенной Самосборa

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

Итог

Бот тут:

Канал с новостями и важными апдейтами:

Через команду /model можно выбрать одну из моделей:

👷🏼 Заводчанин - бесплатный ИИ, медленные ответы, средний сюжет 🧑‍🔬 Ученый — бюджетный ИИ с быстрым и хорошим повествованием. 👮🏿 Ликвидатор — наш лучший ИИ, предлагающий самые глубокие сюжеты и неожиданные повороты.

За каждое сообщение Ученый расходует 0.13 талона, а Ликвидатор 1.9

1 Талон = 1 Звездочка в телеге. Купить талоны можно командой /buy там же информация о том, сколько сообщений с каждым ИИ это даст

Единого канала для фидбека сейчас нет, возможно сделаю отдельного бота или группу в телеге (все апдейты будут в канале, ссылка выше)

Планы на будущее

Хотелось бы не забрасывать проект на этом этапе, и развивать его дальше. Уверен, что развитие LLM позволит весьма скоро получить результаты бесплатной версии и на локальных компьютерах.

Сейчас планирую идти постепенно и пока не отказываться от Telegram как платформы: следующую итерацию можно сделать как Mini App (та же технология на которой работает всем известный хомяк), добавив туда уже модуль генерации локаций и соц. граф персонажей + минимальный интерфейс для взаимодействия с миром. При текущей модели монетизации это вполне возможно (когда игрок платит за объемы взаимодействия с моделью)

P.S. Все картинки в этом посте сгенерированы pollinations.ai который используется в боте, картинки посредственные - но без них скучно. Для создания этого бота не были использованы никакие материалы сообщества Самосбора для обучения каких либо моделей - более того, тут нет ни одной модели, которую я специально бы обучал или файнтюнил. Вся вселенная Самосбора задана модели исключительно системными промтами, которые я написал сам, на основе своих знаний.

2222
33
9 комментариев

Еще занятный факт: 90% кода этого бота написана той же самой нейросетью которая генерит тексты Ликвидатора. Самосбор тут сам себя воспроизвел, я мимо проходил

4
Ответить

Игра самособралась)

1
Ответить

Такими темпами текстовые квесты смогут воскреснуть

4
Ответить

А как происходит обучение нейронки под свою игру? Ну, в общих чертах.

Ответить

Смотри, сначала собираешь датасет - это факты, которые нейросеть должна "знать". Потом берешь уже обученную модель и начинаешь ее "подкармливать" этими новыми данными. Это происходит так: показываешь модели пример входных данных и ожидаемый результат, а она пытается предсказать этот результат. Повторяешь этот процесс много раз на разных примерах из твоего датасета. Модель постепенно учится, как бы впитывая новую информацию. А потом тестируешь вопросами на основе своего датасета и если получилось плохо - меняешь датасет или параметры обучения.

6
Ответить

Это мы пробуем
Интересно насколько ИИ сейчас в нарративной части подтянулся. Помнится 1-2 года назад народ говорил "ещё дофига времени потребуется для того, чтобы его в играх использовать"

1
Ответить