Комментарии 14
Дочитал где-то половину, возник вопрос: а какая модель использовалась? Сейчас все разработчики топовых моделей помешанны на кодинге и агентской работе, видел грустные обсуждения, что хорошие модели для ролеплея приходится искать.
Художественные способности LLM сейчас мало кого интересуют. Все тесты делаются на кодинг и на точность исполнения моделью инструкций, а значит все новые модели трактуют текст так: каждое! слово! важно!
Поэтому создаваемые ими персонажи сначала абсолютно послушны всем вокруг, а как только получают намёк, что это неправильно, сразу лезут в бутылку. Потому что получили инструкцию не быть послушными и тщательно её исполняют. Это настолько вбито в новые модели,
А отрицательные инструкции (персонаж не должен) всегда на порядок слабее утвердительных. Прямо как с собаками.
Попробуйте NanoGPT где доступны более старые модели: DeepSeek 3.2, GLM старый, и специально обученные модели.
Ещё есть трюк, не знаю только, можно ли прикрутить его к игре. Модели в команде нужно сказать, что она - режиссёр и пишет сценарий, то есть чётко отгородить "личность" модели от персонажа. Получить от неё художественное обезличенное описание действий в третьем лице. Затем отдельным прогоном сказать преобразовать это в текст от первого лица и вызовы действий.
Тут как самогоном - для хорошего продукта нужно три прогона, и ни в одном не напортачить.
Рекомендую попробовать расставить веса ключевым словам в самом начале промпта (начальным токенам больше внимания и читают модели текст слева направо) модели которая описывает роль.это работает. писать примерно так:
personality_keywords:эльф9|черный_юмор:8|любовь_к_природе:7|...
Намеренно используются символы "|" потому что "," с большей вероятностью знак препинания и больше относится к пунктуации, а это не подходит для цели промпта
Что-то по диалогах не сильно отличается от живых людей. Просто местами эмпатии не хватает: люди так же зацикливаются вокруг травм, и требуются новые ситуации, чтобы эти травмы переработать. Возможно, био нужно как то регулярно сжимать за пределами окна контекста (100 последних событий, например). Тогда поведение будет адаптивно меняться.
Я немного прокомментирую. У персонажей СкайримНета 3 слоя памяти:
Сырой лог (диалоги + бой + лут + прочее) - краткосрочная память
Воспоминания - долгосрочная память
Био
При запросе LLM не тащит всё сразу в input, только био + 50 последних строк лога + 5 долгосрочных воспоминаний, отобранных по релевантности.
Самый большой вес всегда у TRAUMA (0,85-0,95), поэтому СкайримНет всегда потащит её в input. Мы получаем вечно ПТСРнутых персонажей. Человек может забыть, проработать обиду - NPC нет, только если ты вручную не порубишь ему веса старых воспоминаний. Тут разрабам мода надо прикручивать некое затухание важности, например умножать важность старых воспоминаний на 0,9 каждые N дней.
А насчёт эмпатичности - возможно, диалоги в статье подобрались более сухие, но эмпатии у дипсика точно ту мач. Представьте, как один некромансер пытается отчитать другого за практику, потому что “Ты знаешь, какую цену тебе придётся за это платить?”, потом НПС пытается устроить сеанс психоанализа, мол, “а ты сам понимаешь, почему ты этим занимаешься? ты боишься встречи с настоящим собой!” - и всё это минимум пару раз на игровой день :D
Вы провели эксперименты с промптами, а не пробовали покрутить технические настройки модели? Например:
Температура [0; 1] меньше - точность и зацикливание, больше - творческая свобода, но с возможными ошибками
Top K [1; inf] - выбор следующего токена из пула, может увеличить вероятность появление чего-то нового
Top P [0;1] - вероятность от 0 до 100 процентов, насколько токен должен подходить, чтобы пройти проверку
Repeat Penalty 1.0 не наказывать, больше степень наказания за повторение одного и того-же
Presence Penalty on/off - наказывать за уже присутствующее слово, отличие от предыдущего, что наказание идет независимо от того, как часто встречается слово
"novel" не синоним "новелла"
Вся проблема в том, что реализацию "живости" отдают на откуп генераторам текста. А генератор текста должен только текст генерировать. Всю подстановку переменных генерации и памяти персонажа, в зависимости от обстановки, должны нормальные алгоритмы делать
Я сейчас делаю свою РПГ игру с ИИ мастером, столкнулся со многими похожими проблемами (кто захочет попробовать — https://magiaimperata.com, код инвайта HABR, позже статью сам о ней напишу).
Грубо говоря, есть два стула: на одном галлюцинации нейросети, на другом — рельсы и попугайничество. Если не давать нейронке данных, она их фантазирует, если давать — сводит все к ним. Есть ли где‑то между ними на стыке зона интересной игры — где общение еще живое, но при этом консистентное и не противоречащее лору мира — вопрос открытый, и я как раз его и исследую.
Но у меня отличие — нейронка не модифицирует состояние мира напрямую. У меня нет возможности дописывать память персонажа после общения с ним, и в итоге нет цикла положительной обратной связи и фиксации персонажа на одной теме. У персонажа есть его описание, есть список тем для разговора в конкретной встрече с ним. И есть общая энциклопедия по миру со множеством статей, чтобы NPC мог отвечать на общие вопросы типа «а кто у нас сейчас король?».
Но у меня диалоговая система в принципе не заточена под длинные пространные рассуждения. Так как ИИ не может их долго вести не скатываясь в глюки, у меня встроен ограничитель: несколько реплик подряд, которые не затрагивают сюжетные темы — и NPC говорит что‑то в духе «у меня дела», завершает разговор и уходит.
Но вообще конечно да, идея "дать NPC возможность общаться на любые темы" выглядит удачной только пока не сталкиваешься с тем, какие именно любые темы игроки предлагают. Начиная от попыток сексуального насилия, и заканчивая какой-то полной дичью (один игрок долго предлагал NPC-мага превратить его голову в куб. Зачем? А хрен его знает, ради лулзов). Попытки продумать адекватные реакции на любые подобные вещи, чтобы NPC при этом не ломали сюжет, не обещали невозможных действий (один NPC внезапно пообещал мне в награду за помощь магическую книгу, хотя у меня в игре даже нет еще системы инвентаря, и дать ее он мне физически бы не смог) и не зацикливались, оказались бесконечными и похожими на попытки по одному кирпичику построить стену, перегораживающую пустыню.

Почему умные NPC SkyrimNet ведут себя как попугаи? Эксперименты с ролеплейным ИИ