Эксперименты с ролеплейным ИИ, ч.2. Как устроены мозги NPC в SkyrimNet. ai.. ai. npc.. ai. npc. skyrim.. ai. npc. skyrim. skyrimnet.. ai. npc. skyrim. skyrimnet. геймдев.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли. ИИ.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли. ИИ. ии и машинное обучение.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли. ИИ. ии и машинное обучение. ии-модель.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли. ИИ. ии и машинное обучение. ии-модель. искусственный интеллект.. ai. npc. skyrim. skyrimnet. геймдев. геймдизайн. дизайн игр. Игры и игровые консоли. ИИ. ии и машинное обучение. ии-модель. искусственный интеллект. Разработка игр.

Ранее я написал обширную статью про попытки сделать разговоры с NPC SkyrimNet более живыми, но упустил главное… Не рассказал, как вообще устроен NPC изнутри. Что происходит, когда вы дописываете реплику от лица своего персонажа и нажимаете Enter?

Примерная структура запроса к LLM в SkyrimNet
Примерная структура запроса к LLM в SkyrimNet

А происходит вот что: в диалоговую нейронку отправляется километровый запрос. Для каждой новой реплики он формируется заново целиком. Но, всем продвинутым пользователям LLM-ок это и так очевидно.

Память

Самая важная часть пакета – память NPC. У неё 3 слоя:

1. Краткосрочная. Нейронке отправляется последние N событий из лога, по умолчанию N = 50.

17:10 – Снорри съел батон
17:11 – Стражник сцепился с волком
17:12 – Снорри кричит: “Бей по глазам!”
17:15 – Стражник убил волка, с волка можно взять шкуру и рубин

2. Долгосрочная – воспоминания. Это может быть и 1 абзац с фактами, и 15 абзацев с рефлексией (дневник). Что-то ненужное может вообще сюда не записаться.

Снорри: “Стражник сегодня дрался с волком у ворот. Сделал за меня всю работу, а я потом собрал с волка шкуру и рубин”.

В input улетают только M самых релевантных воспоминаний. По умолчанию M = 5.

Для нас интересно, что воспоминание маркируется эмоцией (нейтральный, радость, триумф, печаль, гнев…) и важностью от 0.00 до 1.00.

Эмоции иногда генерируются весёлые

Эмоции иногда генерируются весёлые

Ровно из-за этого слоя я страдал в предыдущей статье. Высшую важность 0.90-0.95 всегда получала TRAUMA, из-за этого в любом обращении к LLM поднималось вопоминание о травме, и через 100+ часов игры я оказался в толпе ПТСР-нутых.

Техническая инфо Для решения этой проблемы в SkyrimNet добавили Decay. Насколько я понимаю, он снижает вероятность того, что давнее воспоминание упакуется в input, в то время как я бы сделал постепенную деградацию самой переменной importance_score (importance_score(t) = importance_score(0) *f(Δt))

3. Вечная – биография. Всегда отправляется в input целиком и содержит:

  • Summary – сжатое описание NPC.

  • Interject_summary – любимые темы для беседы. Именно сюда я пытался добавлять списки, чтобы сделать болтовню NPC живее и разнообразнее. Проблема в том, что эти темы больше влияют на то, вступит ли NPC в уже идущий разговор.

  • Background – история жизни.

  • Personality – психология: характер, реакции, отношение к миру и людям и т.д..

  • Appearance – внешность.

  • Aspirations – жизненные цели. По опыту, крайне влияет на суть реплик NPC.

  • Relationships – кому ты друг, враг, родственник, союзник, возлюбленный. 

  • Occupation – социальная роль.

  • Skills – очевидно, навыки. Не связано с реально прокачиваемыми навыками в игре.

  • Speech_style – влияет скорее на форму реплики, чем смысл: длина фраз, формальность.

Биография может быть обычная или динамическая – постепенно изменяемая по ходу событий.

***
В этот же блок, “мозги NPC”, запишем статусы, висящие на самом NPC (не хватает маны, ранен и др) и сухие параметры (раса, пол, фракция…).

Но это не всё!
В пакете на input есть ещё несколько компонентов:

Окружение

Это сухие данные из самой игры: погода, время суток, имя локации, кто ещё из NPC присутствует, какие статусы висят на них.
Также каждые X секунд снимается скриншот, описывается отдельной нейронкой и сохраняется. Так NPC может узнать, что мы не просто возле башни Олафа Всратого, а то, что вокруг лежит снег, на небе северное сияние, а сама башня полуразвалившаяся.

Эксперименты с ролеплейным ИИ, ч.2. Как устроены мозги NPC в SkyrimNet - 3

World Knowledge

Факты о мире, которые должны знать NPC. Игрок может сам писать канон:
“Империя победила в гражданской войне, это знают все”
“Персонаж игрока – легат, солдаты и стражники знают его в лицо”

Есть сабмоды, посвящённые таким блокам знаний. На скрине - такой сабмод с инфой про Коллегию Магов

Есть сабмоды, посвящённые таким блокам знаний. На скрине – такой сабмод с инфой про Коллегию Магов

Метаинструкции и гайдлайны

Эксперименты с ролеплейным ИИ, ч.2. Как устроены мозги NPC в SkyrimNet - 5

Благодаря десяткам промптов, нейронка знает, как обрабатывать всю ту бадягу выше. Ещё есть промпты для сабмодулей: обработка сплетен, инвентаря, торговли…

Поэтому, В ТЕОРИИ, нейро-NPC знает, что у неё в инвентаре. НА ПРАКТИКЕ, как мы знаем, спутница однажды решила, что голодна и записала это в динамическую био; из-за этого начала постоянно ущемляться и в итоге уволилась – хотя её рюкзак был полным еды. Теперь я всем спутникам пишу в био, что они не чувствуют голод и холод :D

А в roleplay_guidelines.prompt скопились нынче все мои боли (“не морализаторствуй”, “не философствуй пустыми абстракциями” и др). Прислушавшись к MountainGoat, я написал сюда, что нейронка теперь Квентин Тарантино, режиссирующий сцену в мире TES. Но, это мало что изменило. Возможно, строки гайдлайна просто теряются как незначимый факт в том массивном инпуте, что обрабатывает LLM. Мб поможет дописать в этом файле: “EXTREMAL PRIORITY!!!”.

Особенности самой LLM

Ещё один неочевидный слой – это то, что система не запаковала в input, но в нейромозгах это всё равно всплывёт, к лучшему или к худшему.

4.1. Инфо из поисковика

Спросите любого NPC об условном Совнгарде – местной Вальгалле. В базе знаний (World Knowledge) информации о Совнгарде нет, но ИИ-батрак сам сходит в поисковик, найдёт инфо и зафиналит реплику.

Белетор поясняет за Совнгард. А вот NPC-ребёнок мне ответил, что не знает, что это такое, круто!

Белетор поясняет за Совнгард. А вот NPC-ребёнок мне ответил, что не знает, что это такое, круто!

Здесь бывают моменты лажи. Нейронка может неверно истолковать какой-то узкий лорный момент. Так, я сказал “Мазкен” (имя редкой расы), а NPC-собеседник решил, что это чьё-то личное имя.

С другой стороны, спросите любого NPC, что он думает о патче KDE2 под FreeBSD – и хотя нейронка тоже может это нагуглить, она останется в роли средневекового персонажа.

Эксперименты с ролеплейным ИИ, ч.2. Как устроены мозги NPC в SkyrimNet - 7

4.2. Инфо, зашитая в веса

Нейронки обучались на массивах информации из этих ваших интернетов. Поэтому, если там главенствует какой-то стереотип, то LLM впитала его при обучении. Пример такого семантического стереотипа:

дети = говорят мудрые вещи + всегда невинные + уязвимая группа + о них следует заботиться

Два NPC с диаметрально разными характерами сказали, что 9-летний ребёнок не может манипулировать :) При этом вам любой родитель скажет, что дети манипулируют с 3-4 лет. Даже если у вас в отыгрыше дьявольское дитя а-ля Omen, NPC-взрослые будут стремиться выгораживать его и защищать. Забавно наблюдать, как одна и та же нейронка издевается над окружающими от лица NPC-ребёнка и одновременно отрицает эти издевательства от лица NPC-взрослых.

А персонаж с замашками психопата, услышав банальную фразу от ребёнка, умилительно запишет в дневник: “Мой ребёнок мудрее меня! Вспоминаю, как он сегодня сказал мне Х, и слушаю его дыхание за стеной…” 
“Слушать дыхание” – это какое-то неизлечимое клише и у дипсика, и у минимакса. Ещё больше они обожают только “мои пальцы дрожали” и “правду”.

Ещё забавное следствие семантических стереотипов: одна NPC больше ужаснулась персонажу – завязавшему (!) наркоману, чем персонажу-каннибалу. Самостоятельно попробуйте объяснить, почему.

Эксперименты с ролеплейным ИИ, ч.2. Как устроены мозги NPC в SkyrimNet - 8

***
Нельзя сказать, что любой NPC в ИИ-ролеплее – это как человек с амнезией, который знает о себе 2-3 факта. Он имеет кучу фактов о себе и окружении, может обратиться к базе знаний всея интернетов, чтобы получить факты о мире, в котором живёт. Кто сейчас король? Какие боги есть в этом мире? Что за животные бывают в том лесу? Какие национальные блюда есть у нордов?

Проблема только в том, что пока вы ёжика не пнёте, он к этим фактам не полетит. И никогда не выдаст иммерсивное: “А вот при короле Торуге жилось лучше”, если в его био прямо не сказано: “интересуется политикой” И “одобряет короля Торуга”.

Пищей для развития нейро-персонажа может стать реплика игрока, жёсткое событие в логе (как чья-то смерть), хардкод (например, когда NPC-друг узнаёт слух об игроке и отправляется его искать), но не какой-то внутренний инсайт, импульс. Как если бы вы были окружены людьми с нулевой агентностью.

PS. Пока что я продолжаю развлекаться с параметрами модели, набирая материал для новой статьи. Хочется, чтоб выводы были не поверхностные, поэтому занимает время.

Вот эти параметры я кручу

Вот эти параметры я кручу

PPS. У меня есть роман аж 2018 года на тему ИИ в РПГ-играх. Забавный факт: в 2019-м рецензент написал, что таким мощностям для ИИ взяться некуда, а потому “не верю, отторжение, и КПД текста резко падает”. Ну что, кто смеётся последним в 2026-м? :D

Аудиоверсия на Литрес | Аудиоверсия на АТ | Текстовая версия на АТ

Автор: VMarkell

Источник