Skip to content

NewstarDevelop/AIWerewolf

Repository files navigation

AIWerewolf

AIWerewolf 是一个单人狼人杀对局应用:浏览器里由玩家控制一个座位,其余座位由本地规则 AI 或 OpenAI 兼容模型驱动。默认不需要配置真实模型即可启动游玩。

当前版本:0.2.0。已包含标准 9 人局、12 人白狼王守卫局、中文/英文界面、暂停/继续、历史对局恢复、模型调用追踪、结算复盘和 JSON 复盘导出。

功能

  • 板子:标准 9 人局;12 人白狼王 + 守卫局。
  • 角色:狼人、白狼王、平民、预言家、女巫、猎人、守卫。
  • 对局流程:夜间行动、遗言、白天发言、投票放逐、胜负结算。
  • AI:默认本地规则 AI;可配置全局或座位级 OpenAI 兼容 provider。
  • 复盘:终局后显示胜负、身份、夜间因果、票型、关键事件,并可导出 JSON。
  • 持久化:后端保存历史对局,前端可以继续未完成对局、查看已结束记录或删除不需要的记录。

环境要求

  • Python 3.11+
  • Node.js 20+
  • npm
  • uv

本地启动

在项目根目录安装依赖:

uv venv .venv
source .venv/bin/activate
uv pip install -e ".[dev]"
npm ci --prefix frontend

启动后端:

source .venv/bin/activate
npm run dev:backend

另开一个终端启动前端:

npm run dev:frontend

访问:

http://localhost:5173

健康检查:

http://localhost:8000/health

Windows PowerShell

在项目根目录执行:

uv venv .venv
.\.venv\Scripts\Activate.ps1
uv pip install -e ".[dev]"
npm ci --prefix frontend

如果 PowerShell 禁止激活脚本,先执行:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

启动后端:

.\.venv\Scripts\Activate.ps1
npm run dev:backend

另开一个 PowerShell 终端启动前端:

npm run dev:frontend

访问 http://localhost:5173

Docker

使用 Docker Compose 构建并启动:

npm run dev:docker

访问:

http://localhost:4173

后端会暴露在 http://localhost:8000。如果前端部署到额外 origin,把它加入 WEREWOLF_ALLOWED_ORIGINS,例如:

WEREWOLF_ALLOWED_ORIGINS=http://localhost:4173,http://127.0.0.1:4173 npm run dev:docker

历史对局默认保存在后端的 backend/data/sessions.sqlite3。Docker Compose 会把 /app/backend/data 挂载到命名卷 backend-data,所以重建容器不会丢失历史;如需清空 Docker 历史数据,执行 docker compose down -v

当前 Docker Compose 拓扑面向 single backend instance 部署。live WebSocket sessions and engine tasks are process-local,SQLite 只保存可恢复快照和历史记录;如果未来要水平扩展多个后端实例,需要先增加粘性会话和共享的实时会话/任务协调层。

LLM 配置

不配置 .env 时,后端使用本地规则 AI。

要启用真实模型,复制模板并填写 provider:

cp .env.example .env

常用变量:

OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4.1-mini
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_TIMEOUT_SECONDS=30
LLM_MAX_RETRIES=2
OPENAI_REASONING_EFFORT=low
OPENAI_MAX_COMPLETION_TOKENS=220

座位级覆盖使用 SEAT_<seat_id>_OPENAI_*,例如:

SEAT_2_OPENAI_API_KEY=sk-seat-2
SEAT_2_OPENAI_MODEL=gpt-4.1
SEAT_2_OPENAI_BASE_URL=https://api.openai.com/v1
SEAT_2_LLM_MAX_RETRIES=1

STITCH_* 变量作为 OpenAI 兼容别名也被支持。进程环境变量优先于 .env 文件。Docker Compose 会在项目根目录 .env 存在时把它传给后端,因此全局和座位级 provider 配置在容器里同样生效。

本地 OpenAI 兼容服务默认被拦截;开发时需要显式允许:

OPENAI_ALLOW_LOCALHOST=true
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_API_KEY=ollama
OPENAI_MODEL=qwen2.5:7b

如果后端运行在 Docker 内、模型服务运行在宿主机,使用:

OPENAI_ALLOW_LOCALHOST=true
OPENAI_BASE_URL=http://host.docker.internal:11434/v1

验证

完整单元和组件测试:

npm test

生产构建:

npm run build

浏览器端到端烟测:

npm run test:e2e

本地规则 AI 批量对局审计脚本:

node scripts/python-runner.mjs scripts/run_llm_game_batch.py --provider-mode local --games 10

真实 provider 审计默认读取 .env 或进程环境:

node scripts/python-runner.mjs scripts/run_llm_game_batch.py --provider-mode env --games 10

最近一次批量审计结果记录在 docs/llm-game-batch-findings.md

项目结构

backend/app/domain      角色、板子、玩家和对局上下文
backend/app/engine      狼人杀规则流程
backend/app/llm         本地和 OpenAI 兼容 LLM provider
backend/app/ws          WebSocket 网关、会话持久化和复盘 payload
frontend/src            React 前端、组件、状态和 WebSocket client
frontend/e2e            Playwright 浏览器烟测
tests                   后端单元与网关测试
scripts                 测试/批量对局辅助脚本

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors