nihille Опубликовано 3 ноября, 2024 Опубликовано 3 ноября, 2024 (изменено) 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. Потом еще надо будет указать, что запускать стим не нужно, у нас его все равно нет, и глупые вопросы тоже больше не нужно задавать. Скачиваем необходимые моды. Сохраняем пока в какую-нибудь временную папку. Address Library for SKSE Plugins, выбираем "All in one (1.6.X)"; PapyrusUtil SE, вариант "Version 4.6 for SKSE 2.2.6, Skyrim 1.6.1170, & Address Library AE"; UIExtensions; Unofficial SSE Patch; Unofficial SSE Patch — RUS; SkyUI Russian translation; No NPC Greetings (Special Edition); World Encounter Hostility Fix, качаем "Performance Version"; Скачиваем софтину 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. Там же, в правом верхнем углу нажимаем кнопку AE и в открывшемся окне подключаем все слова в словарях CMUDicT и XVADict — Elder Scrolls. Закрываем окно ескейпом. В левом верхнем углу нажимаем кнопку со стрелочками и в открывшемся списке выбираем игру Skyrim. Список закроется и в основном окне появится список загруженных нами голосовых моделей. В самом правом верхнем углу нажимаем кнопку с шестеренкой. В открывшемся окне настроек сверху нажимаем кнопку "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. Скачиваем интерфейс нейросетки 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" (без кавычек). Теперь запускать кобольда будем ярлыком, и окно интерфейса больше не появится. ИНСТРУКЦИЯ ДЛЯ 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. Порядок запуска: 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. Открываем редактором файл 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); } Изменено 27 июня, 2025 пользователем nihille 1
Nesasha_online Опубликовано 24 июня, 2025 Опубликовано 24 июня, 2025 Спасибо. Надеюсь все пойдет как надо. Респект за классный пост 1
nihille Опубликовано 27 июня, 2025 Автор Опубликовано 27 июня, 2025 (изменено) Что ж, MANTELLA на месте не стоит, на сегодня рабочая версия MANTELLA v 0.13.1 Ниже инструкция, опять же от Хельмута, как запустить это добро и наслаждаться им. Но сначала ролик на ютубе — маленькая демонстрация, как ИИ работает в Скае: Хельмут взаимодействует с трактирщиком, задавая вопросы про покушать и политику, и можно видеть (и даже слышать, несмотря на то, что фоном орёт проклятый скайримский бард) как трактирщик отвечает: Итак, Хельмут пишет: Наконец-то стало возможно поиграть с новой версией Мантеллы, получившей ряд новых интересных возможностей. Но и ряд критических багов тоже. К счастью, комьюнити пока еще достаточно небольшое, и разработчики оказались вполне доступными для общения. Удивительно, но факт: они не знали о баге, делающем невозможной игру с локальной моделью ИИ. Видимо, большинство пользователей предпочитает онлайн модели. В результате была оперативно выпущена версия Мантеллы 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. Там же, в правом верхнем углу нажимаем кнопку AE и в открывшемся окне подключаем все слова в словарях CMUDicT и XVADict — Elder Scrolls. Закрываем окно ескейпом. В левом верхнем углу нажимаем кнопку со стрелочками и в открывшемся списке выбираем игру Skyrim. Список закроется и в основном окне появится список загруженных нами голосовых моделей. В самом правом верхнем углу нажимаем кнопку с шестеренкой. В открывшемся окне листаем список настроек вниз. Убираем подключение к дискорду, проверяем выбор динамиков и микрофона, проверяем пути к "Skyrim models path" и "Skyrim output path", еще ниже выбираем "Game (The .lip format)" - Skyrim/Fallout 3/Fallout NV. Под этой опцией ставим галочки: "Delete lip files", "Make fuz files" и "Skip existing". Закрываем окно настроек ескейпом и пока выходим из xVASynth. KoboldCpp. Скачиваем интерфейс нейросетки KoboldCpp. Из списка файлов для загрузки нам нужен koboldcpp.exe, размером примерно полгига. Сохраняем его в E:\SkyrimAI\Kobold\. Скачиваем образ самой нейросетки. Я выбрал два варианта: либо попроще и пошустрее, либо получше, но помедленнее. Сохраняем туда же, в E:\SkyrimAI\Kobold\. Если хотим включить зрение неписей, то докачиваем к ним образ графического распознавания. Запускаем koboldcpp.exe. Ждем загрузки окна интерфейса. В открывшемся окне снимаем галку с пункта Launch Browser, а ниже нажимаем кнопку GGUF Text Model: Browse и выбираем скачанный образ нейросетки. Заодно увеличиваем размер контекста до 8192. Чтобы подключить зрение, переходим на вкладку "Loaded Files" и указываем скачанный образ распознавателя. Нажимаем кнопку Save config и сохраняем настройки в файл settings.kcpps в ту же папку, где лежит koboldcpp.exe. Можем сделать два отдельных конфига, с зрением и без. Переключать их мы сможем из скрипта запуска сборки. Mod Organizer. Скачиваем необходимые моды. Сохраняем пока в какую-нибудь временную папку. Unofficial SSE Patch; Unofficial Skyrim Creation Club Content Patch; Unofficial SSE Patch — RUS; Unofficial Skyrim Creation Club Content Patch — RUS; Address Library for SKSE Plugins, выбираем "All in one (1.6.X)"; PapyrusUtil SE, вариант "Version 4.6 for SKSE 2.2.6, Skyrim 1.6.1179(GOG), & Address Library"; SkyUI Russian translation; UIExtensions; World Encounter Hostility Fix, качаем "Performance Version"; No NPC Greetings (Special Edition); Mantella; FonixData File, вариант "Mod Manager Install"; SSE Russian Fix Console, вариант "SSE Russian Fix Console Only", хотя, по желанию; Скачиваем Mod Organizer 2. Устанавливаем в E:\SkyrimAI\MO2\ и запускаем. При первом запуске выбираем вариант Portable, а когда спросит про версию игры - указываем GOG. В следующем окне отметим profile-specific INI и сейвы. Устанавливаем ранее скачанные моды в том же порядке, в котором они указаны в списке на скачивание. Должно получиться как-то так: 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. Из остальных параметров добавляем только то, что нужно переопределить. Изменено 27 июня, 2025 пользователем nihille 1
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти