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


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

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

skyrim openai нейросети

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

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

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

Отправлено

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

Для 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К, Загружен: 99

 

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

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

 

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

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

 

В самом правом верхнем углу нажимаем кнопку с шестеренкой. В открывшемся окне настроек сверху нажимаем кнопку "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К, Загружен: 102

 

Скачиваем интерфейс нейросетки 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К, Загружен: 96

 

 

 

ИНСТРУКЦИЯ ДЛЯ 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);
}



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



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

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

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