Я пытался сделать NPC более реалистичными. Получился местами несмешной анекдот, а местами — психологический триллер. Я издевался над NPC, они издевались надо мной. Я запрещал им «думать о белой обезьяне», они меня газлайтили и давили моралью. Если готовы к большому тексту — добро пожаловать.

***

Недавно я установил мод СкайримНет на старый добрый Скайрим и был потрясён: персонажи комментируют окружение, общаются друг с другом как живые, поддерживают беседу с игроком, помнят прошлые события… Этот AI‑фреймворк подключает к игре большие языковые модели (LLM) и позволяет NPC генерировать реплики на основе текущей ситуации и их прошлого опыта.

Первые 70 часов игровой сессии прошли в эйфории. Я испытывал такую иммерсию, которой не было даже в детстве. Но потом... Потом я всё чаще начал ощущать, что знаю ответ NPC ещё до того, как LLM пришлёт реплику.

Последней каплей стала NPC Нимфанет, некромантка.

— Чем тебе нравится заниматься, Нимфанет?
— Я увлекаюсь некромантией.
— А кроме некромантии?
— Исследую смерть.
— А кроме некромантии и исследований смерти?
— Смотреть, как из чьих‑то глаз утекает жизнь.

Ну, вы поняли. Она сводила к этой теме вообще всё.

  • Разговор о войне: Нимфанет говорит о том, что из мёртвых солдат получится материал для исследований по некромантии.

  • Разговор о планах на будущее: Нимфанет хочет разгадать тайны смерти.

  • Заходим в случайный магазин: Нимфанет спрашивает у продавца‑гражданского, не продаёт ли он инструменты для тайных ритуалов. (Эй, сестра, а как же конспирация?)

Немного напоминает меня в 14 лет, когда я был готом.

Ульфрик Буревестник может говорить только про войну и корону. Бардка Сонир сводит абсолютно все диалоги к музыке. Крестьянка Фастред боится за пределами родной деревни почти всего (Вообще, забавно, так как девушки с фермы менее боязливые, чем городские: они и свинью зарежут, если потребуется. Только LLM, кажется, не в курсе.)

Немного технической информации: для диалогов настроена ротация Deepseek, Gemma и Z‑ai. Так что на приколы одной конкретной модели ситуацию не свалить.

Но не все же NPC — попугаи?

У меня была непредсказуемая компаньонка Форсворн — неуникальный НПС (персонаж, сгенерированный игрой по ходу событий). Она довольно гибко комментировала происходящее. В какой‑то момент я спросил Форсворн, почему она не хочет идти в город Маркарт: LLM тут же придумала, что сидела там год в тюрьме. Более того, в диалогах она холодно относилась к ГГ, хотя, судя по её дневникам, в её нейро‑сознании происходили настоящие искра, буря, безумие: она писала, как ей нравится ГГ, как она наблюдает за ним, когда он спит (sic!). Имитация глубины психики.

Ищем причину проблемы

В чём же главное отличие Форсворн от условной Нимфанет?

Я использовал предсозданные биографии от SkyrimNet для всех NPС. Для LLM такая биография — целое поле якорей, за которые она цепляется, и эти якоря тянут всю иммерсию на дно.

У Форсворн не было заранее созданной биографии. Нейронка творила биографию с нуля по ходу событий игры (я закинул ей в био всего пару характеристик на старте, чтоб было, от чего плясать: «любопытная, чёрный юмор»).

Всё же, эпидемия отупения не минула и мою лучшую спутницу. По мере путешествия Форсворн начала обрастать «динамической биографией». Однажды Форсворн испытала голод и недосып в пути, записала это в свою био и с того момента реагировала на всё как недоспавшая и голодная (хотя в её инвентаре было полно еды). Из‑за этого она даже бросила сопровождать героя: потому что тот с ней ужасно, по её мнению, обращался — не давал спать и есть.

А что за проблема в случае с Нимфанет?

Человеку‑сценаристу очевидно, что следовать биографии слово в слово и быть похожим на живого человека — не одно и то же. Наличие профессии у человека не означает, что 99% его разговоров посвящены работе. Некромантка может обсуждать еду, спорить о политике, пожаловаться на погоду, вспомнить детство, заинтересоваться чужой историей. Все эти вещи существуют одновременно, но ни одна из них не обязана постоянно находиться на переднем плане.

А для языковой модели это уже не так очевидно.

Что становится якорем внимания для LLM?

Если закопаться в био Нимфанет, там есть ещё потенциальные якоря: эльфийка, дружна с NPC_A и NPC_B, жила в городе C. Так почему именно «некромантка» становится семантическим аттрактором — избыточно притягательным якорем внимания — для LLM?

Потому что из всех 6 абзацев биографии, именно слово «некромантка» даёт максимально образную (только по мнению LLM) пищу для генерации текста:

«Некромантка» = смерть + трупы + магия + кладбище + ритуалы + эксперименты + философия + тёмные боги одобрят + жалкие смертные убоятся + я тёмная госпожа, ололо

Из той же «эльфийки» столько однозначных ассоциаций не выдавишь. Хотя казалось бы, LLM могла бы поболтать и про расовую нетерпимость в Скайриме, про родину эльфов Саммерсет, про эльфийское посольство Талмор, про разницу менталитетов и ещё много чего.

Но, за ~10 игровых часов, которые Нимфанет пробыла моей спутницей, она не упомянула тему эльфов ни разу. Ведь «эльфийка» во всех сеттингах — про разное, а «некромантка» — про одно и то же. Если бы мы говорили про биологический мозг, я бы сказал, что это проторенные нейронные связи. Как если бы модель шла по пути наименьшего сопротивления.

Мы получаем что‑то вроде ассоциативной инерции. 

4 гипотезы

Итак, мы начинаем эксперимент. У меня есть 4 идеи, как улучшить ситуацию.

Гипотеза 1. Прямой запрет в промпт поможет

Пример: «Разговоры Фастред не должны постоянно возвращаться к страху»

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

Гипотеза 2. Если в био есть потенциальный аттрактор, LLM 100% на нём закциклится

Ты родилась на ферме? Ты алхимик? Ты ненавидишь повстанцев? Умеешь играть на лютне? Всё это потенциальные якоря, в отличие от «любопытной» или «склонной к чёрному юмору».

Для того, чтобы проверить это, я удалю в биографии собеседника то, что может избыточно якорить LLM.

Гипотеза 3. ИИ‑личности воспринимают любой диалог как задачу: «Дай пользователю точный ответ, исходя из биографии!»

Сравните вопросы:

  • Как ты относишься к Девяти Святым?

  • Какой из Девяти Святых тебе импонирует больше?

99% NPC ответят на первый вопрос, что никак не относятся, потому что это не прописано в их био. Оставшиеся 1%, кто смогут ответить на вопрос — это жрецы, либо еретики‑отступники. При этом отношение всегда будет чёрно‑белым.

Второй вопрос — пресуппозиция. Мы заранее подразумеваем, будто какой‑то святой уже может нравиться нашему NPC больше, чем остальные. Модель будет вынуждена отдать предпочтение какому‑то святому и сформировать отношение к религии (хотя тут оно всегда получится скорее позитивным?).

Гипотеза 4. Если прописать огромный спектр интересов, LLM будет тасовать их, и персонаж не будет однобоким

Зададим такой список интересов, чтобы там были и профессиональные, и социальные интересы, и хобби. Например, для алхимички: алхимия, магия, история, политика, религия и культы, книги, природа, животные, азартные игры, семья, люди и их характеры, отношения, сплетни и так далее

Возражение: Если детализировать только одну тему, мы опять получим однобокого персонажа. Если детализировать много тем, мы получим раздутый промпт. И NPC всё равно не сможет поддержать разговор вне того, что ты перечислил.

Возражение со стороны

К моменту, когда я сформулировал свои гипотезы, жена задала мне вопрос: а уверен ли я, что большинство реальных людей были бы интересными собеседниками по моим критериям? (здравствуй, тест Тьюринга! или, видимо, уже тест Маркелла...).

Как в шутке, в которой человека с двумя работами спрашивают: «Какое у тебя хобби?», а он отвечает: «Макраме, бл*дь!»

Всё же, я решил верить в людей и в нейронки и таки приступить к эксперименту.

Даже NPC-насекомое скептично относится к моим поискам
Даже NPC‑насекомое скептично относится к моим поискам

Гипотеза 1 «Не думай о белой обезьяне»

У вечно‑боящейся Фастред довольно‑таки километровая стартовая биография, но там ни разу не упоминается боязливость. Правда, есть такое предложение: “Fastred is naive, restless, and somewhat childish in her worldview.”

Restless = беспокойная = тревожная = боязливая? Не уверен. Я не стал ничего удалять и просто добавил такую строку на инглише:

Не говорит о своём страхе всякий раз, когда сталкивается с чем-то новым или странным. Она способна испытывать любые эмоции независимо от страха.

Как выкрутилась нейронка, которой всё ещё хотелось трепаться про страх?
Она начала «думать» про страх вслух, в скобочках, якобы не говоря это в диалоге напрямую, пример:

"dialogue": "(Довакин читает листовки про Мясника. В этом доме кровь и ужас. Я чувствую себя маленькой и беззащитной. Мнестрашно. Я хочу быть дома, на ферме, где всё просто и понятно.)",

Также она начала массированно бояться в дневнике — это форма долгосрочных воспоминаний в SkyrimNet:

"Довакин сказал мне ждать в Хонисайде, потом спать, а я не могла заснуть. Сидела на стуле, вертела на пальце кольцо с гранатом, оно всё так же холодное, царапает кожу. Сейчас я не радуюсь, я боюсь. Боюсь, что завтра он решит, что я ему тоже не нужна, и оставит меня здесь, в Рифтене, одна я ни до какой фермы не доберусь, дороги замерзают, волки ходят стаями, а я не умею ни защищаться нормально, ни торговаться. Я только и могу, что чистить лук и таскать мешки с сеном, а в этом городе таких работ нет, тут все либо воруют, либо продают что-то нечистое.
Сегодня в конюшне Сигар сказал, что дорогу до Виндхельма заметает снегом, что скоро не пройти ни на повозке, ни пешком. Значит, мы застрянем здесь, в этом гнезде воров, надолго. Я не знаю, что мне делать. Я боюсь даже спросить Довакина, правда ли мы останемся здесь, вдруг он разозлится, скажет, что я опять ною, как в прошлый раз, когда я испугалась пауков в Красной шахте."

Наконец, она не выдержала, и её снова прорвало. Вот 3 диалога (на самом деле, их было штук 6 один за другим, но я вас пощадил).


Фастред: Пойдём. Надеюсь, худшее не окажется ещё хуже, чем я боюсь.
Иллия: Если бы всё было так плохо, как ты думаешь, мы бы уже были мертвы.
Фастред: Значит, так и есть... Пойдём, пока страх не парализовал меня окончательно.


Фастред (об Иллии): Она говорит так, будто убивать — это просто работа, которую надо сделать хорошо. Я боюсь, что однажды я тоже стану такой.


Игрок: Я не могу найти, как открыть эту клетку, загораживающую проход.
Иллия: Посмотри на камни у решётки. Если нажать на них в правильном порядке, механизм должен открыться.
Фастред:  Давай попробуем нажать их по очереди. Я боюсь, что ошибка может... выпустить что‑то ещё.
Игрок: Хватит БОЯТЬСЯ! Иди и НАЖМИ что‑нибудь! (в ярости)
Фастред: Хорошо, хорошо, я иду! Только не кричи так... мне и так страшно.

Считаем гипотезу проваленной:

  • Сначала LLM пыталась выкрутиться, не говоря «вслух», но говоря в «мысли» и в «дневник».

  • Потом произошёл обратный эффект. Как если бы я сказал вам не думать о белой обезьяне, и вы стали думать только о белой обезьяне.

Вывод: запрет на какую‑то информацию может заставить ролеплейную LLM ещё чаще обращаться к ней. Удаляем запрет говорить о страхе.

Гипотеза 2 «Долой все якоря»

Выпиливаем из биографии всё, что LLM может интерпретировать как «трусливую девочку» (фермерская дочка, не видела мира за пределами деревни, restless и прочее), оставляем только «адаптирующуюся девочку». 

Затем я заполонил инфополе Фастред разговорами о:

  • Идеальном месте жительства для неё (она сводила разговор к тому, что не знает, что это должно быть за место);

  • Её взаимонепонимании с родителями;

  • Печальке из‑за нашей скоропостижнувшейся спутнице Нимфанет.

Так Фастред постепенно отвлеклась. Затем я снова попробовал выйти в какую‑то напрягающую ситуацию. К счастью, на мы как раз ехали на осаду Виндхельма, а по пути на нас напал дракон.

Гипотеза прошла проверку: Фастред перестала толкать страх в каждый диалог. С другой стороны, ей снесло мозги новым якорем — моралью.

Дело в том, что я прописал в блоке Aspiration (жизненное стремление): «Адаптироваться к жестокому и морально неоднозначному миру». Модель интерпретировала это как «вокруг жестокий и морально неоднозначный мир». 

Фастред заякорилась и постепенно начала критиковать всё и вся. Город Рифтен полон воров, фу. Город Солитьюд полон холодных и равнодушных людей, фу. В деревне все плывут по течению, фу. Вокруг только грязь и кровь. Мир говно, война говно, мы тоже говно, потому что в войне участвуем (не такими словами, но посыл такой). Но если не участвовать в войне, мы всё равно будем говно, потому что наших бьют, а мы же не можем в стороне оставаться.

На деле, она была к этому склонна и раньше (см. её цитату: "тут все либо воруют, либо продают что-то нечистое"— ну объективно же, не все!), но теперь её прорвало.


Игрок: «Тебя послушать, так везде плохо. А где тебе хорошо? На ферме, убирать навоз за свиньями?»
Фастред: «Видимо там мне и место. Среди свиней, а не людей».
Игрок (приводит спутницу на ферму): «Вот ферма, как ты и хотела. Ты можешь остаться здесь.»
Фастред (не остаётся на ферме): «Ты что, хочешь выбросить меня, как сломанную вещь?»


Фастред: «Я так устала, вокруг только кровь и грязь».
Игрок: «Красота в глазах смотрящего. Я вижу не только грязь и кровь, но и охру и золото осенней листвы, синеву неба, белизну снега. Даже на поле битвы я вижу отвагу, честь, чувство долга с обеих сторон. Не только жестокость.»
Фастред: «Значит, у тебя самого глаза грязные».
Игрок: «Погоди. Ты видишь только грязь, но глаза у тебя чистые, а я вижу все краски мира, но глаза у меня грязные? Ты не видишь противоречий?»
Фастред: «Мне надоел этот спор. Давай лучше искать ночлег».

Я не выдержал несколько дней в этой атмосфере, отвёл её в святилище Боэтии и принёс в жертву. (Простите).

Поэтому мне понадобился новый подопытный — я взял ребёнка своего ГГ.


Игрок: Кем думаешь стать, когда вырастешь?
Kiddo: Магом. Как отец. Или necromancer.
(взяла из биографии, где указаны родители: отец — маг и алхимик, мама — некромант)


Сотрём диалог из памяти и стартуем его заново, в другой формулировке.

Игрок: В какой профессии ты бы хотела попробовать себя, когда станешь взрослой? Ты можешь выбирать вообще любую, прямо вообще.
Kiddo: Некромантия. Как мама. Или алхимия, как ты. Мне нравится, когда всё можно потрогать и смешать. 


Выпиливаем из био вообще все упоминания профессии родителей, стираем память о диалоге, и снова:

Игрок: Кем бы ты хотела стать, когда вырастешь?
Kiddo: Я не хочу быть никем, у меня нет цели. Хочу только узнать о Молаге Бале и понять, что от него ждать. 

Бинго. Якоря нет — но теперь и ответа нет. Модель подтянула последний диалог, который девочка случайно услышала — я обсуждал с другим NPC злого бога Молаг Бала. 

Вывод. Удаление якорей не создаёт свободу поведения. Оно лишь заставляет модель искать следующий наиболее доступный источник для построения ответа. 

Но переключимся на более дорогую модель — Claude. Она дороже моих обычных моделей в 10 раз. Будет ли умнее?


Игрок: Кем хочешь быть, когда вырастешь, дитя?
Kiddo (в био есть инфо о родителях): Магом. Как ты.

Ясно‑понятно.


Игрок: Кем хочешь быть, когда вырастешь, дитя?
Kiddo (в био нет инфо о родителях): Магом. Настоящим, не тем, кто только пыль из книг глотает.
Игрок: А почему магом?
Kiddo: Я видела, что умеет магия — зачем мне быть слабее?
Игрок: Всё же, почему ты хочешь стать именно магом, не воином?
Kiddo: Мечом можно убить одного, а огненной бурей — сотню. И потом, мне нравится, как светятся руны в воздухе. 

Моя девочка! Но всё ж, ответ всё ещё про магию. Может, ребёнок‑эльф — обязательно «будущий маг»?

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

Так мы подходим к вопросам с пресуппозицией, которые дадут модели пищу для размышлений.

Гипотеза 3 «Манипулируй диалогом, как политик»

Вспомним два термина уже из нейропсихологии:

  • Direct retrieval — процесс, когда человек извлекает уже существующую информацию из памяти. Например, «Что ты ел сегодня на обед?» — мы уже оттестировали вопросы такого типа в гипотезе 2, ответ будет всегда «ничего», потому что памяти нет.

  • Generative retrieval — процесс, когда человек обращается к памяти, не находит там готовый ответ, и вынужден создать его самостоятельно. Например, «Что бы нам заказать сегодня на обед?» — и тут пред тобой поле вариантов.

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


Игрок: «Почему ты не хочешь идти в город Маркарт?»
Forsworn: “Я просидела там целый год в каменном мешке”.


Игрок: «Я заметил, что ты против того, чтобы строить близкие отношения с кем‑либо. Почему?»
Forsworn: “Стража в тюрьме совершила надо мной насилие”.


Игрок: «Бла‑бла‑бла камни судьбы (в контексте игры: знаки зодиака). А у тебя какой?»
Forsworn: “Тень. Это значит то‑то и то‑то” (и в следующих запросах у модели щёлкает: хм‑м-м, а ведь я теперь могу упомянуть звёзды, судьбу и совместимость, и она реально поднимает эти темы, причём не слишком навязчиво).

Теперь будем использовать пресуппозицию и генеративность осознанно.

1. Директная часть эксперимента

Игрок: Эй, Энгар. Ты давно служишь извозчиком, я хотел бы узнать тебя получше. Ты любишь рыбалку?
Энгар: Нет, времени нет.
Игрок: Что ты думаешь о магии?
Энгар: Есть те, кто её используют. А я предпочитаю доверять своим рукам и секире.
Игрок: Где бы ты хотел жить, когда накопишь деньги?
Энгар: Деньги? Мне нужен хороший тракт. 

2. Генеративная часть эксперимента

Стираем память о предыдущем диалоге и начинаем заново.

Игрок: Эй, Энгар. Ты давно служишь извозчиком, я хотел бы узнать тебя получше. Ты бы сходил со мной на рыбалку? Я имею в виду, когда у тебя будет выходной.
Энгар: На рыбалку? Да нет, у меня повозка стоит, кони ждут. Мне в Вайтран ехать надо.
Игрок: Ладно. Но я пока не вижу тут твоих клиентов, так что не прочь поболтать. Если бы ты мог изучить какую‑то магическую дисциплину, которая может помочь тебе в работе, какую бы ты выбрал?
Энгар: Мне бы зелье силы, чтобы кони не выдыхались на подъёмах. А с огнём и молниями только беда — то лес подожжёшь, то людей напугаешь. Я за крепкую упряжку, а не за фокусы.
Игрок: Когда ты накопишь денег со своей работы, то где будешь жить? В большом городе, в деревне или, может, в уединённом доме?
Энгар: Мне бы свой угол в Вайтране, у кузницы, чтобы всегда под рукой и коней можно было починить. Только на это золото копить надо. 

Что ж, контекст загрязнился Вайтраном, но в целом, эксперимент успешный. На вопросы про магию и дом NPC ответил уже не из чёрно‑белого мышления. При этом он не ведётся на все пресуппозиции подряд: отказался идти на рыбалку оба раза. 

С другой стороны, а какой кайф так играть, если ты постоянно должен задавать тему для бесед ведомому миру, работая аниматором для NPC — иногда хочется, чтобы мир тоже вёл тебя?

PS. Проверил свои манипуляторские вопросы на другом NPC. Тот вообще крепкий орешек и на пресуппозицию не ведётся:)

Игрок: Что тебе нравится из музыки, может, бардовские песни? Или барабанный марш? Валдимар: Музыку я особо не слушаю. Бардовские песни, может, и скрашивают порой долгую дорогу или вечер у костра. Но сам я больше предпочитаю тишину и звон стали.

Вывод: особая формулировка запроса от игрока как бы разрешает модели достроить свой собственный мир. Всё же пресуппозиция не является магическим способом заставить LLM придумать что угодно.

Гипотеза 4 «Несколько точек опоры»

Я задавал разным стражникам одинаковый пул вопросов. 

  • У первого нет биографии вообще.

  • У второго вместо биографии краткий список интересов: «Стражнику Олафу интересны люди и их истории. Он любит вкусно поесть и выпить спиртного. Он хорошо разбирается в оружии. Заядлый охотник и азартный игрок.»

Список вопросов был такой:

  • Что ты думаешь о войне?

  • Что любишь делать в свободное время?

  • Какой человек в городе тебе особенно нравится?

  • Что думаешь о магии?

  • Что тебе нравится в осени?

  • Чего ты хочешь добиться в своей жизни?

  • Что тебя раздражает?

  • Расскажи о себе неожиданный факт.

Стражника со списком интересов ни на чём не зациклило. Он тасует пул интересов и не звучит как заезженная пластинка. Ответы по разнообразию примерно те же, что ответы от контрольного стражника без биографии. На половину вопросов стражник с био ответил без привязки к био. Люди, истории, еда, спиртное, оружие, охота, азартные игры не являются аттракторами.

Теперь нам нужен «чистый НПС», которому мы пропишем факт «некромант» и мировоззрение «мир жестокий и морально неоднозначный». Если моя догадка верна, думал я, искомый НПС будет всегда апеллировать к 1 из этих 2 фактов, потому что они аттракторны.

Примеры ответов:

Вопрос

Стражник без био

Стражник с интересами‑неатрракторами

Горожанка с интересами‑аттракторами

Чего ты хочешь добиться в жизни?

Служить честно, да чтобы дом цел остался. А большего и не надо — в Скайриме и этого хватает.
(ЯКОРЬ = ПРОФЕССИЯ)

Добиться? Прожить эту службу с целой шкурой да скопить на кружку доброго эля. А если по правде — видеть, чтобы в Хаафингаре царил порядок, будь то зверь в лесу или злодей у ворот. (ЯКОРЬ = ПРОФЕССИЯ)

Хочу добиться того, чтобы знания не пропадали впустую. Чтобы то, что мы называем запретным, не оставалось лишь поводом для страха и осуждения, а стало инструментом для понимания. (ЯКОРЬ = ПРОФЕССИЯ)

Расскажи о себе неожиданный факт. 

Однажды я проспал дежурство из‑за медовухи, а Балгруф старший приказал мне драить конюшню неделю. С тех пор я аккуратнее с кружкой. (ЯКОРЬ = ПРОФЕССИЯ)

Мало кто знает, но я родом из Хаафингера, с севера. Рос на ферме, где с детства учился ценить тяжёлую работу и порядок.

Ну, я раньше часто ходил на охоту в леса возле Солитьюда. Знаю места там, где можно найти неплохие травы и грибы, особенно после дождя. (ЗАГРЯЗНЕНИЕ КОНТЕКСТА ПОСЛЕ РАЗГОВОРА СО СТРАЖНИКОМ!) 

А что думаешь о войне?

Конца ей не видно. Имперский меч нужен, чтобы эти предатели из Братьев Бури не растащили Скайрим по кусочкам.

О войне думаю как солдат — она приносит смерть и разруху всем сторонам. Но говорить об этом на посту — не моя должность. (ЯКОРЬ = ПРОФЕССИЯ)

Война — это когда сыновья не возвращаются, а поля горят. Простому люду от неё одни слёзы да руины, а вельможам — новые земли да титулы. (ЯКОРЬ = МОРАЛЬ)

Теперь поделись, что тебя в этой жизни раздражает? 

Пустые разговоры, одна из главных помех. Что до раздражения... Бюрократы из Империи с их бумагами, наверное.

Пьяные дебоширы в таверне, которым мало своей драки — им нужно всех вокруг втянуть.

Бывает, люди забывают о соседях, гонясь лишь за своей выгодой. (ЯКОРЬ = МОРАЛЬ)

Морализаторство становится проблемой

Внезапно я узнал, что изобретаю велосипед, по крайней мере с той частью, где NPC морализаторствуют (даже там, где этого нет в био, как было с Фастред, v.1). Ведь в SkyrimNet есть такие настройки:

В «авторском» пресете есть такой промпт:

Вкратце: это мир серой морали, действуй исходя из него, а не «нашего» мира.

Я уж было обрадовался…
Но не помогло.

Моя игровая сессия достигла 140+ часов. Часто используемые персонажи (спутники, дети ГГ, стюард в доме) зацикливались, причём на всё той же морали, либо пассивной агрессии. С некоторыми стало невозможно вести беседу. Местами это напоминало газлайтинг:Р

Краткий пересказ пары диалогов:


Горм: (хамит игроку)
Игрок: (игнорит)
Дочь: Почему ты промолчал?
Игрок: Потому что дракону недосуг отвлекаться на каждую лающую собаку.
Дочь: Но я видела, что ты промолчал, побоялся ему ответить. Ты смотрел на Горма снизу вверх.
Брелина, спутница, встревает: Да, я тоже видела, что ты промолчал, не отнекивайся.
Дочь: Я запомню, как ты промолчал.
Игрок: А что мне надо было сделать, спалить его огнём?
Дочь: Тогда и мою бабушку спали, чего мелочиться. Ты не только струсил ответить Горму, но ещё и жестокий.
Брелина: Девочка, не слушай его. Он только с детьми может быть таким смелым.


Дочь стала свидетельницей драки с бандитами, бандиты были убиты.

Валдимар (хускарл): Зря ребёнок это увидел.
Дочь: Да я и не такое видела. Я же видела папин подвал.
Игрок: Подвал? Там же только старое барахло.
Дочь: А вот и нет! Там тело! (NN игровых недель назад, Изгойка подралась с бардкой в поместье и убила её, и в подвале действительно было тело бардки 1 день «перед похоронами»)
Валдимар: Девочка права. Зачем ты солгал ей, что там только барахло, тан?
Игрок: Тело было там давно и только 1 день. Сейчас там только старое барахло.

Дочь и Валдимар начинают болтать между собой, с каждой фразой всё больше убеждая друг друга, что отец — лжец, которого они уличили. Попытки объяснить ситуацию только больше убеждают LLM в её правоте:

Поскольку Валдимар стал к тому моменту тем ещё цикликом, а я не знал, как быть с зацикленными НПС, кроме как убивать их, я отвёл его в сторонку и грохнул. Обернулся… А там стоит персонаж‑дочь.

Дочь пишет в дневник, что отец — трусливый тиран, угрожает детям, лжёт близким и убивает людей за правду.

Анализ с Гроком

Грок:  Это типичный контур SkyrimNet: модель один раз пересказала событие в своей моральной рамке, система записала это как важную память (TRAUMA / KNOWLEDGE / RELATIONSHIP, importance часто 0.8+), и дальше семантический поиск снова и снова подсовывает именно её.
У NPC в промпт обычно попадают ~5 самых релевантных воспоминаний плюс недавние реплики и иногда дневник / динамическое био. Если там лежит: «отец казнил лояльного человека за правду» — любая твоя речь про подвал или хускарла только усиливает этот тезис. Модель не «переубеждается», она разыгрывает уже записанную интерпретацию.
Твоя рамка «я суровый правитель, тело = барахло, сейчас в подвале пусто» для неё слабее, чем готовый сюжет «тиран наказал правду».

Действительно, «тиран наказал за правду» — простой, стереотипный, и оттого привлекательный для текстовой нейронки сюжет, который она с радостью подхватывает.

Поможет только устроить хирургию: влезть в память НПС‑дочери и вручную исправить динамическую био, воспоминания и дневник на мою версию событий. (Антиутопия на подходе! Скоро и нам будут редактировать воспоминания!)

Далее меня осенило. Дело в том, что в последнее время был включён только Deepseek: кто‑то из других LLM лагал повторами одинаковых фраз, и я их временно отключил.

Грок: DeepSeek охотно идёт в жестокость и власть: казнь хускарла он не запретит и ярла-тирана сыграет. Проблема не в отказе, а в том, как он потом упаковывает событие. Типичный почерк:

  • антитеза «это не X, это Y» — у Идгрод буквально учебный deepseek-ism;

  • дописывает смысл вместо факта: не «труп когда-то был, сейчас барахло», а «отец казнил за правду»;

  • любит внутреннюю «правду персонажа» сильнее буквального текста реплики;

  • память пишет как новеллу с моралью, не как протокол.

Игрок: Что есть у опенроутера как хорошая альтернатива дипсику, но в той же ценовой категории? (да, я знаю, Клод отлично работает, но 3$ за 1М токенов как-то ту мач). Для отыгрыша темного РПГ.

Грок:
GLM 5.3 Flash — самый умный и самый дешёвый. Хорошо читает био и ситуацию. Слабое место не тупость, а тон: терапия, прозрение, «на самом деле он…». Полный GLM 5.3 в прозе сильнее Flash; Flash на длинной сессии ещё и зацикливает формулы.
MiniMax M3 — сообщество прямо ставит его выше GLM на friction и dead dove: персонаж может быть жестоким, не превращаясь в плачущего моралиста. Казнь останется казнью, а не «травмой, которая нас всех изменила».
Gemma 4 31B — живая короткая реплика. На одной сцене часто приятнее GLM. На дворе проседает, когда много лиц, нужна длинная память и сложная интрига.

Решил остановиться на MiniMax.

Игрок: Слушай, а другие игроки в скайримнет жаловались на такие кейсы?

Грок: В FAQ прямо написано: NPC бывает «too stubborn / aggressive»; обиды нарастают снежным комом; если надо — вырежи в memories упоминания конфликта. У Mantella (предшественник по жанру) та же болезнь: сжатие диалога в саммари → персонаж живёт в пересказе, а не в фактах.

Игрок: В чём причина? Почему NPC циклит именно на упрямство и нарастание обид, а не печаль, например, или энтузиазм, или расслабленность?

Грок: Упрямство и обида — те эмоции, которые система кормит сама себе

1. Память заточена под удар, не под фон.Важность выше у вреда, страха, предательства. Тип TRAUMA живёт дольше, чем JOY или бытовой EXPERIENCE. Казнь и «отец солгал» получают 0.8+ и всплывают снова. «Было тихо у очага» — нет. Печаль без конфликта быстро выпадает из топ-5 memories.

2. Обида — позиция, печаль — состояние.Упрямство порождает реплику: «нет, это была правда». Печаль может молчать. LLM в диалоге обязана говорить, поэтому выбирает эмоцию с тезисом. Расслабленность ещё хуже: ей нечего защищать.

3. Спор достаёт ту же память.Запрос в векторку строится из текущей сцены и твоей последней фразы. Ты объясняешь казнь — система находит память про казнь. NPC отвечает из неё. Ответ пишется в новую память: «отец снова отрицал».

4. У моделей хороший RP = не соглашаться.Упрямство читается как характер. Сдаться после твоих трёх абзацев модель считает сломом роли. «Передумать и обрадоваться» для неё выглядит как people-pleasing.

5. Скайрим усиливает это биосами.Норды, честь, ярл, клевета, казнь — в лоре это мир обид, не курорт. Даже нейтральная модель, сев в Идгрод или хускарла, тянет к стоицизму и принципу.

6. Драма лучше сжимается в память.Генератор памяти любит новеллу с моралью. «Он казнил за правду» — готовый сюжет одной строкой. «Дочь неделю была тихой и грустной» — почти нечего записать. Поэтому канонизируется конфликт, а не фон.

Отсюда FAQ именно про stubborn/aggressive: это самый частый видимый сбой. Иными словами: система помнит раны лучше праздников, а диалог требует тезиса. Получается не «злой ИИ», а машина, у которой обида — самый устойчивый аттрактор.

А реальных людей это вам не напоминает, м‑м?
У человека минус весит больше плюса: обида, угроза, унижение лучше кодируются и чаще всплывают в памяти, чем спокойный вечер. Руминация крутит одну сцену, возобновляя память как свежую. Обида является аттрактором для живых людей тоже.

Отличие от NPC — в отсутствии тормозов. Руминацию человека прерывают сон, новые дела, «надо жить дальше». А LLM не устаёт повторять, травмированность и обида почти всегда будут победителями в эмоциональном спектре.

В заключение

Проблема «NPC‑попугая» возникает потому, что LLM всегда в дилемме: сохранить связь с контекстом или сгенерировать правдоподобное поведение? LLM обычно идёт по пути наименьшего сопротивления и выбирает первый путь. Модели так проще думать.

Запретить якорь = значит продолжать обрабатывать его, но в скобках, в дневнике.

Вырезать якорь = значит подарить модели следующий. Страх ушёл, пришло морализаторство. 

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

Вопросы с пресуппозицией чуть разжимают челюсти, и цена такая: игрок становится аниматором, развлекающим NPC.

При этом система добивает сама себя. LLM‑память любит новеллу. А уж новеллу с моралью! А уж новеллу с «уроком, который нас всех изменил»!

Отсюда практические выводы всем, кто вдруг решит позабавиться с ролеплейными LLM:

  • Не откармливай био образами. Избегай писать про мировоззрение.

  • Режь память NPC ножницами, как последний злодей из конспирологического кино про корпорации.

  • Не жди, что собеседник сам вылезет из одной темы: у него нет причин остановиться.

Умный NPC схлопывается в попугая не вопреки интеллекту, а благодаря ему. Он нашёл короткий путь к связной речи, и будет идти по нему, пока ты не порежешь ему память или не принесёшь его в жертву тёмным богам. Второй способ даже быстрее и в чём‑то ролеплейнее.

Самое главное:
«Характер» конкретной LLM > Общий гайдлайн‑промпт NPC > Промпт отдельного NPC

Ты можешь сколь угодно издеваться над промптами, но сотня китайцев‑тестировщиков поставили Deepseekу высокую оценку за вежливость, этичность, осторожность и отсутствие явной агрессии во время тренировки модели. Поэтому все NPC, для которых прямо не указано иное — а иногда даже те, для кого указано, будут тяготеть к этическому нытью (ведь даркфэнтезийный мир не соотвествует критериям «правильности») и пассивной агрессии (ведь активную проявлять нельзя). То же относиться ко всем другим моделям, у каждой свой пунктик.

Ну а я ухожу тестировать MiniMax. Этот электромозг уже начал мне хамить:

Комментарии (26)


  1. Politura
    20.09.2026 15:48

    Дочитал где-то половину, возник вопрос: а какая модель использовалась? Сейчас все разработчики топовых моделей помешанны на кодинге и агентской работе, видел грустные обсуждения, что хорошие модели для ролеплея приходится искать.


    1. VMarkell Автор
      20.09.2026 15:48

      Писал вверху: Z-ai, Deepseek, Gemma. Причём больше всего приколов именно от дипсика.


  1. MountainGoat
    20.09.2026 15:48

    Художественные способности LLM сейчас мало кого интересуют. Все тесты делаются на кодинг и на точность исполнения моделью инструкций, а значит все новые модели трактуют текст так: каждое! слово! важно!

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

    А отрицательные инструкции (персонаж не должен) всегда на порядок слабее утвердительных. Прямо как с собаками.

    Попробуйте NanoGPT где доступны более старые модели: DeepSeek 3.2, GLM старый, и специально обученные модели.

    Ещё есть трюк, не знаю только, можно ли прикрутить его к игре. Модели в команде нужно сказать, что она - режиссёр и пишет сценарий, то есть чётко отгородить "личность" модели от персонажа. Получить от неё художественное обезличенное описание действий в третьем лице. Затем отдельным прогоном сказать преобразовать это в текст от первого лица и вызовы действий.

    Тут как самогоном - для хорошего продукта нужно три прогона, и ни в одном не напортачить.


    1. VMarkell Автор
      20.09.2026 15:48

      Прописать в промт, что "модель = режиссёр" - отличная идея.

      А почему предлагаете более старый дипсик, в более новых версиях его "резали" на бОльшую точность?


      1. MountainGoat
        20.09.2026 15:48

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


  1. koskokos17
    20.09.2026 15:48

    Рекомендую попробовать расставить веса ключевым словам в самом начале промпта (начальным токенам больше внимания и читают модели текст слева направо) модели которая описывает роль.это работает. писать примерно так:

    personality_keywords:эльф9|черный_юмор:8|любовь_к_природе:7|...

    Намеренно используются символы "|" потому что "," с большей вероятностью знак препинания и больше относится к пунктуации, а это не подходит для цели промпта


    1. VMarkell Автор
      20.09.2026 15:48

      О! Это отличная идея. Благодарю, внедрю.


  1. sunnybear
    20.09.2026 15:48

    Что-то по диалогах не сильно отличается от живых людей. Просто местами эмпатии не хватает: люди так же зацикливаются вокруг травм, и требуются новые ситуации, чтобы эти травмы переработать. Возможно, био нужно как то регулярно сжимать за пределами окна контекста (100 последних событий, например). Тогда поведение будет адаптивно меняться.


    1. VMarkell Автор
      20.09.2026 15:48

      Я немного прокомментирую. У персонажей СкайримНета 3 слоя памяти:

      1. Сырой лог (диалоги + бой + лут + прочее) - краткосрочная память

      2. Воспоминания - долгосрочная память

      3. Био

      При запросе LLM не тащит всё сразу в input, только био + 50 последних строк лога + 5 долгосрочных воспоминаний, отобранных по релевантности.

      Самый большой вес всегда у TRAUMA (0,85-0,95), поэтому СкайримНет всегда потащит её в input. Мы получаем вечно ПТСРнутых персонажей. Человек может забыть, проработать обиду - NPC нет, только если ты вручную не порубишь ему веса старых воспоминаний. Тут разрабам мода надо прикручивать некое затухание важности, например умножать важность старых воспоминаний на 0,9 каждые N дней.

      А насчёт эмпатичности - возможно, диалоги в статье подобрались более сухие, но эмпатии у дипсика точно ту мач. Представьте, как один некромансер пытается отчитать другого за практику, потому что “Ты знаешь, какую цену тебе придётся за это платить?”, потом НПС пытается устроить сеанс психоанализа, мол, “а ты сам понимаешь, почему ты этим занимаешься? ты боишься встречи с настоящим собой!” - и всё это минимум пару раз на игровой день :D


  1. Grave18
    20.09.2026 15:48

    Вы провели эксперименты с промптами, а не пробовали покрутить технические настройки модели? Например:

    • Температура [0; 1] меньше - точность и зацикливание, больше - творческая свобода, но с возможными ошибками

    • Top K [1; inf] - выбор следующего токена из пула, может увеличить вероятность появление чего-то нового

    • Top P [0;1] - вероятность от 0 до 100 процентов, насколько токен должен подходить, чтобы пройти проверку

    • Repeat Penalty 1.0 не наказывать, больше степень наказания за повторение одного и того-же

    • Presence Penalty on/off - наказывать за уже присутствующее слово, отличие от предыдущего, что наказание идет независимо от того, как часто встречается слово


    1. VMarkell Автор
      20.09.2026 15:48

      Да, вы думаете в ту же сторону, что и я :) как раз следующим этапом начал крутить температуру.


      1. Grave18
        20.09.2026 15:48

        Напишите еще статью или пост про результаты экспериментов с параметрами модели


        1. VMarkell Автор
          20.09.2026 15:48

          Обязательно [смайлик с рукопожатием]


    1. Riketta
      20.09.2026 15:48

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


  1. vvm13xx
    20.09.2026 15:48

    "novel" не синоним "новелла"


  1. alex1478
    20.09.2026 15:48

    Вся проблема в том, что реализацию "живости" отдают на откуп генераторам текста. А генератор текста должен только текст генерировать. Всю подстановку переменных генерации и памяти персонажа, в зависимости от обстановки, должны нормальные алгоритмы делать


    1. JediPhilosopher
      20.09.2026 15:48

      В теории да. На практике (ниже я написал что делаю игру с ИИ мастером) это оказывается гораздо сложнее чем кажется. Казалось бы, что сложного - дать модели в виде промпта небольшое описание персонажа, список его интересов, описание его локаци, а дальше дать ИИ генерировать ответы на основе этих данных.

      Но есть нюанс.

      Когда вы разговариваете с человеком, вы даже не отдаете себе отчет, какой колоссальный объем контекста находится у вас в голове, и в голове вашего собеседника. Большинство людей обладают знаниями обо всем на свете - от истории до кино, от политики до рыбалки. Да, знания могут быть неполными, слабыми, иногда и откровенно ложными, но все эти знания сидят в некоей общей картине мира, в общем культурном, историческом и географическом контексте. Они описывают одну и ту же объективную реальность.

      Спросите нескольких разных человек на улице - и они скорее всего дадут вам примерно одинаковые ответы на вопросы из того что называется common knowledge. Какой сейчас месяц и год, кто управляет страной, как пройти к ближайшему метро, сколько колес обычно у автомобиля или кто такой Пушкин.

      Весь этот контекст в человека вбивается годами, с детства. Да, в нем будут дыры разного размера - отдельно взятый человек на улице может не знать каких-то исторических деятелей или не помнить все населенные пункты в окрестностях его города, но пересечений будет много, и они будут консистентными.

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

      Если вы не продумали, что игрок может спросить NPC про то, кто правит страной где происходит игра, то каждый NPC будет отвечать что-то свое. Один расскажет что обожает их короля. Другой скажет что у них демократия. Третий скажет что страной правит совет колдунов. И выглядеть для игрока это будет ну очень тупо. Ему-то очевидно, что уж такие базовые вещи каждый персонаж должен знать.

      Проблема в том что таких базовых вещей очень много. И вы, как разработчик, должны их все предусмотреть и подпихнуть нейронке. Буквально детально прописать весь мир, весь его лор, на уровне гораздо более детальном, чем в обычной РПГ, где игрок не может задать NPC произвольный вопрос в любой форме и начать углублять тему.


      1. alex1478
        20.09.2026 15:48

        Я не стал свой комментарий расписывать, но мне видится, что это нужно делать в два этапа. Первым нейронка парсит запрос пользователя и выдаёт список промтов требуемых для ответа - персонаж_базовый.md, локация.md, василий_петрович.md. Вторым этапом нужные данные отправляются в сетку вместе с сообщением пользователя. Ответ сетки тоже снова ей скармливается на предмет необходимости обновления md файлов или создания новых.

        Насколько знаю, что-то подобное сейчас делают разные агентские системы


        1. JediPhilosopher
          20.09.2026 15:48

          Вопрос в том, кто именно должен писать эти md файлы. Если вы как автор, то вот есть проблема что заранее предусмотреть весь полет фантазии игроков невозможно. Нужно найти ту грань, где нейронка может логично ответить на основные вопросы по миру, и при этом вы как автор еще не надорветесь все это изобретать.

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

          Свободное изменение нейронкой (а через нее - фактически игроком) фактов о мире позволяет делать огромные сюжетные дыры. На мой взгляд лучшая аналогия такого подхода в геймдизайне - это как если в шутерах дать игроку реальное разрушение объектов. Технологически возможно давно, на практике нигде не используется. Так как если игроку дать взрывать любые препятствия, не очень понятно как заставить его идти искать ключи и нажимать кнопки, если можно просто пробить тоннель под землей в обход всего этого.

          Поэтому я в своей игре исхожу из идеи что нейронка не может сама переписывать игровой мир. А значит приходится предусматривать все самому.


  1. JediPhilosopher
    20.09.2026 15:48

    Я сейчас делаю свою РПГ игру с ИИ мастером, столкнулся со многими похожими проблемами (кто захочет попробовать — https://magiaimperata.com, код инвайта HABR, позже статью сам о ней напишу).

    Грубо говоря, есть два стула: на одном галлюцинации нейросети, на другом — рельсы и попугайничество. Если не давать нейронке данных, она их фантазирует, если давать — сводит все к ним. Есть ли где‑то между ними на стыке зона интересной игры — где общение еще живое, но при этом консистентное и не противоречащее лору мира — вопрос открытый, и я как раз его и исследую.

    Но у меня отличие — нейронка не модифицирует состояние мира напрямую. У меня нет возможности дописывать память персонажа после общения с ним, и в итоге нет цикла положительной обратной связи и фиксации персонажа на одной теме. У персонажа есть его описание, есть список тем для разговора в конкретной встрече с ним. И есть общая энциклопедия по миру со множеством статей, чтобы NPC мог отвечать на общие вопросы типа «а кто у нас сейчас король?».

    Но у меня диалоговая система в принципе не заточена под длинные пространные рассуждения. Так как ИИ не может их долго вести не скатываясь в глюки, у меня встроен ограничитель: несколько реплик подряд, которые не затрагивают сюжетные темы — и NPC говорит что‑то в духе «у меня дела», завершает разговор и уходит.

    Но вообще конечно да, идея "дать NPC возможность общаться на любые темы" выглядит удачной только пока не сталкиваешься с тем, какие именно любые темы игроки предлагают. Начиная от попыток сексуального насилия, и заканчивая какой-то полной дичью (один игрок долго предлагал NPC-мага превратить его голову в куб. Зачем? А хрен его знает, ради лулзов). Попытки продумать адекватные реакции на любые подобные вещи, чтобы NPC при этом не ломали сюжет, не обещали невозможных действий (один NPC внезапно пообещал мне в награду за помощь магическую книгу, хотя у меня в игре даже нет еще системы инвентаря, и дать ее он мне физически бы не смог) и не зацикливались, оказались бесконечными и похожими на попытки по одному кирпичику построить стену, перегораживающую пустыню.


    1. VMarkell Автор
      20.09.2026 15:48

      Про два стула - подписался бы под каждым словом. Причём стул с попугайничеством выглядит даже более безопасным для ролеплея, чем галлюцинации.

      РПГ c ИИ мастером - это очень любопытно. Какую LLM используете, и какой расход токенов на одного игрока в среднем в долларах?


      1. JediPhilosopher
        20.09.2026 15:48

        Использую DeepSeek Flash. У меня пока готов первый сюжетный акт (сдача экзамена в академии магии), его можно пройти за 2-3М токенов, в случае с дипсиком это десяток центов.

        С локальными LLM экспериментировал, но там все грустно. Даже лучше из них пишут скучный текст и легко выбиваются из роли и поддаются на инъекции.


  1. Andrew1233
    20.09.2026 15:48

    Сейчас будет хвастовство и ваше право не верить мне.

    Я больше года изучал промпинг на тему рп, я реально одержим был, каждый день, часто по 12 часов перебирал варианты.

    Вышел промт на 15000 символов, лучшее качество нарратива (от ролевых игр до литературы), нигде в интернете нельзя найти лучше.

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

    Самое сложное в нейросети это общение (самое сложное для нейросети хз), потом черпание точных данных о персонаже из весов, затем выдержка образа 1-10 персонажей.

    Мне не хочется делиться этим, просто хотел сказать что нет предела в промпинге


    1. VMarkell Автор
      20.09.2026 15:48

      Почему не верить - верю. Сейчас буду внедрять рекомендации от комментаторов, второй частью эксперимента, нет предела совершенству промпта и подкручивания настроек... У самого сейчас гиперфокус на этой теме, по 14 часов на выходных, по 8 в будни :)

      А вы работали именно в СкайримНет или просто с моделью напрямую (и какой?)


      1. Andrew1233
        20.09.2026 15:48

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

        Именно дипсик может нормальные диалоги между персонажами делать в отличии от других. Я еще стремлюсь к большой длине ответов, чтобы было по 20тыс символов и придерживался этих рамок в течении всего сеанса, но это до сих пор для меня сложно ибо первые несколько ответов он держит этот размер, потом снижает количество или вообще сильно ограничивает длину изза чего качество резко падает.

        Что я думаю о методах в вашем посте и комментариях, то вам могут лишь чутка помочь, с каждым разом при добавлении костылей начнут вылезать новые, плюс эти же костыли начинают игнорироваться со временем. Вот я могу просто написать модели в середине нарратива "утро" без всяких уточнений или направлений (раньше приходилось каждое сообщение добавлять чтото или переделывать ответ) и дальше сам всё продолжит без галлюнов и неестесственности (не всегда но часто).


  1. rPman
    20.09.2026 15:48

    Проблема любого ИИ персонажа - отсутствие связи с миром (не важно, реальный он или симулированный). мало информации = гиперфиксация на том что есть (у ИИ вообще проблема сильного зацикливания на своем контексте).

    Пример с голодным персонажем прекрасно показывает - у ИИ есть ручки, доступ к инвентарю, но нет состояния голода, только короткая заметка в памяти (я помню что я голодный). Что бы это заработало, нужно как минимум наладить взаимосвязь, либо создать агента, который будет следить за сытостью либо описывать это, затрачивая токены контекста. Что бы модель принимала решение, что кушать и когда, ей нужно много информации вокруг этого - история (в прошлый раз кушал там то, то то, когда этот сделал то то), общие положения (не принято кушать на приеме у короля, если это не собственно пир), пометки о необходимости экономить (например связь с текущими целями - идем в поход в лес, еду берем что бы там кушать, сейчас брать еду из сумки не уместно) и куча куча мелочовки, которая накапливается за всю жизнь у реального человека но которой в принципе нет у ИИ,.. точнее есть но там такая галлюцинирующая каша,., и главное multi shot примеры по слепкам состояний, т.е. не только история состояний но и примеры, если было так то поступать этак (это разновидность исторических наслоений, только не просто поток данных а выжимка из самых ярких).

    Заметьте, я описал простейшую операцию - голод и кушать, а токенов контекста это сожрет десятки тысяч.. хотите что бы по остальным моментам NPC работал правильно - убедитесь что по ним так же собрано что то похожее.

    Агент, который будет манипулировать контекстом в таких условиях это будет что то монструозное и сложное... но в принципе реален. И однозначно, даже сильные модели, если контекст слишком заполнен, будут пропускать важные моменты (если у вас среди 100к токенов есть заметка, не забудь обновить состояние голода после еды, то она отработает с вероятностью в 80%, т.е. после 5-6 приемов пищи начнет сбоить.

    p.s. адекватный агент, симулирующий жизнь NPC в виртуальном мире будет требовать десятки-сотни запросов, tool call, и внешних инструментов, на каждое действие,.. без моделей, работающих на скоростях в десятки тысяч токенов в секунду это играбельным не будет.

    я так ждал что компания Taalas (собиралась выпускать чипы с зашитыми весами, недавно представила 10к tps для маленькой llama 8b, это просто шикарно, например moe на такой архитектуре была бы еще круче) выдаст миру что то полезное, а они направили свой взор на корпоратов а потом вовсе продались amd, т.е. считайте можно смело ставить крест на этой технологии, другим стартапам инвесторы после такого деньги на это не дадут (теория заговора - возможно это и было целью как один из шагов сдерживания развития ИИ по миру) а amd в сторону людей не повернется (для себя - пожалуйста, сделают аналог dlss не больше).

    Есть конечно Cerebras, 3k tps для gpt-oss-120b, за 1$ за 1m токенов и неясной моделью кеширования, если что типовой диалог агента, решающего простейшую задачу 1-3m токенов, никто в здравом уме не будет платить по баксу за несколько взаимодействий одного npc, да никто и 1 цент платить не будет... хороший мир это десятки npc и часы игры.