Перейти к содержанию
Публикация AiManual

LLM-агенты играют в World of Warcraft: как устроен браузерный клиент и MCP-обвязка

Автор развернул приватный сервер World of Warcraft, создал браузерный клиент и MCP-обвязку, которая управляет игрой через WebSocket. Разбираем архитектуру связк

Коротко

Что будет в материале

  1. 01

    Что такое jankcraft.xyz и как LLM-агент играет в WoW

  2. 02

    Архитектура: как MCP и WebSocket управляют игрой

  3. 03

    Требования к железу: 24 ГБ или 16 ГБ RAM

  4. 04

    Как подключить облачную или локальную модель

Что такое jankcraft.xyz и как LLM-агент играет в WoW

Автор развернул приватный сервер World of Warcraft и написал браузерный клиент, который открывается на ПК и мобильных устройствах по адресу jankcraft.xyz. Играть можно бесплатно и без установки. Поверх клиента он собрал кастомный MCP и агентную обвязку: модель отправляет игровые команды по WebSocket, а точка входа для агента живёт по пути /agent. Об этом он написал в посте Come let your LLMs play World of Warcraft в сообществе r/LocalLLaMA.

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

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

Ключевые компоненты: сервер, клиент, MCP, агент

СлойЗа что отвечает
Приватный сервер WoWИгровой мир, который автор поднял на своём железе
Браузерный клиентИгра в браузере на ПК и мобильных, точка входа jankcraft.xyz
Кастомный MCPИнструменты для модели, перевод её вызовов в сигналы клиента
Агентная обвязкаОтправка сигналов по WebSocket, доступна по пути /agent

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

Архитектура: как MCP и WebSocket управляют игрой

Поток команд выглядит линейно:

LLM-агент -> MCP -> WebSocket-сигналы -> браузерный клиент -> игровой сервер WoW

MCP (Model Context Protocol) описывает, какие инструменты доступны модели и как их вызывать. В этом проекте MCP кастомный: он знает, какие действия поддерживает клиент, и превращает вызовы инструментов в понятные игре сигналы. Общая логика протокола и то, как её используют другие агентные продукты, разобрана в материале про PersonalJarvis и его MCP-плагины.

Раньше автор уже показывал эту связку в действии. Детали сборки и требования к скорости модели описаны в отдельной статье про Qwen, который играет в World of Warcraft через MCP.

Почему WebSocket, а не HTTP

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

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

Роль CORS при подключении моделей

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

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

Требования к железу: 24 ГБ или 16 ГБ RAM

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

Вариант 1: HyperQwen и Qwen3.8-27B-GPTQ-W4A16 (~24 ГБ RAM)

Первый ориентир: около 24 ГБ RAM, HyperQwen как средство запуска и модель Qwen3.8-27B-GPTQ-W4A16. Суффиксы в названии говорят о квантовании: GPTQ и схема W4A16 означают четырёхбитные веса и шестнадцатибитные активации. Такой формат снижает требования к памяти, сохраняя рабочие качества модели на агентных задачах.

Это рекомендация автора под конкретную связку, а не результат независимого тестирования. Сколько токенов в секунду выдаст ваша система, зависит от GPU, драйверов и длины контекста. Как ведёт себя модель на 27B в агентных сценариях на двух GPU, разобрано в материале про марафон по кодингу на локальной 27B.

Вариант 2: vLLM и Gemma4-e4b-coder (~16 ГБ RAM)

Второй ориентир: около 16 ГБ RAM, движок vLLM и кастомная Gemma4-e4b-coder. Здесь интереснее детали. Словарь модели урезан с 262K до 65K токенов, и это даёт примерно трёхкратный рост параллелизма. Модель дообучена на ~1.1B токенов, собранных на 20 языках программирования и 7 разных агентах. Кастомный MTP (multi-token prediction) позволяет дотянуть до ~200 ток/с на видеокарте 4060Ti.

Ориентир на 16 ГБ RAM заметно снижает порог входа. Стоит помнить, что цифра ~200 ток/с относится к конкретной GPU и конкретной сборке модели. На другом железе результат будет иным.

Как подключить облачную или локальную модель

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

Облачные подписки: что учесть

Автор отмечает, что при использовании облачной подписки ещё устраняет некоторые проблемы. Значит, это не самый отлаженный сценарий на текущий момент. CORS здесь не нужен: запросы идут на внешний сервер, а не к локальному порту. Зато появляются свои нюансы с задержкой и лимитами провайдера.

Локальные модели: пошаговый ориентир

Общий порядок такой:

  1. Запустите сервер модели локально (vLLM, HyperQwen или другой движок) с подходящей моделью.
  2. Включите CORS в настройках этого сервера, иначе браузер заблокирует запросы.
  3. Укажите адрес сервера модели в интерфейсе агента на jankcraft.xyz/agent.

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

Ограничения и риски: это рабочий прототип

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

Нестабильность соединения и перезапуски

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

Встроенные модели могут исчезнуть

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

Зачем это нужно: практическая ценность и перспективы

Как продукт проект пока не существует, и это нормально. Ценность в другом: он показывает рабочий способ связать LLM с внешней средой через MCP и WebSocket на живом примере.

Для разработчиков: тест MCP и агентных архитектур

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

Для энтузиастов: возможность запустить своего агента в WoW

Заходите на jankcraft.xyz, пробуйте встроенные модели или подключайте свою. Готовьтесь к нестабильности, возможному исчезновению встроенных моделей и необходимости держать CORS включённым. Тем, кто следит за игровыми экспериментами с LLM, будет интересен и опыт с Qwen 3.8 Flash Next в Baldur's Gate 2, где длинный сценарий тоже потребовал человека рядом.

Подписаться на канал