Коротко
Разбор кейса Signal Drift, где 1.5B-модель управляет диалогами, но не имеет права менять реальность игры. Почему валидация важнее генерации и как устроена архитектура с локальным инференсом.
Инди-игра Signal Drift shipped 940 MiB языковую модель Qwen2.5-1.5B-Instruct прямо в билд. Модель генерирует свободные диалоги, но не имеет права менять состояние игры. Автор постмортема Джон Сицилиано формулирует главное правило так: модель исполняет персонажа, а authored-логика игры решает, что реально.
Главная инженерная проблема — не генерация текста, а контроль. Без валидации модель может выдать признание в преступлении, которого не было, или закрыть миссию просто потому, что звучит уверенно. Чтобы этого избежать, JavaScript-движок игры остаётся авторитетным источником состояния. Он решает, кто говорит, в каком канале, что игрок реально видел и какой уровень отношений применяется.
Сгенерированный текст не может открыть дверь, выдать улику, изменить отношения или закрыть миссию. Валидатор отклоняет неподтверждённые числа, идентификаторы и сущности. Если ответ не прошёл проверку, модель получает одну попытку на рерайт. Если не помогло — игра подставляет authored-строку. Это не экран ошибки, а часть нарративной системы.
Память персонажей устроена как явная структура данных, а не как дамп истории диалога. Для каждого NPC хранится скользящее саммари, 16 последних полных реплик и 18 извлечённых фактов. Релевантность побеждает хронологию: 1.5B-модель работает лучше, когда получает три обмен репликами, которые отвечают на текущий вопрос, а не восемь произвольных недавних реплик и стену текста. Если факт отсутствует, промпт заставляет персонажа признать пробел, а не фабриковать память.
Инференс работает локально через llama.cpp, без внешних API. Игра предпочитает постоянный процесс llama-server, который разогревается при старте и общается через loopback-порт. Контекст намеренно маленький — от 1024 до 1536 токенов в зависимости от платформы. На тестовой машине 2018 года (Intel Core i7-8750H, 16 ГБ RAM) генерация идёт со скоростью 14 токенов в секунду.
Главный вывод автора: сгенерированный диалог не может заменить authored-структуру. Персонаж может отвечать блестяще, но если игрок не понимает терминал, не может найти улики или не видит, как контракты связаны между собой, системе не с чем работать. Модель заполняет негативное пространство. Она не несёт конструктивную нагрузку.
Источник: Hacker News - Newest: ""AI" "LLM""