«Я замахиваюсь в пятый раз»: как я уговаривал нейросеть разбить чан с маслом в собственной игре
На сей раз мне захотелось раскрасить текст картинками, поэтому я буду подставлять нейро-картинки и иногда мемы чтобы.. Выглядело интереснее. Надеюсь вам понравится X)
У любого, кто пытается прикрутить нейросеть к реальному коду, рано или поздно сгорает задница от одной и той же привычки моделей: они обожают трепаться вместо того, чтобы выполнять команды.
Сижу ночью, тестирую свежую сборку Aetheria. Мой персонаж стоит на складе, рядом бочка с маслом. Мне нужно проверить, как движок отработает физику разлива и горения.
Пишу: «Бью топором по чану с маслом».
Что должен сделать нормальный скрипт? Вызвать item.damage, расколоть объект, вылить жидкость на пол.
Что делает LLM? Она включает режим великого писателя:
«Ты крепче перехватываешь топорище. Холодный металл тускло блестит в полумраке склада, а в воздухе стоит тяжелый запах старой древесины и смолы. Ты чувствуешь, как напрягаются мышцы перед ударом...»
И всё. Ни вызова функции в коде, ни разбитого чана. Текст есть, действия нет.
Пишу второй раз: «Я не чувствую мышцы, я бью по бочке со всей дури, прямо сейчас».
Модель: «Лезвие со свистом рассекает воздух и с глухим стуком врубается в толстые дубовые клепки! Щепки летят в стороны, чан содрогается, но дерево держится крепко. Ты ощущаешь отдачу в ладонях...»
Смотрю в дебаг-панель движка — здоровье чана 100/100, масло внутри, флаг удара не вызывался. Нейросеть просто сочинила красивую анимацию удара на словах, забыв дернуть триггер в коде. В ее воображении мы уже полчаса рубим этот несчастный чан, а в памяти движка мы просто стоим столбом посреди комнаты.
На четвертый ход я уже пишу капсом: «ПРОБЕЙ ЕГО НАХРЕН».
И только когда в системный промпт прилетел жесткий пинок по рукам («сначала вызывай инструмент в движке, а потом пиши свои поэмы»), модель наконец соизволила отправить честный JSON-запрос на урон. Чан треснул, масло залило пол, физический движок с радостью всё это поджег.
Это главная болезнь текстовых нейроигр. Модели патологически лень дергать код, ей проще родить три абзаца художественного текста ни о чем. Приходится буквально вбивать ей в голову правило: если игрок бьет, ты сначала обязана изменить состояние мира в движке, и только потом открывать рот.
В общем, после тонны таких правок, споров с ИИ и борьбы с бесконечными пожарами, мы наконец упаковали текущую версию в играбельный билд (v0.1.7-alpha) и выложили на itch:
Кому интересно пощупать, как это играется вживую — заходите, качайте. Предупреждаю сразу: игра работает от внешних API-моделей (лучше всего скармливать ей DeepSeek или Qwen), так что в настройках надо будет вбить свой ключ.
Если кто-то тоже пытался заставить LLM стабильно вызывать функции без пустой болтовни — делитесь в комментах, какими костылями лечили.












