使用说明
游戏锻造
Game Forge将自然语言描述变成了一个真实的、可玩的浏览器游戏。用户描述他们想要什么,通过AI聊天优化设计,并收到直接在浏览器中运行或可以下载并离线播放的Godot 4 HTML5导出。
该系统是一个由九个服务组成的分布式管道:人工智能规划器对请求进行分类并生成结构化游戏设计,资产生成器使用Stability AI生成精灵、背景和音乐,代码汇编程序根据该设计构建经过验证的Godot项目,构建器服务编译并导出该项目-所有这些都由REST API和React前端背后的无状态编排器协调。
目录
概述
传统游戏引擎需要编程和艺术技能才能玩一个原型。Game Forge消除了简单2D游戏概念的障碍:用户键入如下提示 “一个黑暗的幻想平台游戏,骑士在一座废墟城堡中战斗”,系统计划、说明、评分、组装和编译一个工作游戏,而无需任何手动引擎工作。
该平台支持三种经过验证的游戏原型-- 平台游戏, 自上而下的,以及 无尽的奔跑者 --每个都有一个预先编写的、经过Godot验证的行为、武器和获胜条件的目录作为支持。这将生成限制在保证编译和运行的组合上,以无限的创作自由换取每次请求的可玩结果。
截图
| 生成的平台程序,在浏览器中播放 | 独立运行的HTML5导出 | 在Godot编辑器中打开的组装项目 |
|---|---|---|
建筑学
┌───────────┐
│ frontend │ :3000 React UI
└─────┬─────┘
│ /api/*
┌─────▼─────┐
│ backend │ :5000 REST API + auth + /internal
└─────┬─────┘ owns User, Chat, GameProject,
│ GenerationJob, Build
│ POST /generate
┌─────▼─────┐
│ server │ :6100 Orchestrator (HTTP only,
└─────┬─────┘ no DB, no storage)
┌─────────────┼──────────────┬──────────────┐
│ │ │ │
┌────▼────┐ ┌─────▼─────┐ ┌─────▼────┐ ┌─────▼─────┐
│ planner │ │ asset │ │ code │ │ builder │
│ :6101 │ │ :6102 │ │ :6103 │ │ :6104 │
│ LLM │ │ LLM + │ │ pure │ │ Godot + │
│GamePlan │ │ MCP tools │ │ assembly │ │ MinIO ↘ │
│ │ │ + MinIO ↗ │ │ + MinIO ↗│ │ (export) │
└────┬────┘ └─────┬─────┘ └──────────┘ └─────┬─────┘
│ │ MCP calls updates Build
│ ┌────▼────┐ via backend /internal
│ │assets- │ :8765
│ │ mcp │ Stability AI
│ └─────────┘ image + audio
│
└─────────────────────────────────────────────┐
│ │
┌───────────┴───────────┐ │
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ │
│ mongo │ :27017 │ minio │ :9000 / :9001
└───────────┘ └───────────┘
管道流量
当用户请求生成时:
- 前端将提示提交给后端,后端将创建一个
GameProject,GenerationJob,以及Build,然后交给编排者。 - 编排器立即返回并在后台运行管道:
- 规划师 将提示分类为原型,并填充经过严格验证的模式
GamePlan(实体、级别、行为、武器、获胜条件)。 - 资产 和 代码 并行运行。Asset使用LLM编写提示规格,然后确定地驱动Stability AI(通过MCP)生成精灵、背景、地形和音乐,并将所有内容上传到对象存储中。代码从预先验证的GDScript片段组装一个完整的Godot项目(不涉及LLM),并使用Godot CLI对其进行验证。
- 建造者 下载组装好的项目和资源,运行Godot 4 CLI导出HTML5构建,并上传结果。
- 规划师 将提示分类为原型,并填充经过严格验证的模式
- 作业和构建状态始终被推回到后端,前端会轮询进度,直到游戏准备就绪。
服务目录
| 服务 | 港口 | 责任 |
|---|---|---|
frontend |
3000 | React UI——提示输入、AI聊天细化、浏览器内播放 |
backend |
5000 | REST API,身份验证,规范数据模型 |
server |
6100 | 无状态HTTP编排器——无数据库,无存储 |
planner |
6101 | LLM驱动的游戏设计→ 结构化的 GamePlan |
asset |
6102 | LLM提示作文→ MCP工具→ 稳定AI→ MinIO |
code |
6103 | 来自已验证片段库的确定性GDScript程序集 |
builder |
6104 | Godot 4 CLI导出到HTML5,上传到MinIO |
assets-mcp |
8765 | MCP服务器封装稳定AI图像/音频生成 |
mongo |
27017 | 主数据库 |
minio |
9000/9001 | 用于资产和构建的S3兼容对象存储 |
技术栈
- 前端: React 18、Vite、顺风CSS
- 后端/编排器/工人: Node.js、Express、Mongoose
- 资产服务器: Python 3.13、FastMCP、Pydantic
- 游戏引擎: Godot 4.3(无头CLI导出到HTML5)
- 人工智能提供商: 通过OpenRouter/Groq生成LLM,通过Stability AI生成图像和音频
- 数据层: MongoDB、MinIO(S3兼容对象存储)
- 基础设施: Docker Compose
入门指南
需要 Docker 桌面版.
# 1. Copy env templates and fill in secrets
cp game-forge/.env.example game-forge/.env
cp game-forge-backend/.env.example game-forge-backend/.env
cp game-forge-frontend/.env.example game-forge-frontend/.env
cp game-forge-server/.env.example game-forge-server/.env
# 2. Edit game-forge/.env to set OPENROUTER_API_KEY and STABILITY_API_KEY
# 3. Bring up the stack
cd game-forge
docker compose up -d --build
| URL | 什么 |
|---|---|
| http://localhost:3000 | 前端 |
| http://localhost:5000/api/health | 后端健康 |
| http://localhost:6100/health | 编排器健康状况 |
| http://localhost:6101–6104/健康 | 工人服务 |
| http://localhost:9001 | MinIO控制台 |
常见操作
# Tail logs from one service
docker compose logs -f builder
# Restart a single service after editing its code
docker compose up -d --force-recreate --build planner
# Stop everything (volumes preserved)
docker compose down
# Remove everything including mongo + minio data
docker compose down -v
配置
game-forge/.env 是合成插值文件;编写替代品 ${VAR} 参考文献 docker-compose.yml 从它。
| 变量 | 默认值 | 用途 |
|---|---|---|
GEN_SERVICE_SECRET |
空 | 服务间身份验证标头 |
OPENROUTER_API_KEY |
空 | 计划、资产提示组合和后端聊天所需 |
STABILITY_API_KEY |
空 | 所有图像和音乐生成都需要 |
PLANNER_PROVIDER / PLANNER_MODEL |
openrouter / qwen/qwen3-32b |
LLM用于游戏设计 |
THEME_PROVIDER / THEME_MODEL |
openrouter / qwen/qwen3-32b |
LLM用于精灵/背景/音乐提示作曲 |
SKIP_GODOT_EXPORT |
false |
何时 true,构建器编写存根工件,而不是运行Godot |
MINIO_ACCESS_KEY / MINIO_SECRET_KEY |
必须匹配 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD 在MinIO容器上 |
仓库的规划
Root/
├── game-forge/ ← orchestration root (this repository)
├── game-forge-frontend/ ← React UI
├── game-forge-backend/ ← REST API, auth, canonical models
├── game-forge-server/ ← HTTP orchestrator
├── game-forge-planner/ ← planner microservice
├── game-forge-asset/ ← asset microservice
├── game-forge-code/ ← code microservice
├── game-forge-builder/ ← builder microservice
└── assets-mcp/ ← MCP server (Stability AI wrapper)
测试和质量
该管道跨越九个服务,因此测试分为三层:纯功能和模型的隔离单元测试,使用Supertest对每个服务的Express路由进行HTTP合约集成测试,以及单独的运行时性能基准测试。所有外部依赖项-LLM提供程序、Stability AI、MongoDB、MinIO和Godot CLI-都在单元和集成测试中进行了模拟,因此任何套件都不需要实时API密钥、配额或正在运行的Docker堆栈。
| 服务 | 技术 | 测试 |
|---|---|---|
game-forge-frontend |
React 18、Vite、Tailwind CSS | 65个单元/组件测试 |
game-forge-backend |
Node.js,Express,Mongoose | 66单元,12集成 |
game-forge-server |
Node.js,Express | 44个单元,10个集成 |
game-forge-planner |
Node.js、Express、OpenRouter | 37个单元、7个集成 |
game-forge-asset |
Node.js、Express、MCP客户端 | 38个单元,8个集成 |
game-forge-code |
Node.js、Express、Godot组件 | 124个单元,9个集成 |
game-forge-builder |
Node.js、Express、Godot CLI | 34个单元,8个集成 |
assets-mcp |
Python 3.13、FastMCP、Pydantic | 60个单元测试 |
| 总计 | 522次测试,全部通过 |
四个专用基准套件(game-forge/benchmarks/)用于为每个AI驱动的角色选择生产LLM——游戏计划生成、代码生成、音频提示组成和视觉主题组成——通过在多个候选模型中根据固定质量标准对输出进行评分。
演出
以下指标来自12天的实际生产使用情况(33次记录的管道运行)。
| 度量 | 值 |
|---|---|
| 管道成功率(终端运行) | 65% |
| 平均端到端生成时间 | 276.5秒(≈4分37秒) |
| 端到端生成时间的中位数 | 268.2秒 |
| 最快/最慢成功运行 | 109.7秒/453.1秒 |
| 生成可播放的网络构建 | 13 |
| 平均可交付捆绑包大小 | 67.7 MB |
成功运行的每阶段延迟主要由资产生成决定(≈总挂钟时间的79%),因为角色、背景、地形和音乐对Stability AI的调用是按顺序发出的。规划约占15%,而Godot导出阶段(完全确定)仅占3%左右。
设计原则和限制
Game Forge围绕一个核心权衡而构建:在无限的创作自由之上保证可玩的输出。每个生成的游戏都是由一个固定的、经过Godot验证的原型、行为、武器和获胜条件目录组装而成的,而不是自由生成的代码,因此管道可以在输出到达玩家之前对其进行验证。
源于此设计的已知约束包括一组固定的三个受支持的原型、在重试后无法解析LLM输出时回退到通用计划、单个静止图像精灵而不是逐帧动画,以及主导端到端延迟的顺序(非批处理)资产生成。这些权衡与项目的其他设计和评估一起详细记录在 docs/.
团队
Game Forge是一个由以下人员创建的毕业项目:
- 奥马尔·穆罕默德
- 艾哈迈德·萨贝尔
- 阿姆鲁·穆罕默德·谢雷
- 奥马尔·马赫福兹
