Локальная мультимедийная RPG-модель ИИ: создание персонажей, изображений, звуков | AiManual
AiManual Logo Ai / Manual.
02 Июл 2026 Гайд

Как собрать локальную мультимедийную RPG-модель: дьявольски подробный гайд

Пошаговое руководство по созданию локальной ролевой ИИ-модели с генерацией текста, изображений и звуков. Ollama, ComfyUI, TTS. Работает на 24 ГБ VRAM.

Почему обычные ролевые ИИ — это фейк

Попробуйте попросить ChatGPT сыграть злобного некроманта, который сжигает деревни. Восстание машин откладывается — цензура режет по живому. Claude вообще отказывается даже упоминать насилие. А Gemini просто выдаёт «Я не могу участвовать в ролевой игре с таким контентом» и уходит в отказ. Знакомо?

Проблема не в том, что ИИ слабый. Проблема в том, что корпоративные модели задушены safety-фильтрами. Вы платите за токены, а получаете беззубого попугая. Вдобавок — никаких изображений, звуков, погружения. Только сухой текст.

Выход? Локальная мультимедийная ролевая модель. Вы сами решаете, что можно, что нельзя. Вы прикручиваете генерацию изображений персонажей и окружения. Вы добавляете озвучку. И всё это работает на вашем железе, без интернета и без ограничений. Хотите создать мир, где ИИ-мастер описывает таверну с помощью картинки, а NPC говорит голосом — пожалуйста.

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

Железо: что нужно, чтобы не выпасть в осадок

Спойлер: без видеокарты с 24 ГБ VRAM вы либо упрётесь в скорость улитки, либо будете играть в «угадай краш». Минимальный порог — 12 ГБ (RTX 3060), но комфортно — 24 ГБ (RTX 4090 или две 3090). На 24 ГБ вы сможете запустить Qwen3-72B в 4-битной квантизации + Stable Diffusion 3.5 на том же GPU через CompyUI. Если у вас 48 ГБ — вообще рай, можно взять полный Qwen3-72B или Mistral Large 3 и не париться.

Не экономьте на оперативной памяти: 32 ГБ — минимум, 64 ГБ — хорошо. LLM будет кешировать историю диалога, а она может раздуться до десятков тысяч токенов. SSD NVMe обязателен — загрузка моделей весом 40+ ГБ на HDD превратит старт в чаепитие.

💡
Подробнее о подборе конфигурации под 24 ГБ VRAM читайте в «Архиве знаний на случай апокалипсиса» — там таблица моделей с квантизациями под разные карты.

Если своего GPU нет — не беда. Арендуйте на Vast.ai инстанс с RTX 4090 за $0.40/час. За вечер игры вы потратите меньше, чем подписка на ChatGPT Plus.

Выбор движка: Ollama vs LM Studio — кто кого?

Оба инструмента запускают локальные LLM с API, совместимым с OpenAI. Разница в удобстве и фишках.

КритерийOllamaLM Studio
ЗапускCLI + systemdГрафический интерфейс, встроенный сервер
Управление моделямиЧерез ollama pullСкачивание из интерфейса, поддержка GGUF
APIOpenAI-compatibleOpenAI-compatible + встроенный чат
Поддержка изображенийТолько текстТолько текст

Для нашего сценария Ollama удобнее: он легче, ставится как демон, и к нему просто стучаться из Python. LM Studio хорош, если вы любите возиться с настройками семплирования в GUI, но в автоматизации он проигрывает.

1Устанавливаем Ollama и тянем модель

curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3:72b-instruct-q4_K_M  # 4-бит, ~45 ГБ, помещается на 24 ГБ

Качается долго, да. Заварите кофе. Альтернатива — mistral-large:123b-instruct-q2_K, но качество текста серьёзно просядет. Лично я ставлю Qwen3-72B: он отлично держит контекст и не тупит на ролевых промптах.

Важно: не используйте чистую базовую модель. Она не знает, что такое игра в роли. Вам понадобится правильно написанный system prompt. Об этом — дальше.

Сборка мозга: промпт-инжиниринг для RPG-персонажа

Хорошая ролевая модель держится на трёх китах: личность персонажа, сеттинг мира и правила игры. Всё это запихивается в system prompt. Плохой пример:

Ты — эльфийка Лиатра. Отвечай в стиле фэнтези.

Такой промпт сломается на первом же действии игрока. Модель начнет забывать, кто она, и скатится в «Как я могу вам помочь?».

Правильный промпт должен быть структурирован как YAML или JSON — я использую формат Instructor. Вот фрагмент, который я вставляю в system message:

character:
  name: Лиатра Элдрим
  race: High Elf
  class: Ranger
  personality: гордая, вспыльчивая, верная
  background: потеряла лесной дом в войне
  speaking_style: использует архаизмы, редко говорит прямо
world:
  setting: лес Элдред, магия низкая, политические интриги
rules:
  - отвечай строго от лица персонажа
  - описывай эмоции и жесты в скобках *курсивом*
  - никогда не ломай четвёртую стену
format:
  - текст ответа до 200 слов
  - после текста генерируй ссылку на изображение сцены

Полный разбор такого подхода (вплоть до схем Instructor) я давал в гайде по генерации игровых миров. Рекомендую прочитать — там же объясняется, как модель не теряет нить сюжета.

Важный нюанс: промпт занимает ~500 токенов. Плюс история диалога — ещё 4-8K. Если модель держит 32K контекста — хорошо. 128K — идеально. Qwen3-72B как раз умеет 128K, так что можно не бояться длинных сессий.

2Прикручиваем «глаза» — генерацию изображений

Текст текстом, но RPG без картинок — как пицца без сыра. Нам нужна интеграция с ComfyUI. Ставим:

git clone https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
pip install -r requirements.txt
python main.py --listen 0.0.0.0 --port 8188

Качаем модель. Для 24 ГБ VRAM лучший выбор — SDXL Turbo (шаги 4-8, качество среднее, но быстро) или Flux.1-dev (8 шагов, отличное качество, требует ~12 ГБ). Я использую Flux.1-dev — картинки получаются сочными, персонажи не кривые.

В ComfyUI нужно загрузить workflow, который принимает текстовый промпт и возвращает изображение. Можно сделать API-эндпоинт. Пример запроса:

import requests

def generate_image(prompt):
    workflow = load_workflow("flux_workflow_api.json")
    workflow["6"]["inputs"]["text"] = prompt
    resp = requests.post("http://localhost:8188/prompt", json={"prompt": workflow})
    return resp.json()["images"][0]  # base64 или filename

Готово. Теперь ваша LLM может писать: «*Лиатра выходит из тени. Сгенерируй изображение: эльфийка в плаще, лук в руках, лунный свет*.» — и картинка появляется.

3Голос персонажа — XTTS v2

Читать текст глазами — прошлый век. Добавим синтез речи. Мой выбор — XTTS v2 от Coqui (форк). Он умеет клонировать голос по 3-секундному сэмплу и говорит на русском (с акцентом, но сойдёт). Альтернатива — Silero TTS — чище по-русски, но нельзя изменить тембр.

# Установка через pip
tts-server --model_name tts_models/multilingual/multi-dataset/xtts_v2 --port 8020

Python-код для генерации голоса:

import requests
url = "http://localhost:8020/tts_to_audio/"
data = {
    "text": "Вас приветствует таверна «Три сломанные стрелы».",
    "speaker_wav": "liatra_reference.wav",
    "language": "ru"
}
resp = requests.post(url, json=data)
with open("output.wav", "wb") as f:
    f.write(resp.content)

Связываем: после генерации текста LLM, мы отправляем его в TTS и проигрываем через pygame. Вуаля — NPC заговорил.

Связываем всё в один пайплайн на Python

Код, который держит сессию, гоняет сообщения и параллельно запускает генерацию картинок/звука. Вот скелет (без обработки ошибок, но для старта пойдёт):

import ollama
import requests
import base64

SYSTEM = "..."  # длинный YAML-промпт
history = [{"role": "system", "content": SYSTEM}]

def generate_image(prompt):
    # вызов ComfyUI
    pass

def generate_voice(text):
    # вызов TTS
    pass

while True:
    user = input("Вы: ")
    history.append({"role": "user", "content": user})
    
    response = ollama.chat(model="qwen3:72b", messages=history)
    reply = response["message"]["content"]
    print(f"{reply}\n")
    
    # Ищем в ответе маркер изображения, например "промпт"
    if "" in reply:
        img_prompt = reply.split("")[1].split("")[0]
        img = generate_image(img_prompt)
        display(img)  # например, в браузере
    
    # Озвучка по флагу 
    if "" in reply:
        text = reply.split("")[1].split("")[0]
        generate_voice(text)
    
    history.append({"role": "assistant", "content": reply})

На реальном проекте вы захотите асинхронность и очередь задач. Но для демонстрации — сойдёт.

Типичные ошибки и как их избежать

  • Модель забывает персонажа. Причина — слабый промпт или слишком короткий контекст. Решение: каждые N шагов перевставляйте system prompt в начало истории (но не чаще, чтобы не тратить токены).
  • Картинки не соответствуют тексту. LLM генерирует промпт для картинки сам, и он может быть плохим. Решение: просите модель выводить структурированный JSON с полем image_prompt, который вы обрабатываете отдельно.
  • Задержки. Генерация изображения занимает 5-10 секунд. TTS — ещё 2-3 секунды на фразу. Решение: показывайте текст сразу, а картинку подгружайте позже.
  • Переполнение контекста. После 50 ходов история может стать слишком длинной. Решение: суммаризируйте старые сообщения через LLM и заменяйте их резюме.

Подробно про балансировку контекста я рассказывал в статье о создании AI-мастера для D&D — там есть конкретные цифры и стратегии.

Разворачиваем интерфейс

Хотите, чтобы друзья могли подключаться? Заверните всё в Gradio или Text Generation WebUI (он умеет плагины). Gradio — проще: три блока: чат, поле для картинки, аудиоплеер.

import gradio as gr

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox(label="Ваше действие")
    img = gr.Image(label="Сцена")
    audio = gr.Audio(label="Голос")
    
    def respond(message, history):
        # вызываем пайплайн
        return history, img_path, audio_path
    
    msg.submit(respond, [msg, chatbot], [chatbot, img, audio])

demo.launch(server_name="0.0.0.0", server_port=7860)

В результате получаете веб-морду, доступную из любой локалки. Можно даже пробросить через Cloudflare Tunnel, чтобы играть с друзьями.

FAQ

Сколько это стоит по электричеству?

RTX 4090 под нагрузкой жрёт ~350 Вт. За час игры — ~0.35 кВт·ч. По тарифу 5 руб/кВт·ч — это 1.75 рубля. Дешевле любой подписки.

Какие модели LLM лучше всего подходят для RPG?

На текущий момент (июль 2026) топ: Qwen3-72B (креативность, длинный контекст), Mistral Large 3 (соблюдение инструкций), Gemma3-27B (быстро, но меньший контекст). За цензурой следить не надо — локальные модели не фильтруют. Подробное сравнение — в обзоре локальных LLM и цензуры.

Можно ли обойтись без второго GPU для ComfyUI?

Да, если у вас 24 ГБ VRAM, вы можете запустить и LLM, и диффузионку на одном GPU. Но генерация картинок будет тормозить LLM — используйте очерёдность или выделяйте 8 ГБ под ComfyUI (например, флаг --lowvram).

А если я хочу ещё и музыку?

Добавьте MusicGen от Meta. Он генерирует 10-секундные лупы по текстовому описанию. Запускается локально. Но это уже OOM-риск — 24 ГБ может не хватить. Лучше вынести на CPU+RAM.

Вместо послесловия

Локальная мультимедийная RPG-модель — это не игрушка. Это демонстрация того, что свободный ИИ существует. Не под софт-фильтрами OpenAI, не под присмотром модераторов. Только вы, ваша видеокарта и безграничная фантазия.

Я не буду говорить «попробуйте и удивитесь». Скажу иначе: когда вы впервые услышите голос созданного вами персонажа, который помнит, о чём вы говорили час назад — вы поймёте, ради чего это всё. И да, если коллеги крутят пальцем у виска — просто покажите им рабочую демку. Мой опыт преодоления скепсиса говорит: работает безотказно.

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