111 lines
5.7 KiB
Markdown
111 lines
5.7 KiB
Markdown
# AI RPG — гибкая ролевая игра с ИИ
|
||
|
||
Веб-приложение для проведения ролевых игр с искусственным интеллектом.
|
||
FastAPI (backend) + React/Vite/TypeScript (frontend) + PostgreSQL + Redis + Qdrant.
|
||
Упаковано в Docker Compose.
|
||
|
||
## Возможности
|
||
|
||
- Регистрация / аутентификация пользователей
|
||
- Первичная инициализация администратора по одноразовому токену (выводится в консоль backend при первом запуске)
|
||
- Панель администратора: настройка OpenAI-совместимого endpoint'а, токена, модели, параметров генерации, лимитов контекста
|
||
- Создание мира: пресет (встроенный Fantasy) или с нуля через многошаговый диалог с ИИ
|
||
- ИИ генерирует: расширенный сеттинг, правила, JSON-схему состояния мира (характеристики, инвентарь, статы), начальную дату/время, общие рельсы сюжета
|
||
- Игрок правит и подтверждает → запускается первая итерация
|
||
- Сессия: чат-интерфейс со стримингом, глоссарий (RAG), лист персонажа, кнопки опций + свободный ввод
|
||
- Итерация: ИИ использует инструменты (dice, RAG, обновление состояния, sub-агенты, отложенные триггеры) и пишет сценарный шаг + технический "за-кадровый" шаг
|
||
- Контекстный менеджер: гарантированные последние N сообщений + динамическая граница с суммаризацией
|
||
- Отложенные триггеры, привязанные к дате/времени мира (background worker)
|
||
- Двуязычный UI (RU/EN)
|
||
- Логирование всех LLM-вызовов в БД
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
# 1. Скопировать .env и при необходимости отредактировать
|
||
cp .env.example .env
|
||
|
||
# 2. Поднять стек
|
||
docker compose up --build
|
||
|
||
# 3. В логах backend найти строку:
|
||
# "ADMIN_SETUP_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxx"
|
||
# (или задать ADMIN_SETUP_TOKEN в .env вручную)
|
||
|
||
# 4. Открыть http://localhost:5173
|
||
# - Перейти на /admin/setup
|
||
# - Ввести токен → создать учётку администратора
|
||
# - Зайти в Admin Panel → настроить LLM endpoint
|
||
|
||
# 5. Зарегистрировать обычного пользователя и начать создавать мир
|
||
```
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
┌────────────┐ SSE ┌────────────────────────────┐
|
||
│ Frontend │ <──────► │ FastAPI backend │
|
||
│ React/Vite │ HTTP │ - auth (JWT) │
|
||
└────────────┘ │ - admin / settings │
|
||
│ - worlds / sessions │
|
||
│ - engine (orchestrator) │
|
||
│ - tools (dice/rag/...) │
|
||
│ - context manager │
|
||
│ - trigger runner │
|
||
└──┬──────────┬──────────┬───┘
|
||
│ │ │
|
||
┌────────▼─┐ ┌─────▼────┐ ┌───▼─────┐
|
||
│PostgreSQL│ │ Redis │ │ Qdrant │
|
||
│ (data) │ │ (queues) │ │ (RAG) │
|
||
└──────────┘ └──────────┘ └─────────┘
|
||
```
|
||
|
||
## Локальная разработка
|
||
|
||
```bash
|
||
# Backend hot reload
|
||
docker compose up backend postgres redis qdrant
|
||
|
||
# Frontend dev
|
||
docker compose up frontend
|
||
|
||
# Миграции (автоматически при старте backend, но можно вручную)
|
||
docker compose exec backend python -m app.migrations.init_db
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
ai-rpg/
|
||
├── docker-compose.yml
|
||
├── .env.example
|
||
├── backend/
|
||
│ ├── Dockerfile
|
||
│ ├── requirements.txt
|
||
│ └── app/
|
||
│ ├── main.py # FastAPI entrypoint
|
||
│ ├── config.py # Settings
|
||
│ ├── api/ # Routers
|
||
│ ├── core/ # LLM client, security, rag
|
||
│ ├── engine/ # Game orchestrator
|
||
│ │ └── tools/ # LLM tool-call handlers
|
||
│ ├── models/ # SQLAlchemy models
|
||
│ ├── schemas/ # Pydantic schemas
|
||
│ ├── prompts/ # Bilingual prompt templates
|
||
│ └── workers/ # Background workers (triggers)
|
||
└── frontend/
|
||
├── Dockerfile
|
||
├── package.json
|
||
└── src/
|
||
├── api/ # API client
|
||
├── components/ # UI components
|
||
├── pages/ # Page components
|
||
├── store/ # Zustand stores
|
||
├── hooks/ # React hooks
|
||
└── i18n/ # RU/EN translations
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
MIT
|