Перейти к содержимому


Фотография
- - - - -

Skyrim + OpenAI для неписей: установка, настройка, запуск

skyrim openai нейросети

  • Авторизуйтесь для ответа в теме

#1 Ссылка на это сообщение nihille

nihille
  • Авантюрист
  • 179 сообщений
  •    

Отправлено

UPD: в следующем посте обновы по тому же вопросу.

 

Выпросила у Хельмута инструкцию по прикручиванию нейросети к Скайриму.

Для MANTELLA v0.11. (актуальной на сегодня, так как свежая версия пока глючит) он также написал скрипт, позволяющий автоматически запускать все необходимые приблуды, а также скрипт для перезапуска при сбое нейросети. Оба скрипта есть в инструкции.

 

 

Прикрутить диалоговую нейросетку к игровым неписям - классаня идея, несмотря на очевидные ограничения в возможностях. Полностью меняет игровой опыт. Я вообще не любитель Скайрима, но теперь прошел с большим удовольствием. И наверняка буду играть снова.
В самом деле, теперь больше нет такой удручающей ситуации, когда понравившийся при прохождении квеста непись после завершения квеста грустно стоит, потому что с ним больше не о чем поговорить. Теперь к нему можно возвращаться снова и снова, и всегда найдется тема для разговора.
Неписи сильно отличаются друг от друга по характеру. Они живо реагируют на окружающий игровой мир и на игрока, его слова и поступки. Комментируют происходящие события или действия игрока в соответствии со своим характером. Способны на творчество и могут самостоятельно придумать небольшую историю, предложив игроку поучаствовать в ней. Могут обижаться на игрока или одобрять его, вплоть до возможной со временем влюбленности. Причем поддаются убеждению и их поведение может измениться. Да, красочную сексуальную сцену тоже вполне реально получить. К сожалению, только текстовую :(

 

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

 

Железо, на котором я все это запускаю. Хватает впритык, так что для запуска на другом компе должно быть как минимум не хуже.
Мать: ASUS Rampage V Edition 10
Камень: Xeon E5-2699v4
Память: 64Gb HyperX DDR4 2133MHz CL14
Видео: ASUS RTX 2080 Super

 

Некоторые особенности, выясненные на практике.
а) С неписями можно общаться голосом через микрофон. И это реально работает. Но через довольно короткое время начинает сильно тормозить. Где-то что-то недооптимизировали. Поэтому дальше описывается вариант с отключенным микрофоном и вводом своих сообщений текстом через диалоговое окно.
б) При игре в полноэкранном режиме нейросетка тоже ощутимо подтормаживает. После некоторых экспериментов я выбрал следующий вариант. Игра запускается в окне в разрешении 1280x1024 (при разрешении монитора 1920x1080), игровое окно располагается слева. А в правой части экрана остается достаточно места, чтобы разместить окна нейросетки: вверху Kobold, внизу Mantella. Это позволяет видеть, что там происходит по ходу пьесы. В целом, играть получается достаточно комфортно и удобно, если немного привыкнуть.

 

Теперь приступим. Для начала качаем сам ванильный Skyrim: Special Edition, версию 1.6.1170.0, например отсюда. Устанавливаем его. Пусть будет E:\Skyrim\.

 

Теперь скачиваем Skyrim Script Extender (SKSE). Качаем самый верхний вариант, "Current Anniversary Edition build 2.2.6 (game version 1.6.1170)". Распаковываем в папку с игрой.

 

Создаем на диске папку, куда будем складывать все причиндалы, необходимые для игры с OpenAI. Например, пусть будет E:\OpenAI\.

 

Скачиваем Mod Organizer 2. Можно обойтись и без него, но с ним будет проще. Устанавливаем в E:\OpenAI\MO2\.
При установке выбираем вариант Portable, а когда при запуске спросит про версию игры - указываем Steam. Потом еще надо будет указать, что запускать стим не нужно, у нас его все равно нет, и глупые вопросы тоже больше не нужно задавать.

 

Скачиваем необходимые моды. Сохраняем пока в какую-нибудь временную папку.

Скачиваем софтину xVASynth v3. Качаем как саму софтину "xVASynth v3.0.0 Main app", так и патч для нее, "v3.0.2 PATCH - DON'T FORGET THIS". Распаковываем прогу в E:\OpenAI\xVASynth\. Патч распаковываем поверх.

 

Скачиваем обновленный Russian Dictionary для xVASynth. Распаковываем его в E:\OpenAI\xVASynth\resources\app\python\xvapitch\text\dicts\ с заменой существующего.

 

Скачиваем .lip and .fuz plugin for xVASynth. Распаковываем в папку E:\OpenAI\xVASynth\.

 

Скачиваем FaceFXWrapper 0.4. Первым в списке там идет CK64Fixes Release 3.2, его качать не нужно. Распаковываем куда-нибудь во временную папку и файл FaceFXWrapper.exe переносим в E:\OpenAI\xVASynth\resources\app\plugins\lip_fuz\, где уже лежит предыдущий плагин.

 

Скачиваем xVADict — Elder Scrolls. Распаковываем в E:\OpenAI\xVASynth\.

 

Скачиваем голосовые модели. Для начала качаем "Female Serana" и "Male Nord". Создаем папку E:\OpenAI\xVASynth\resources\app\models\Skyrim\ и распаковываем скачанные файлы туда. Переименовываем файлы .json и .pt из архива "Female Serana" в sk_serana.*, а файлы из архива "Male Nord" переименовываем в sk_malenord.*. Теперь делаем копию файлов Сераны в той же папке и переименовываем их в sk_femalenord.*. Открываем файлы json редактором и меняем там имена файлов соответственно.
Немного забегая вперед, при обращении к неписям в игре, будет подхватываться одна из имеющихся голосовых моделей, если не найдено более подходящей. В логе Мантеллы будет выдаваться ошибка о несоответствии, но модель будет работать.
Нормально работающих и приятно звучащих русскоязычных моделей на данный момент немного, но никто не мешает потом накачать их больше и экспериментировать. Актуальные имена файлов, необходимые, чтобы игра подхватила модель, можно выяснить из лога Мантеллы при старте диалога.

 

Запускаем E:\OpenAI\xVASynth\xVASynth.exe. В правом верхнем углу нажимаем на символ паззла и включаем плагин .lip and .fuz file maker. Нажимаем кнопку Apply, соглашаемся с дефолтными настройками и закрываем окно плагинов клавишей Escape.

86_1.jpg - Размер: 54,13К, Загружен: 3840

 

Там же, в правом верхнем углу нажимаем кнопку AE и в открывшемся окне подключаем все слова в словарях CMUDicT и XVADict — Elder Scrolls. Закрываем окно ескейпом.

86_2.jpg - Размер: 113,07К, Загружен: 3884

 

В левом верхнем углу нажимаем кнопку со стрелочками и в открывшемся списке выбираем игру Skyrim. Список закроется и в основном окне появится список загруженных нами голосовых моделей.

86_3.jpg - Размер: 87,55К, Загружен: 3880

 

В самом правом верхнем углу нажимаем кнопку с шестеренкой. В открывшемся окне настроек сверху нажимаем кнопку "Change to CPU+GPU", чтобы надпись слева гласила "Current installation: GPU", и ставим выше галочку "Use GPU (requires CUDA)".

Листаем список настроек ниже. Проверяем выбор динамиков и микрофона, проверяем пути к "Skyrim models path" и "Skyrim output path", еще ниже выбираем "Game (The .lip format)" - Skyrim/Fallout 3/Fallout NV. Закрываем окно настроек ескейпом и пока выходим из xVASynth.

86_4.jpg - Размер: 82,57К, Загружен: 3891

 

Скачиваем интерфейс нейросетки KoboldCpp. Из списка файлов для загрузки нам нужен koboldcpp.exe, размером примерно полгига. Сохраняем его в E:\OpenAI\Kobold\.

 

Скачиваем образ самой нейросетки mistral-nemo-instruct-2407-q4_k_m.gguf. Сохраняем туда же, в E:\OpenAI\Kobold\.

 

Запускаем koboldcpp.exe. Ждем загрузки окна интерфейса. В открывшемся окне снимаем галку с пункта Launch Browser, а ниже нажимаем кнопку Model: Browse и выбираем скачанный образ нейросетки.
Нажимаем кнопку Save и сохраняем настройки в файл settings.kcpps в ту же папку, где лежит koboldcpp.exe.

Закрываем окно и там же создаем ярлык для запуска koboldcpp.exe, правым кликом открываем его свойства и дописываем ключ запуска "--config settings.kcpps" (без кавычек). Теперь запускать кобольда будем ярлыком, и окно интерфейса больше не появится.

86_5.jpg - Размер: 74,74К, Загружен: 3942

 

 

 

ИНСТРУКЦИЯ ДЛЯ MANTELLA v0.11.

 

Теперь скачиваем интерфейс между игрой и нейросеткрой - Mantella Software v0.11.4. И оттуда же, ниже по списку Mantella Spell v0.10.
Распаковываем Mantella Software в E:\OpenAI\MantellaSoftware\, а архив Mantella Spell закидываем туда, где временно сохраняли моды для последующей установки.

 

Открываем редактором файл E:\OpenAI\MantellaSoftware\GPT_SECRET_KEY.txt. Вписываем туда строку:

http://localhost:5001/api/

Открываем редактором файл E:\OpenAI\MantellaSoftware\config.ini. Меняем в нем следующие настройки:
game = Skyrim
skyrim_folder = E:\Skyrim
skyrim_mod_folder = E:\OpenAI\MO2\mods\Mantella Spell
xvasynth_folder = E:\OpenAI\xVASynth
language = ru
microphone_enabled = 0
player_name = Player
remove_mei_folders = 1
max_tokens = 500

 

Запускаем Mod Organizer 2. По порядку устанавливаем скачанные ранее моды. Для ручной установки используем кнопку с инструментами непосредственно над окном списка модов, в открывающемся списке выбираем опцию Install Mod, и указываем архив с модом (нераспакованный).
- All in one Address Library
- PapyrusUtil
- UIExtensions
- No NPC Greetings
- World Encounter Hostility Fix
- Mantella Spell
- Unofficial Skyrim Special Edition Patch
- Unofficial Skyrim Special Edition Patch - RUS
- SkyUI

 

Убеждаемся, что получившийся фактический путь к Mantella Spell совпадает с тем, который мы указали выше в конфиге (skyrim_mod_folder).
Должна получиться следующая картинка. При необходимости руками перетаскиваем вверх или вниз моды в списках как слева, так и справа. После окончания установки закрываем Mod Organizer.

86_6.jpg

 

Порядок запуска:
1. xVASynth.
2. Mod Organizer.
3. Запускаем Skyrim через Mod Organizer. Ждем загрузки игрового меню.
4. Запускаем Kobold. Передвигаем окно в удобное место. Ждем, пока полностью загрузится и появится приглашение http://localhost:5001.
5. Запускаем Mantella. Передвигаем окно в удобное место и ждем полной загрузки с появлением сообщения об ожидании начала диалога с NPC.
6. Переключаемся на игру и играем.

 

При первом запуске не забываем в самой игре зайти в системном меню в настройки модов и проверить настройки Мантеллы. Как минимум - назначить кнопку для диалогового окна игровых событий (Add Custom Game Event), что серьезно разнообразит игру.
Настройки модов сохраняются в сейвах игры, поэтому, если загрузим более ранний сейв, то придется настроить заново.

 

Скрипт AutoHotkey для автоматического последовательного запуска всей этой байды с выравниванием окон в нужное положение.

#Requires AutoHotkey >=2.0
Run('xVASynth\xVASynth.exe', 'xVASynth')
Sleep 500
if WinWait('xVA Synth',,5)
WinMove(100,0,1300,1000,'xVA Synth')
Run('MO2\ModOrganizer.exe', 'MO2')
if WinWait('Mod Organizer',,5)
WinMove(95,150,,,'Mod Organizer')
Run('Kobold\koboldcpp.exe --config settings.kcpps', 'Kobold')
if WinWait('koboldcpp.exe',,3)
WinMove(1274,0,670,520,'koboldcpp.exe')
Sleep 17000
Run('MantellaSoftware\Mantella.exe', 'MantellaSoftware')
if WinWait('Mantella.exe',,3)
WinMove(1274,520,670,520,'Mantella.exe')

Скрипт AutoHotkey для перезапуска Кобольда и Мантеллы при глюке нейросетки. Окна также автоматически выставятся в нужное положение.

#Requires AutoHotkey >=2.0
if WinExist('Mantella.exe')
WinClose 'Mantella.exe'
if WinExist('koboldcpp.exe')
WinClose 'koboldcpp.exe'
Sleep 1500
Run('Kobold\koboldcpp.exe --config settings.kcpps', 'Kobold')
if WinWait('koboldcpp.exe',,3)
WinMove(1274,0,670,520,'koboldcpp.exe')
Sleep 17000
Run('MantellaSoftware\Mantella.exe', 'MantellaSoftware')
if WinWait('Mantella.exe',,3)
WinMove(1274,520,670,520,'Mantella.exe')

.

 

 
ИНСТРУКЦИЯ ДЛЯ MANTELLA v0.12. Не дописана ввиду бажности новой Мантеллы на данный момент.

 

Теперь скачиваем интерфейс между игрой и нейросеткрой - Mantella For Skyrim SE/AE/VR. Закидываем архив туда, где временно сохраняли моды для последующей установки.

Запускаем Mod Organizer 2. По порядку устанавливаем скачанные ранее моды. Для ручной установки используем кнопку с инструментами непосредственно над окном списка модов, в открывающемся списке выбираем опцию Install Mod, и указываем архив с модом (нераспакованный).
- All in one Address Library
- PapyrusUtil
- UIExtensions
- No NPC Greetings
- World Encounter Hostility Fix
- Mantella
- Unofficial Skyrim Special Edition Patch
- Unofficial Skyrim Special Edition Patch - RUS
- SkyUI

 

Должна получиться следующая картинка. При необходимости руками перетаскиваем вверх или вниз моды в списках как слева, так и справа. Проверяем, что фактический путь к Mantella получился E:\OpenAI\MO2\mods\Mantella\ (понадобится ниже).
После окончания установки закрываем Mod Organizer.

86_6.jpg

 

Открываем редактором файл E:\OpenAI\MO2\mods\Mantella\GPT_SECRET_KEY.txt. Вписываем туда строку:

http://localhost:5001/api/

Чтобы создался конфиг, запускаем файл E:\OpenAI\MO2\mods\Mantella\SKSE\Plugins\MantellaSoftware\Mantella.exe. После того, как все загрузится с кучей ошибок и предупреждений, закрываем окно.

 

Переходим в %USERPROFILE%\Documents\My Games\Mantella\. Открываем редактором создавшийся там файл config.ini. Меняем в нем следующие строки:
game = Skyrim
skyrim_mod_folder = E:\OpenAI\MO2\mods\Mantella
llm_api = KoboldCpp
max_tokens = 500
tts_service = xVASynth
xvasynth_folder = E:\OpenAI\xVASynth
stt_language = ru
language = ru
auto_launch_ui = False
remove_mei_folders = True

 

Порядок запуска:
1. xVASynth.
2. Mod Organizer.
3. Запускаем Kobold. Передвигаем окно в удобное место. Ждем, пока полностью загрузится и появится приглашение http://localhost:5001.
4. Запускаем Skyrim через Mod Organizer. Ждем загрузки игрового меню.
5. Переключаемся на окно автоматически запустившейся Mantella и передвигаем его в удобное место.
6. Переключаемся обратно на игру и играем.

 

При первом запуске не забываем в самой игре зайти в системном меню в настройки модов и проверить настройки Мантеллы. Как минимум - отключить микрофон и назначить кнопку для диалогового окна игровых событий (Add Custom Game Event), что серьезно разнообразит игру.
Настройки модов сохраняются в сейвах игры, поэтому, если загрузим более ранний сейв, то придется настроить заново.

 

 

 

Специально для nihille написал небольшую утилитку для экспорта диалоговых логов в удобочитаемый формат. Запускается так:
D:\WebServers\usr\local\perl\bin\perl.exe aidecode.pl "NAME"
Где NAME - Имя папки лога, совпадающее с английским именем непися.

#!/usr/bin/perl
use JSON::XS;

my $json = '';
my $input = $ARGV[0] . '\\' . $ARGV[0] . '.json';
my $output = $ARGV[0] . '.txt';
open (my $fh, '<:encoding(UTF-8)', $input) or err($input, $!);
while (my $row = <$fh>) {
   $json .= $row;
}
close $fh;

my $log = decode_json($json);
open (my $fh, '>:encoding(UTF-8)', $output) or err($output, $!);
print $fh "STARTING NEW SESSION\n";
foreach my $row (@{$log}) {
   if (ref $row eq 'ARRAY') {
      print $fh "\n\nSTARTING NEW SESSION";
      foreach my $ses (@{$row}) {
         print $fh str($ses);
      }
   }
   else {
      print $fh str($row);
   }
}
print $fh "\n\nEND CONVERSATION\n";
close $fh;

sub str {
   my ($row) = @_;
   my ($role, $cont) = ($row->{role}, $row->{content});
   $cont =~ s/\n\n/\n\[$role\]: /g;
   $cont =~ s/^\*The\stime\sis.*\.\*\n//i;
   my $str = sprintf("%s[%s]: %s",
      ($role eq 'user') ? "\n\n" : "\n",
      $role,
      $cont,
   );
   return $str;
}

sub err {
   my ($file, $err) = @_;
   print "\nCould not open file '$file' $err\n";
   exit(0);
}

Сообщение отредактировал nihille: 27 июня 2025 - 15:20



  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#2 Ссылка на это сообщение Nesasha_online

Nesasha_online
  • Новенький
  • 1 сообщений

Отправлено

Спасибо. Надеюсь все пойдет как надо. Респект за классный пост



#3 Ссылка на это сообщение nihille

nihille
  • Авантюрист
  • 179 сообщений
  •    

Отправлено

Что ж, MANTELLA  на месте не стоит, на сегодня рабочая версия MANTELLA v 0.13.1

 

Ниже инструкция, опять же от Хельмута, как запустить это добро и наслаждаться им.

Но сначала ролик на ютубе — маленькая демонстрация, как ИИ работает в Скае: Хельмут взаимодействует с трактирщиком, задавая вопросы про покушать и политику, и можно видеть (и даже слышать, несмотря на то, что фоном орёт проклятый скайримский бард) как трактирщик отвечает:

 

https://youtu.be/kZqjhAOfmBg

 

 

Итак, Хельмут пишет:

 

Наконец-то стало возможно поиграть с новой версией Мантеллы, получившей ряд новых интересных возможностей. Но и ряд критических багов тоже. К счастью, комьюнити пока еще достаточно небольшое, и разработчики оказались вполне доступными для общения. Удивительно, но факт: они не знали о баге, делающем невозможной игру с локальной моделью ИИ. Видимо, большинство пользователей предпочитает онлайн модели. В результате была оперативно выпущена версия Мантеллы 13.1 с исправлением самых критических багов. Осталось еще несколько некритичных, но достаточно неприятных. Надеюсь, мои багрепорты помогут избавиться от них в следующих версиях. Заодно я узнал от разработчиков много интересного о принципах работы моделей ИИ. Хотя и не все понял. Но я стараюсь.

 

Кстати, насчет моделей. Я до сих пор развлекаюсь с моделями на основе Мистраль. Это хорошая нейросетка, часто выдающая весьма интересные диалоги. Но, как водится, не без недостатков. Во-первых, это неистребимый пацифизм. Изначально эта нейросетка создавалась как дружелюбный помощник, и эти директивы прошиты где-то в самом ядре, так что все авторы, дообучающие нейросетку и выкладывающие образы, не в состоянии перебороть это. Так что, во избежание разрыва шаблонов, лучше не начинать диалоги, подразумевающие какую-нибудь агрессию. Когда ассассин Темного Братства вместо обсуждения предстоящего убийства начинает рассуждать о понимании, толерантности и терпимости - это несколько портит впечатление от игры.

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

 

Для работы нейросетки важны количество ядер CUDA и объем видеопамяти. Образ следует выбирать исходя из имеющейся видеопамяти. Два основных параметра, как правило, отражаются в имени образа: контент (число B, грубо говоря общее количество нейронов) и квантование (число Q, грубо говоря, число связей между нейронами). При этом, при выборе между одинаково весящими образами специалисты рекомендуют выбирать тот, у кого больший контент при меньшем квантовании.

 

Насчет оптимизации есть еще один момент. Как мне объяснили, у базовой модели отличается токенизация английского языка и всех остальных. Для кодирования одного английского слова используется один токен, а для слова на другом языке - несколько, вплоть до одного токена на каждую букву, что сильно сказывается на объеме обрабатываемого контента. Поэтому, для игры на русском языке с Mistral-Large-Instruct-2407 лучше использовать drafter модели (7B-Instruct-v0.3). Видимо, имелось ввиду что-то типа вот такой или такой. Я пока еще не успел поэкспериментировать, но надо будет заняться и проверить. Да, и надо будет еще посматривать в сторону хваленой китайской DeepSeek. Я пока не видел ни одного локального образа, заслуживающего внимания, но, возможно, в будущем они еще появятся.

 

Итак, мы по-прежнему ориентируемся на запуск Скайрима в окне с одновременным доступом к окнам консолей ИИ. И на текстовый ввод, без микрофона. Подробности были расписаны в предыдущей заметке, повторяться не будем.

 

 

 

Skyrim.

 

Начинаем с установки самого Скайрима. Новые версии Мантеллы отказываются работать со стимовской пираткой. Вероятно, это можно победить, воссоздав правильную структуру. Но мне лень. Проще скачать ГОГ-овскую версию Skyrim AE v1.6.1179. Например, отсюда. Качаем и ставим, как в прошлый раз, в E:\SkyrimAI\Skyrim\.

 

Сразу вдогонку качаем Skyrim Script Extender (SKSE), берем второй сверху вариант для GOG Anniversary Edition (game version 1.6.1179). Распаковываем в папку с установленной игрой.

 

 

 

xVASynth.

 

Скачиваем софтину xVASynth v3. Качаем как саму софтину "xVASynth v3.0.0 Main app", так и патч для нее, "v3.0.2 PATCH - DON'T FORGET THIS". Распаковываем прогу в E:\SkyrimAI\xVASynth\. Патч распаковываем поверх.

 

Скачиваем обновленный Russian Dictionary для xVASynth. Распаковываем его в E:\SkyrimAI\xVASynth\resources\app\python\xvapitch\text\dicts\ с заменой существующего.

 

Скачиваем .lip and .fuz plugin for xVASynth. Распаковываем в папку E:\SkyrimAI\xVASynth\.

 

Скачиваем FaceFXWrapper 0.4. Первым в списке там идет CK64Fixes Release 3.2, его качать не нужно. Распаковываем куда-нибудь во временную папку и файл FaceFXWrapper.exe переносим в E:\SkyrimAI\xVASynth\resources\app\plugins\lip_fuz\, где уже лежит предыдущий плагин.

 

Скачиваем xVADict — Elder Scrolls. Распаковываем в E:\SkyrimAI\xVASynth\.

 

Скачиваем голосовые модели. Для начала качаем "Female Serana" и "Male Nord". Создаем папку E:\SkyrimAI\xVASynth\resources\app\models\Skyrim\ и распаковываем скачанные файлы туда. Переименовываем файлы .json и .pt из архива "Female Serana" в sk_femalenord.*, а файлы из архива "Male Nord" переименовываем в sk_malenord.*. Открываем файлы json редактором и меняем там имена файлов соответственно.

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

 

Запускаем E:\SkyrimAI\xVASynth\xVASynth.exe. В правом верхнем углу нажимаем на символ паззла и включаем плагин .lip and .fuz file maker. Нажимаем кнопку Apply, соглашаемся с дефолтными настройками и закрываем окно плагинов клавишей Escape.

86_1.jpg - Размер: 54,13К, Загружен: 12

 

Там же, в правом верхнем углу нажимаем кнопку AE и в открывшемся окне подключаем все слова в словарях CMUDicT и XVADict — Elder Scrolls. Закрываем окно ескейпом.

86_2.jpg - Размер: 113,07К, Загружен: 12

 

В левом верхнем углу нажимаем кнопку со стрелочками и в открывшемся списке выбираем игру Skyrim. Список закроется и в основном окне появится список загруженных нами голосовых моделей.

86_3.jpg - Размер: 87,55К, Загружен: 10

 

В самом правом верхнем углу нажимаем кнопку с шестеренкой. В открывшемся окне листаем список настроек вниз. Убираем подключение к дискорду, проверяем выбор динамиков и микрофона, проверяем пути к "Skyrim models path" и "Skyrim output path", еще ниже выбираем "Game (The .lip format)" - Skyrim/Fallout 3/Fallout NV. Под этой опцией ставим галочки: "Delete lip files", "Make fuz files" и "Skip existing". Закрываем окно настроек ескейпом и пока выходим из xVASynth.

90_1.jpg - Размер: 79,14К, Загружен: 13

 

 

KoboldCpp.

 

Скачиваем интерфейс нейросетки KoboldCpp. Из списка файлов для загрузки нам нужен koboldcpp.exe, размером примерно полгига. Сохраняем его в E:\SkyrimAI\Kobold\.

 

Скачиваем образ самой нейросетки. Я выбрал два варианта: либо попроще и пошустрее, либо получше, но помедленнее. Сохраняем туда же, в E:\SkyrimAI\Kobold\. Если хотим включить зрение неписей, то докачиваем к ним образ графического распознавания.

 

Запускаем koboldcpp.exe. Ждем загрузки окна интерфейса. В открывшемся окне снимаем галку с пункта Launch Browser, а ниже нажимаем кнопку GGUF Text Model: Browse и выбираем скачанный образ нейросетки. Заодно увеличиваем размер контекста до 8192.

90_2.jpg - Размер: 83,22К, Загружен: 16

 

Чтобы подключить зрение, переходим на вкладку "Loaded Files" и указываем скачанный образ распознавателя.

90_3.jpg - Размер: 92,09К, Загружен: 15

 

Нажимаем кнопку Save config и сохраняем настройки в файл settings.kcpps в ту же папку, где лежит koboldcpp.exe. Можем сделать два отдельных конфига, с зрением и без. Переключать их мы сможем из скрипта запуска сборки.

 

 

 

Mod Organizer.

 

Скачиваем необходимые моды. Сохраняем пока в какую-нибудь временную папку.

 

 

Скачиваем Mod Organizer 2. Устанавливаем в E:\SkyrimAI\MO2\ и запускаем.

При первом запуске выбираем вариант Portable, а когда спросит про версию игры - указываем GOG. В следующем окне отметим profile-specific INI и сейвы.

 

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

90_4.jpg - Размер: 137,28К, Загружен: 11

 

 

 

Mantella.

 

Закрываем Mod Organizer. Переходим в папку E:\SkyrimAI\MO2\mods\Mantella\ и открываем в редакторе файл GPT_SECRET_KEY.txt. Вписываем туда строку:
http://localhost:5001/api/

Далее переходим в E:\SkyrimAI\MO2\mods\Mantella\SKSE\Plugins\MantellaSoftware\ и открываем файл custom_user_folder.ini. Указываем там параметр
custom_user_folder = E:/SkyrimAI/Mantella/
Это чтобы не лазить каждый раз в "мои документы", используемые по умолчанию. Не забываем создать саму папку E:\SkyrimAI\Mantella\.

 

По очереди запускаем xVASynth, KoboldCpp (первый раз может загружаться долго) и Mod Organizer. Запускаем Скайрим из мод органайзера. Ждем, пока запустится игра. Ждем, пока автоматически откроется окно консоли Мантеллы. Любуемся на картину Малевича. Когда раздастся звук лопнувшей струны и откроется браузер, закрываем все к чертям.

 

Теперь у нас создались все необходимые конфиги. Для начала займемся самой игрой. Несмотря на то, что мы указали использовать локальный конфиг, ГОГ-овская версия, похоже, все равно лазит в "мои документы". Поэтому идем в %USERPROFILE%\Documents\My Games\Skyrim Special Edition GOG\. Удаляем Skyrim.INI, копируем туда файл E:\SkyrimAI\Skyrim\Skyrim_Default_ru.ini и переименовываем его в Skyrim.INI.
далее открываем SkyrimPrefs.ini и правим его руками по вкусу или согласно многочисленным гайдам по оптимизациям и улучшениям. Но это можно и потом, а пока нас особенно интересуют следующие параметры:
iSize W=1280
iSize H=1024
bFull Screen=0
bBorderless=1
bDialogueSubtitles=1
bGeneralSubtitles=1
На всякий случай копируем получившиеся Skyrim.INI и SkyrimPrefs.ini в E:\SkyrimAI\MO2\profiles\Default\.

 

Теперь открываем E:\SkyrimAI\Mantella\config.ini и вносим следующие изменения (актуально для Mantella v13.1):
Код:

game = Skyrim
skyrim_mod_folder = E:\SkyrimAI\MO2\mods\Mantella
llm_api = KoboldCpp
model = Custom model
custom_token_count = 8192
llm_params = {
    "max_tokens": 500,
    "stop": ["#"]
    }
tts_service = xVASynth
xvasynth_folder = E:\SkyrimAI\xVASynth
fast_response_mode = True
fast_response_mode_volume = 15
low_resolution_mode = False
save_screenshot = False
image_quality = 100
custom_vision_model = True
vision_llm_api = KoboldCpp
vision_model = Custom Model
language = ru
auto_launch_ui = False
automatic_greeting = False

Далее, находим в этом же конфиге раздел [Prompts] и в нем многострочный параметр skyrim_prompt. Находим в нем строку:
Remember to stay in character.
И заменяем на
Don't write instructions. Remember to stay in character.

 

Кстати, новые версии Мантеллы теперь имеют свой гуй, доступный в браузере по адресу http://localhost:4999/ui/?__theme=dark
Там можно, например, оперативно включить или выключить зрение NPC, в зависимости от ситуации или чтобы увеличить скорость ответа. Но нужно учесть, что изменение параметра завершит текущий диалог, если он уже начат.
Можно сразу создать ярлык для этого адреса, в папке E:\SkyrimAI\. Пусть будет.

 

После первого уже нормального запуска Скайрима не забываем зайти в настройки Мантеллы уже в самой игре (Система -> Настройки модов -> Mantella -> General). Отключаем микрофон и назначаем кнопки для End Conversation и Add Custom Game Event. У меня это обычно [\] и [=] соответственно.
Внутриигровые настройки пишутся в сейв игры, поэтму, если загрузиться с более раннего сейва, то придется выставлять заново.

 

 

 

AutoHotkey.

 

Раз мы не хотим каждый раз запускать всю эту порнографию вручную, пишем скрипт на AutoHotkey:
Код:

#Requires AutoHotkey >=2.0
if not WinExist('xVA Synth') {
   Run('xVASynth\xVASynth.exe', 'xVASynth')
   Sleep Floor(IniRead("SkyrimAI.ini", "Delays", "xVASynthDelay", 1) * 1000)
   if WinWait('xVA Synth',,10) {
      WinMove(0,0,1300,1000,'xVA Synth')
   }
}
if not WinExist('koboldcpp.exe') {
   if (IniRead("SkyrimAI.ini", "Kobold", "Vision_LLM_load_enable", 0) == 1) {
      Run('Kobold\koboldcpp.exe --config settings_vision.kcpps --highpriority', 'Kobold')
   }
   else {
      Run('Kobold\koboldcpp.exe --config settings.kcpps --highpriority', 'Kobold')
   }
   if WinWait('koboldcpp.exe',,10) {
      PosX := IniRead("SkyrimAI.ini", "Kobold", "Kobold_PosX", 1274)
      PosY := IniRead("SkyrimAI.ini", "Kobold", "Kobold_PosY", 0)
      ResX := IniRead("SkyrimAI.ini", "Kobold", "Kobold_ResX", 670)
      ResY := IniRead("SkyrimAI.ini", "Kobold", "Kobold_ResY", 520)
      WinMove(PosX,PosY,ResX,ResY,'koboldcpp.exe')
   }
}
if not WinExist('ModOrganizer') {
   Run('MO2\ModOrganizer.exe "moshortcut://:SKSE"', 'MO2')
   WinWait('ModOrganizer',,10)
   Sleep Floor(IniRead("SkyrimAI.ini", "Delays", "MO2Delay", 1) * 1000)
   if WinExist('ModOrganizer',,10) {
      PosX := Floor(IniRead("MO2\profiles\Default\skyrimprefs.ini", "Display", "iSize W", 1280) / 2 - 190)
      PosY := Floor(IniRead("MO2\profiles\Default\skyrimprefs.ini", "Display", "iSize H", 1024) / 2 - 70)
   if WinExist('xVA Synth') {
     WinActivate('xVA Synth')
     WinMinimize 'xVA Synth'
   }
   WinActivate('ModOrganizer')
      WinMove(PosX,PosY,,,'ModOrganizer')
   }
   WinWait('Skyrim Special Edition GOG',,10)
   WinSetTitle('Skyrim Special Edition')
   if (IniRead("MO2\profiles\Default\skyrimprefs.ini", "Display", "bFull Screen", 0) == 0) {
      PosX := IniRead("SkyrimAI.ini", "Skyrim", "Skyrim_PosX", 0)
      PosY := IniRead("SkyrimAI.ini", "Skyrim", "Skyrim_PosY", 0)
      WinMove(PosX,PosY,,,'Skyrim Special Edition')
   }
}
PosX := IniRead("SkyrimAI.ini", "Mantella", "Mantella_PosX", 1274)
PosY := IniRead("SkyrimAI.ini", "Mantella", "Mantella_PosY", 520)
ResX := IniRead("SkyrimAI.ini", "Mantella", "Mantella_ResX", 670)
ResY := IniRead("SkyrimAI.ini", "Mantella", "Mantella_ResY", 520)
DelM := Floor(IniRead("SkyrimAI.ini", "Delays", "MantellaDelay", 1) * 1000)
while WinExist('Skyrim Special Edition') {
   Sleep DelM
   if (WinExist('Mantella.exe')) {
      WinGetPos(&MantX,&MantY,,,'Mantella.exe')
      if (MantX != PosX or MantY != PosY) {
         WinActivate('Mantella.exe')
         WinMove(PosX,PosY,ResX,ResY,'Mantella.exe')
         WinActivate('Skyrim Special Edition')
      }
   }
}
if WinExist('Mantella.exe') {
   WinClose 'Mantella.exe'
}
if WinExist('KoboldCpp') {
   WinClose 'KoboldCpp'
}
if WinExist('xVA Synth') {
   WinClose 'xVA Synth'
}
FileDelete 'Mantella\data\tmp\voicelines\save\*.wav'

Это пока так, черновой вариант по минимуму. Потом может придут светлые идеи, что-нибудь добавить или улучшить. Компилируем скрипт в EXE и кладем в E:\SkyrimAI\. Рядом создаем файл SkyrimAI.ini и пишем туда:

[Delays]
xVASynthDelay = 1
MO2Delay = 1
MantellaDelay = 1

[Skyrim]
Skyrim_PosX = 0
Skyrim_PosY = 0

[Kobold]
Vision_LLM_load_enable = 1
Kobold_PosX = 1274
Kobold_PosY = 0
Kobold_ResX = 670
Kobold_ResY = 520

[Mantella]
Mantella_PosX = 1274
Mantella_PosY = 520
Mantella_ResX = 670
Mantella_ResX = 520

Два момента на заметку: Во-первых, добавлено переименование окна Скайрима. Извращенцы из GOG зачем-то изменили его, а именно на заголовок окна ориентируется функция зрения. Разработчики Мантеллы уже в курсе этой фичи, и в следующих версиях обещают учесть этот момент, тогда из скрипта можно будет убрать.

 

Во-вторых, в INI добавлен параметр, отвечающий за загрузку образа графического распознавателя в Kobold. Соответственно, нужны два отдельных конфига с соответствующими именами (settings.kcpps и settings_vision.kcpps). Теоретически, можно было бы привязать это непосредственно к конфигу Мантеллы, но он может меняться без перезапуска игры, а Kobold требует перезапуска. Поэтому пусть будут отдельно.

 

 

 

Разные полезности

 

Шаблон файлов override (вида NPC_Name.json):

{
    "base_id": "XXXXXX",
    "name": "NPC_Name",
    "bio": "NPC_biography",
    "gender": "Male",
    "race": "Nord",
    "species": "Human",
    "skyrim_voice_folder": "MaleEvenToned",
    "voice_model": "MaleEvenToned"
}

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


Сообщение отредактировал nihille: 27 июня 2025 - 16:35






Темы с аналогичным тегами skyrim, openai, нейросети

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых