Skip to content

Guljaca/RPG-AI-Assistant

Repository files navigation

RPG AI Assistant

Screenshot_109

RPG Assistant — ролевая игра с локальными LLM

Скрипт позволяет играть в ролевые игры, используя даже небольшие модели, вроде Qwen 3.5 9B Qwen 3.5 35B. Для кого этот проект: Для тех, кому нужно честное мышление от нейронки с полным обоснованием тех или иных решений.

📖 Описание возможностей

  • Многоэтапная обработка — программа делит процесс обработки запроса на несколько этапов. На каждом этапе модели даётся одна задача и минимальный system prompt.
  • Гибкое управление контентом — внутри интерфейса можно создавать игровые объекты, редактировать промты и менять их очередность загрузки.
  • Не навязывает решения — скрипт не принимает решений за модель, он только разбивает задачу и передаёт данные между шагами.
  • Общение через Tools — модель взаимодействует с программой через механизм Tools.
  • Элементы случайности — добавлены случайные события, чтобы генерация была интереснее.
  • Множество NPC — программа позволяет модели обрабатывать сразу много персонажей.
  • Непредвзятость — реакция каждого персонажа обрабатывается отдельно: модель сначала определяет, что персонаж «планирует» сделать, затем сводит их решения на подготовленную сцену и выводит итог.
  • Полная обратная связь:
    • Интерфейс показывает, какие промты отправляются в модель.
    • Отображается весь процесс мышления модели (включая обращения к скрипту).
    • В папке logs хранится до 30 логов с каждым решением модели.
    • Возможность перегенерации последнего сообщения.
  • Долговременная ассоциативная память. Модель сохраняет информацию о каждом объекте, и получает ее только если объект есть на сцене.
  • ** Полный контроль над всем процессом принятия решений**: каждый шаг размышлений можно отключить и отредактировать

⚙️ Установка и использование

  1. Установите Python и пропишите его в PATH.
  2. Установите LM Studio.
  3. Скачайте подходящую модель (см. требования ниже).
  4. Запустите install_deps.bat — установятся зависимости Python.
  5. Запустите run_rpg_assistant.bat.
  6. В настройках выберите модель из списка.
  7. Нажмите «Начать игру».

🧠 Требования к модели

  • Поддержка Tools
  • Поддержка Thinking
  • Желательно Instruct
  • Желательно Uncensored
  • Подойдёт квантизация Q4_K_M, Q6 позволит чуть больше контекста.

Рекомендуемые модели

  • Qwen 3.5 9B — даёт хороший результат.
  • Личный пример автора:
    qwen3.5-9b-claude-4.6-os-auto-variable-heretic-uncensored-thinking-max-neocode-imatrix@q6_k

⚠️ Важное замечание по проблемам

  • Если в Thinking стало появляться мало деталей — вы перегрузили модель информацией.
  • Если модель не может несколько раз вызывать функции — вы перегрузили модель информацией.
  • Первым делом отключите короткую память
  • Нужно уменьшить длину промтов.
  • Попробуйте перегенерировать сообщение
  • Уменьшите количество сообщений в истории до 2-х и отключмие краткую память
  • Попробуйте временно отключить историю и другие не системные промты
  • Уменьшите температуру до 0.3-0.5

🔁 Логика процесса (немного устаревшая, но для понимания сути)

Логика скрипта — игровой цикл обработки действий игрока

Документ описывает пошаговую логику работы скрипта, от получения сообщения игрока до финального описания сцены и обновления ассоциативной памяти.


Стадия 0 — Получение сообщения

  • Игрок отправляет сообщение.

Стадия 1 — _stage1_request_descriptions (Запрос описаний объектов)

Входные данные для модели:

  • Назначенные промты с правой панели (в заданном порядке, без системного промта).
  • Сообщение игрока — воспринимается как запланированное действие.
  • Системный промт стадии (последний в списке, после сообщения игрока).
  • Список всех доступных объектов (id, имена) от скрипта.
  • Информация из ассоциативной памяти об этих объектах.

Действия модели:

  1. Объединяет полученные данные в обновлённый список объектов.
  2. На основе информации определяет, какую сцену разыграть.
  3. Решает, какие промты объектов нужно запросить у скрипта.
  4. Запрашивает промты через Tools.
  5. Получив всё, обдумывает сцену.
  6. Отправляет итоговый Список объектов через Tools.

Выходные данные:

  • Обновлённый список объектов
  • Список имён всех объектов

Обработка ошибок:

  • При ошибке — попытаться распарсить сообщение.
  • Если за отведённые попытки решение не принято и скрипт возвращался со стадии 2 дважды — принять последний список объектов и перейти на стадию 3.

Стадия 2 — _stage1_validate_scene (Проверка уместности персонажей)

Входные данные:

  • Назначенные промты с правой панели.
  • Список объектов.

Действия модели:

  • Проверить, все ли персонажи уместны (согласно системному промту).

Команды:

  • Если всё в порядке → Tools с командой одобрения.
  • Если нет → Tools с командой неодобрения.

Выход:

  • Список объектов (передаётся дальше).

Обработка ошибок:

  • При ошибке — попытаться распарсить сообщение.
  • Если за отведённые попытки (макс. 3) решение не принято — взять последний список персонажей и перейти на стадию 3.

Переходы:

  • Одобрение → стадия 3.
  • Неодобрение → повтор стадии 2 (до 3 попыток).

Стадия 3 — Проверка правдивости действия игрока

Входные данные:

  • Назначенные промты с правой панели.
  • Сообщение игрока.

Действия модели:

  • Проверить, не врёт ли игрок (согласно системному промту).
  • Если врёт — изменить сообщение на соответствующее реальности (например, «открыл дверь» → «попытался открыть дверь»).

Выход:

  • Список объектов
  • Список имён всех объектов
  • Отредактированное сообщение игрока (отправляется через Tools)

Обработка ошибок:

  • При ошибке — попытаться распарсить.
  • Если за отведённые попытки решение не принято — взять последний сценарий и перейти на стадию 4.

Переход:

  • После отправки → стадия 4.

Стадия 4 — _stage1_player_action (Действие игрока и бросок d20)

Входные данные:

  • Назначенные промты с правой панели.
  • Сценарий.
  • Сообщение игрока.
  • Набор сгенерированных чисел d20.

Действия модели:

  • Описывает, что игрок сделал в текущих условиях.
  • Берёт число d20 по порядку и определяет успешность (по правилам бросков, если есть; иначе симулирует).
  • Описывает результат.

Выход:

  • Список объектов
  • Список имён всех объектов
  • Результат действий игрока (через Tools)

Обработка ошибок:

  • При ошибке — попытка распарсить.
  • Если не удалось — взять последний сценарий и перейти на стадию 5.

Переход: → стадия 5.


Стадия 5 — _stage1_random_event (Случайное событие, бросок d100)

Входные данные:

  • Назначенные промты с правой панели.
  • Список имён всех объектов.
  • Набор сгенерированных чисел d100.

Действия модели:

  • Определяет вероятность события (по системному промту: до какого числа бросок успешен).
  • Если нет правил — симулирует бросок.
  • Решает, произойдёт ли событие.

Выход:

  • Список объектов
  • Список имён всех объектов
  • Результат действий игрока
  • Событие (опционально, через Tools)

Обработка ошибок:

  • При ошибке — попытка распарсить.
  • Если не удалось — событие не происходит, переход на стадию 7.

Переходы:

  • Если событие есть → стадия 5.1
  • Если нет → стадия 7

Стадия 5.1 — (если событие случилось) Подбор объектов для события

Входные данные:

  • Назначенные промты с правой панели.
  • Событие.
  • Список объектов.
  • Информация из ассоциативной памяти.

Действия модели:

  • Объединяет информацию в обновлённый список объектов.
  • Проверяет, достаточно ли объектов для описания события.
  • Если нет — выбирает нужные из списка имён и запрашивает их описания через Tools.

Выход:

  • Список объектов + новые объекты (опционально)
  • Список имён всех объектов
  • Результат действий игрока
  • Событие

Обработка ошибок:

  • При ошибке — попытка распарсить.
  • Если не удалось — событие не происходит, переход на стадию 7.

Переход: событие проходит проверку уместности (как в стадии 2), затем → стадия 5.2.


Стадия 5.2 — (опционально) Определение тона события (d20)

Входные данные:

  • Назначенные промты с правой панели.
  • Событие.
  • d20 (насколько хорошее или плохое событие).

Действия модели:

  • Бросает d20.
  • Описывает событие соответственно.

Выход:

  • Список объектов + новые объекты
  • Список имён всех объектов
  • Результат действий игрока
  • Готовое событие (через Tools)

Обработка ошибок:

  • При ошибке — попытка распарсить.
  • Если не удалось — событие не происходит, переход на стадию 7.

Переход: → стадия 7.


Стадия 6 — _stage1_turn_order (ЛИШНЯЯ, будет удалена)

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


Стадия 7 — Обработка каждого персонажа (планы)

Скрипт отправляет персонажей из Списка объектов + новые объекты по одному.

Входные данные для каждого вызова:

  • Назначенные промты с правой панели.
  • Список объектов + новые объекты.
  • Результат действий игрока.
  • Готовое событие (опционально).
  • Один персонаж.

Действия модели:

  • Описывает, что персонаж планирует делать в текущей ситуации.

Выход:

  • Словарь планов персонажей (пополняется)
  • Список объектов + новые объекты
  • Список имён всех объектов
  • Результат действий игрока
  • Готовое событие

Обработка ошибок:

  • При ошибке — попытка распарсить.
  • Если не удалось — персонаж ничего не планирует.

Переход: после обработки всех персонажей → стадия 8.


Стадия 8 — _stage3_final (Итоговая история)

Входные данные:

  • Назначенные промты с правой панели.
  • Словарь планов персонажей.
  • Список объектов + новые объекты.
  • Результат действий игрока.
  • Готовое событие (опционально).

Действия модели:

  • На основе планов персонажей и всех данных создаёт итоговую историю.

Выход (через Tools):

  • Словарь планов персонажей
  • Список объектов + новые объекты
  • Список имён всех объектов
  • Результат действий игрока
  • Готовое событие
  • Итоговая история

Переход: → стадия 9 (история показывается игроку).


Стадия 9 — Краткая выжимка произошедшего

Входные данные:

  • Итоговая история.

Действия модели:

  • Делает краткую выжимку произошедшего.

Выход (через Tools):

  • Все данные из стадии 8 + краткая выжимка.

Стадия 10 — Ассоциативная память (обновление состояния объектов)

Входные данные:

  • Итоговая история.
  • Список объектов + новые объекты.

Действия модели:

  • Определяет изменения и важные события, произошедшие с объектами.
  • Создаёт краткую выжимку для памяти.

Выход (через Tools):

  • Все данные из стадии 9 + ассоциативная память об объектах.

Сохранение: Скрипт сохраняет изменения в файле сессии. Количество хранимых записей настраивается в настройках (старые удаляются).


Общие замечания

  • Инструменты (Tools): используются для передачи данных между моделью и скриптом на всех стадиях.
  • Повторные попытки: при ошибках модель пытается распарсить сообщение; если после заданного числа попыток решение не принято — используется последнее допустимое значение или выполняется переход по умолчанию.
  • Системные промты: задаются отдельно для каждой стадии и всегда добавляются последними в список промтов.

📁 Структура логов

  • Папка logs — хранится до 30 последних логов, описывающих каждое принятое моделью решение.

💡 Совет

  • Работоспособность проверена на QWEN3.5 35b с квантованием кеша 4Q на RTX3060 12VRAM 32RAM.
    • Работа стабильная.
  • Работоспособность проверена на Qwen3.5-9B-Claude-4.6-OS-Auto-Variable-HERETIC-UNCENSORED-THINKING-MAX-NEOCODE-Imatrix-GGUF.
    • Частые ошибки работы Tools. Рекомендуется не отправлять пустые сообщения, настроить модель на минимальный входящий и выходящий контекст, не перегружать промтами. Результат выдаст все-равно. Вы можете его перегенерировать.

About

RPG AI Assistant

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors