Oct 15 04:58 · AI content
SkyrimNet Beta27
Это перевод, сделанный ИИ: мы старались, но в нём возможны неточности. Оригинальные примечания к выпуску (на английском) и загрузка — на GitHub: https://github.com/MinLL/SkyrimNet-GamePlugin/releases/tag/vbeta27
This is a best-effort AI translation and may contain mistakes. The original release notes (in English) and the download are on GitHub: https://github.com/MinLL/SkyrimNet-GamePlugin/releases/tag/vbeta27
Модель эмбеддинга памяти, включая многоязычные варианты @dekana.
Memory → Embedding Model задаёт модель, которая сопоставляет воспоминания с диалогом. В новых установках по умолчанию используется Bekko Embedding v1 — он вспоминает лучше, чем старый all-MiniLM-L6-v2, как на английском, так и на других языках, причём не медленнее. Две многоязычные модели позволяют NPC вспоминать воспоминания, написанные на русском, японском и других языках, по смыслу, а не только по совпадающим словам.
- Bekko Embedding v1 (новый вариант по умолчанию): лучшее качество припоминания; загрузка 234 МБ.
- Granite Embedding 107M Multilingual: скорость на уровне all-MiniLM-L6-v2; загрузка 442 МБ.
- Нужное воспоминание попадает в топ-5 на реальных сохранениях (all-MiniLM-L6-v2, Granite, Bekko): английский — 65%, 71%, 76%; русский — 46%, 88%, 93%.
- Существующие установки не переключаются автоматически. Settings › Updated Defaults предложит перейти на Bekko; Keep Old оставит текущую модель.
- Save Changes переключает запущенную игру: модель скачивается, затем воспоминания переэмбеддятся в фоне, а прогресс отображается на странице Memories. Сохранённое в главном меню, оно подхватывается при следующей загрузке сохранения.
- Если модель не удаётся скачать или загрузить, настройка откатывается на предыдущую модель, а страница настроек сообщает причину.
- Свои модели: ONNX-модель и её tokenizer.json в models/embedding/custom/<name>/. Остальное объясняет файл README.txt там же.
Speaker Selector Strictness @Min
Правки поведения селектора цели совместно с Jev для более связных и последовательных решений об ответе, а также для более релевантной сводки для вставки (interject). В Settings → Conversations → Speaker Selector появился новый выпадающий список Strictness, который задаёт, насколько охотно NPC вступают в разговор без приглашения, когда модель решений выбирает, кто отвечает.
- Chatty: поведение как в Beta26. Спутники реагируют на всё, что происходит вокруг вас, и достаточно слабого совпадения с текстом «interjects when» в био NPC.
- Balanced (по умолчанию): спутникам нужно совпадение с текстом их био либо с тем, что происходит именно с вами (бой, опасная ситуация, находка, только что принятое решение); остальные NPC заговаривают при тематическом совпадении с их био. На что-то драматичное или неожиданное всё равно найдётся чья-то реакция.
- Strict: тому, к кому не обращаются напрямую, нужно конкретное совпадение с текстом вставки, а по умолчанию — молчание.
- В непрерывном режиме случайный свидетель вступает в разговор только если его назвали, обратились к нему, либо сработали триггеры вставки из его био.
Экспериментальная интеграция с Better Facial Animations @Min
При установленном Better Facial Animations 4.1 реплики NPC и озвученные фразы самого игрока получают лица Audio2Face: губы, челюсть, брови и глаза управляются реальным звуком, а выражение лица берётся из текущего настроения говорящего. Собственный липсинк SkyrimNet всё равно двигает рот, пока BFA не возьмёт фразу на себя, и в любой момент, когда BFA отказывается её обрабатывать.
- Settings → Voice → Animation Tuning → Use Better Facial Animations (включено по умолчанию); если BFA не установлен, ничего не меняется.
- Собственные правила BFA продолжают действовать: его переключатели Enabled и Player, фильтры по расам, сцены и режим Potato определяют, какие реплики он анимирует.
- Требуется тестовая сборка BFA 4.1: https://gitlab.com/cyberquach/better-facial-animations/-/releases/4.1.0-test-build — со старыми сборками не работает.
Подсказки для распознавания речи (Speech-to-text) @Min
Когда вы говорите, распознавание речи теперь получает список имён, которые вы, скорее всего, произнесёте, поэтому «Farengar» и «Dragonsreach» распознаются правильно, а не как похожие по звучанию слова. Функция включена по умолчанию для Local Whisper и External Whisper.
- Имена: персонажи рядом с вами (сначала спутники), закреплённые вами персонажи, ваше собственное имя, место, где вы находитесь (локация, холд, интерьер), а также ближайшие маркеры на карте и двери.
- Отключить можно переключателем Name Hints на странице Speech-to-Text.
- Промпт stt_hints в Content Library определяет, какой текст отправляется; отредактируйте его, чтобы убрать места или изменить формулировки. Позже мы, вероятно, добавим туда несколько распространённых терминов Skyrim — будем рады отзывам на эту тему, хотя отправить туда можно не так уж много: контекстное окно тесное.
- Для авторов промптов: новый декоратор get_place_names() перечисляет места вокруг игрока по имени ("current" или "nearby").
Импорт песен бардов из аудиофайлов @dekana.
Теперь можно давать бардам песни без музыкального API: импортируйте файл .mp3, .wav, .ogg или .flac — и барды будут петь его как сочинённую песню. Voice > Bard Singing > Songs > Import song.
- Выберите голос (мужской или женский) или отметьте Instrumental, чтобы песню мог играть любой бард. Инструментальную комп��зицию можно попросить по тегам стиля («что-нибудь классическое»), а не только по названию.
- Галочка «This is my song» оставляет песню только для вашей команды /playsong; барды-NPC её не выберут.
- Файл песни .yaml с тем же именем, что и аудиофайл, автоматически заполняет форму. Кнопка Download сохраняет пару файлов, так что песнями можно делиться вручную. В браузере выбирайте оба файла сразу.
- «Compose New Songs With AI» (включено по умолчанию): отключите её — и барды будут петь только те песни, что у вас уже есть, а на запросы, которым ничего не подходит, отвечать отказом.
- Импортированные песни никогда не удаляются автоматически. Они хранятся для каждого сохранения отдельно.
Один аккаунт ElevenLabs на нескольких игроков @Min
Теперь несколько человек могут использовать один аккаунт ElevenLabs, не удаляя и не переклонируя голоса друг друга.
- Переключатель: Voice → Text-to-Speech → ElevenLabs → Advanced → Shared Account (по умолчанию выключен). Включить его должны все, кто пользуется этим аккаунтом.
- При включении тип голоса, уже клонированный кем-то другим, используется как есть, поэтому первый, кто клонирует определённый тип голоса, задаёт его образец для всех.
- Голоса игрока и кастомных NPC всё равно клонируются отдельно для каждого игрока.
Настройка GPU для Whisper без привязки к конкретному CUDA toolkit @langfod
Распознаванию речи Local Whisper больше не требуется именно CUDA 12.9 toolkit: подойдёт любой CUDA 12.x runtime версии 12.9 и выше. При более старом или отсутствующем runtime происходит откат на Vulkan или CPU. (Размер сборки немного увеличился из-за поддержки большего числа CUDA runtime.)
- Список GPU Device на странице Speech-to-Text показывает реальные устройства (например, «GPU 0 - CUDA0», «GPU 1 - Vulkan0») после запуска распознавания речи.
- Настройка устройства теперь — это индекс устройства ggml: первыми идут устройства CUDA, затем Vulkan, затем CPU. При одной видеокарте остаётся device 0; при нескольких GPU стоит заново выбрать свою карту.
- Сохранённое устройство, которого пока нет в списке, остаётся выбранным и помечается соответствующим образом.
- Backend OpenCL убран; GPU Intel и AMD используют Vulkan.
- Причина, по которой CUDA была пропущена, указывается одной строкой в SkyrimNet.log («CUDA backend skipped»).
Уровень рассуждений (reasoning effort) для каждой модели @Min
Переключатель «Allow Reasoning» теперь стал уровнем: off, model default, minimal, low, medium или high. Задать его можно для каждой модели в панели настроек (значок шестерёнки) редактора ротации — либо для варианта / глобально в OpenRouter.yaml как reasoning_effort. Думающие модели, такие как Gemini 3.x Flash, можно держать на minimal вместо их стандартного medium — именно на это уходила большая часть задержки и выходных токенов.
- Модель, у которой невозможно отключить рассуждения (ошибка OpenRouter «reasoning is mandatory», код 400), больше не падает при уровне off: запрос один раз повторяется с уровнем minimal, а модель запоминается на сессию, так что последующие запросы не теряют время на лишний round trip.
- Существующие конфигурации продолжают работать: reasoning: true воспринимается как model default, а reasoning: false — как off. При сохранении записывается новый ключ.
- Пресеты (из каталога и собственные) могут задавать reasoning_effort глобально, для варианта или для конкретной модели, и рекомендованная модель в селекторе может нести своё значение.
Диалоги @dekana.
- Меньше нерелевантных воспоминаний в припоминании — NPC получают меньше воспоминаний, не связанных с разговором, а наиболее близкое совпадение чаще оказывается первым. Memory → Min Relevance Score теперь по умолчанию 0.6 (было 0.5); в существующих конфигурациях это предложат под Updated Defaults. Схожесть теперь масштабируется иначе, так что вручную подобранный Similarity Threshold может потребовать пересмотра.
- Лор находится по названию, и меньше нерелевантного лора — NPC находят запись world knowledge, когда её спрашивают по названию, и намного реже получают нерелевантный лор. Knowledge переэмбеддится один раз в фоне. Новый Knowledge Similarity Threshold (0.40); Knowledge Min Score 0.575 — предложено под Updated Defaults.
LLM и маршрутизация @Min
- Улучшение задержки — Снижена задержка для всех исходящих HTTP-запросов к удалённым серверам. В тестах это дало снижение задержки на 60–210 мс на каждый вызов (а за время одного диалогового запроса это оплачивается 3–4 раза). Для игроков не из Северной Америки, у которых время прохождения сигнала до удалённых провайдеров больше, эффект будет заметнее, чем в тестах.
- Кэширование промптов — Улучшена поддержка кэширования промптов в движке. Время жизни кэша у каждого провайдера, 5 минут или 1 час, находится в AI › Providers под Advanced. Новый экспериментальный плагин перестраивает промпты, чтобы это использовать: https://discord.com/channels/1287232260617015336/1559073450365165629. Должно снизить расходы и повыс��ть скорость.
- Ответы LLM корректно завершаются, останавливаются и переключаются на резерв — Ответ, у которого зависла первая модель, теперь завершается, когда закончит резервная; длинный резервный ответ больше не обрывается на 30 секундах, а отменённый ответ прекращает стриминг, включая музыку Bard Singing. Профили с не-английскими названиями папок теперь загружают свои настройки.
- Пресеты задают нижнюю границу квантования fp8 — Применение встроенного пресета или новая установка задают нижнюю границу квантования fp8, поэтому OpenRouter пропускает провайдеров с заявленным квантованием ниже этого уровня. Изменить это можно через Quantization floor на странице Providers.
- External Whisper по умолчанию указывает на OpenRouter — В новых установках распознавание речи External Whisper по умолчанию направлено на OpenRouter (openai/whisper-1), так что ключ OpenRouter, который вы уже используете для LLM, работает и для STT; существующие конфигурации STT сохраняют свой endpoint и модель. External STT всё равно остаётся довольно медленным — если у вас хватает мощности, рекомендую использовать локальный вариант.
Для авторов модов @Min
- Papyrus может переключать главный выключатель SkyrimNet — SkyrimNetApi.TriggerToggleGlobalAI() включает или отключает весь SkyrimNet, точно так же, как нажатие главной горячей клавиши переключения. DLL предоставляла эту функцию уже давно, но скрипт никогда её не объявлял, поэтому игра отказывалась её привязывать и при каждой загрузке записывала ошибку в лог.
Исправления ошибок
- NPC ничего не вспоминали при игре на русском, японском или китайском — теперь NPC вспоминают воспоминания и world knowledge на японском и китайском, а барды и /playsong находят сохранённые песни с не-английскими названиями. @dekana.
- NPC иногда не вспоминали ничего после перехода в новую зону — результат поиска воспоминаний последнего разговора теперь сохраняется при смене зоны до тех пор, пока не истечёт срок его действия, а неудачный поиск больше не оставляет заглушку на пять минут. @dekana.
- NPC не вспоминали ничего, когда поиск воспоминаний ещё не был готов — если поиск воспоминаний через LLM ещё не выполнился или завершился ошибкой, припоминание теперь ищет по тексту недавнего разговора, а не только по локации. @dekana.
- Промпты дневника и мыслей переиспользовали устаревшие результаты предыдущего диалогового шага — дневники, мысли, реакции на книги и разобранные строки больше не читают закэшированные значения декораторов из уже завершённого шага, а параллельные шаги больше не рискуют их друг другу «подсунуть». @Min
- Улучшения прямой видимости (Line of Sight) — Исправлено несколько проблем, из-за которых прямая видимость игнорировалась в разных ситуациях, позволяя NPC слышать вас через стены. Исправлено. @Min
- Исправление подвисания при произнесении NPC ванильной диалоговой строки — исправлено условие, которое могло вызывать микрозависание, когда NPC выбирал действие по квестовой линии. @Min
- NPC называют вас Драконорождённым раньше, чем вы им становитесь — около 50 био персонажей больше не называют игрока Драконорождённым в тех случаях, где это было лишь заменой слова «игрок», например у спасителя Leyathil, спутника Melana, скаала, освобождённого от Miraak, или Слушателя для Cicero. Седобородые, драконы, Miraak и другие персонажи, чья история строится вокруг Драконорождённого, продолжают называть его Драконорождённым. @dekana.
- Случайное гендерное местоимение в промпте мыслей игрока — одно упоминание «her» в промпте мыслей игрока заменено на «their». @dekana.
- ElevenLabs Silent Voice — исправлена регрессия в Beta26, которая могла приводить к тому, что ElevenLabs замолкал после переклонирования. @Min
- External Whisper требовал API-ключ для локального сервера — External Whisper, направленный на ваш собственный сервер (например, whisper.cpp), теперь работает с пустым полем API-ключа; для OpenAI и OpenRouter ключ всё ещё нужен. @dekana.
- Локальной модели решений требовался заглушечный API-ключ — провайдеру решений, который вы добавляете сами, или встроенному OpenRouter (Decisions), направленному на ваш собственный сервер, больше не нужен заглушечный API-ключ. @dekana.
- Запросы к nano-gpt падали после минуты-двух простоя — теперь запрос повторяется через новое соединение вместо падения с ошибкой «Error in the HTTP2 framing layer»; соединения с nano-gpt поддерживаются активными. @Min
- Для нового провайдера не удавалось задать API Style — теперь можно выбрать API Style нового провайдера перед сохранением, даже сразу после переименования. Выпадающий список теперь читается на тёмных темах. @dekana.
- Update Bio показывал «The string did not match the expected pattern.» — когда Update Bio не может выполниться, всплывающее уведомление теперь сообщает причину, ��апример NPC, которого вы ещё не встречали в этом сохранении. @dekana.
- Решение по одному обновлённому значению по умолчанию сбрасывало остальные — принятие или сохранение одного изменения в Settings › Updated Defaults теперь оставляет остальные в списке, и в этом запуске, и в следующем. @dekana.
- MCM заполнял Papyrus.0.log ошибками CurrentPage_var — загрузка сохранения больше не пишет в лог Papyrus десятки ошибок «Failed to find variable ::CurrentPage_var» от skynet_McmScript. @Min
- Заголовочные файлы C++ в developer kit — плагины SKSE, подключавшие PublicAPI.h из developer kit Beta26, не компилировались, потому что в комплекте отсутствовал PublicAPIDiaryQuery.h. Теперь он включён в комплект, в папке CppAPI/. @Min
- Новая игра после отменённой загрузки больше не ломает базу данных — отказ от запроса «continue loading?» при загрузке сохранения с последующим запуском новой игры приводил к ошибке «Database is not initialized»; теперь новая игра запускается нормально. @dekana.