设计文档域化重构总收口: - §10 治理门反转(engineering-conventions §10.5/10.6/10.7):canonical 根从 agent-specs 改为 docs/architecture 6 域树;品牌门白名单加 architecture/_archive。 - 归档 11 settled 源档(7 根 architecture + 4 非生成 agent-specs canonical)→ 各自 _archive(git mv 保 history + tombstone redirect)。生成域设计链过渡期保留(架构演进中)。 - rewire 17 个活层文件(.agents/knowledge|rules|skills + docs/mvp + AGENTS.md + 新树)指向新树路径;活层零残留旧 canonical 路径。 - AGENTS.md §4 必读表/§3.2 目录树/§3.3-3.4 指针 → 新树;_index.md 瘦身为 trace/spike + 生成域演进链 + 修 line22↔40 自相矛盾。 - 新增死链门 .agents/tools/check-deadlinks.sh(§10.7 死链项的可执行脚本)。 - 全门齐跑:死链 0 / 新树无旧品牌 / 无超 2000 行 / 活层无残留。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
74 KiB
🗄️ 已归档(2026-06-20 设计文档域化重构) —— 内容已重写并迁入
架构/README.md + 架构/13模块.md。本档为决策史留档,非现行 SoT;现行真相见 6 域树(总索引docs/architecture/README.md)。
绘境AI游戏生态平台 — 系统概要设计(技术决策版)
文档编号:HJ-ARCH-001 版本:v2.1(2026-06-16 现行真相对齐:模板驱动/new-api/SAA/LittleJS/mmx-cli/命名空间) 受众:技术合伙人 / CTO / 首席架构师 生成时间:2026-06-06 关联文档:
- 业务需求:
docs-design/MVP PRD.md、docs-design/Product Strategy Document.md- 竞品分析:
docs-design/竞品分析报告.md- 产品需求/技术模块/映射 三文档:
docs/architecture/产品需求清单.md、docs/architecture/技术架构与模块.md、docs/architecture/需求模块映射.md
⚠️ 回填状态(2026-06-10 起 → 2026-06-16 对齐现行真相,依据 HJ-AUDIT-001 架构三向审计 + 后续多次创始人裁定):本档为蓝图权威,正文已逐节对齐以下裁定(以裁定为准)。本档 v2.0 成稿于 2026-06-06,下列 7 条均晚于成稿、已落入正文:
- 生成主线已转向「模板驱动 via new-api 网关」→ 再演进为「agent 写码于插件库」(C2 裁定 2026-06-09 spike 52/52 结构层 100%;HJ-GEN-001 终审 2026-06-12 游戏模板/填参线退役):LLM 经 new-api 网关直连便宜模型直出可玩游戏,经 harness 九门兜底;Dify / OpenGame 均从未部署、降级为远期增强,非现行生成引擎。后端实测 14 文件接 new-api(
game-module-aigc-server)。- agentic 编排基建 = SAA(Spring AI Alibaba GA v1.1.2.2)裸
StateGraph编排(HJ-AGI-002,2026-06-15):short-term SAA-only,AgentScope 降 long-term premium 独立轨;后端实测spring-ai-alibaba已接入(SaaStudioGraph等)。旧「自研编排/DAG 工作流引擎/Dify 可视化编排」表述全部作废。- Tier1 引擎 = LittleJS 增强发行版(55KB gz)+ Runner v2 装载契约
game-host.d.ts(2026-06-12 终裁,spike 85/82):本档「自研 Canvas Runtime <15KB」相关描述全部被取代——15KB 红线废除(系 srcdoc 内联架构的衍生约束,前提已失效),改三层约束框架(SLO@千元机+4G P75 / 预算入场券 gz≤350KB·raw≤1.5MB / 工程增强层);沙箱/SDK/三容器控制点不变。- 模板 = LittleJS 能力插件/二次开发件;游戏模板/填参式模板已废除(W-CLEAN,旧4模板+存量已清):玩法/美术/关卡/UI = agent 生成域;旧 4 模板 + 存量数据已清除。Tier2/3 复杂 2D/3D/原生仍用 Cocos Creator 3.8.8 + MCP(不变)。注:「玩法模板」(品类/玩法框架·引导 AI 生成·非 pre-built 代码)未废 = 有效功能·待建,但非最高优先级(最高=Tier 0 生成可靠,玩法模板排其后;HJ-DEMO-AUDIT-001 创始人 2026-06-17,见完成度与优先级总账)。
- AI 素材/音乐工具链 = mmx-cli(MiniMax,2026-06-12 创始人亲验拍板默认):agent 造游戏直接 CLI 调用、免 GPU/免训练;ComfyUI 退备选,Stability Audio 等亦降级。
- 代码命名空间整体改名为
com.wanxiang.huijing(公司 Wanxiang / 项目 Huijing,2026-06-15 合 dev/2.0.0);对外品牌 = 绘境AI。- 执行排期以
mvp-execution-spec+docs/mvp/MVP作战清单.md为准,§9 甘特仅作蓝图参考;2026-06-08 业务决策已将 MVP 验收改为「staging/内网种子灰度走通真闭环」,公网上线 = MVP 后并行长周期任务(受日历闸门约束)。- LLM 接入现状:D1 拍板主 DeepSeek / 备 Qwen(2026-06-08);现行实际 = new-api 网关多模型可用(
deepseek-v4-flash/pro+MiniMax-M2.7/M3渠道全活,2026-06-14 探活实测)。网关多通道兜底曾真实失效(二厂系全废),见 §8 风险 #12。- RocketMQ / Nacos = 框架(yudao fork)自带依赖 + yaml 配置存在,但 MVP 运行时未部署 broker/registry → future-state(框架自带、MVP 未启用);正文凡涉之处一律如此标注。 单一事实源(现行口径日常入口):
.agents/knowledge/tech-decisions.md(§1/§1.1/§4)+.agents/skills/saa-graph-orchestration.md。
1. 背景与目标
1.1 业务背景
绘境AI 是一个 AI 驱动的全民游戏创作与变现生态平台。核心命题:让零基础创作者用一句话做出可上线、可变现的轻量小游戏,让玩家像刷短视频一样发现和试玩,让平台通过广告分成、订阅、B端定制实现商业闭环。
竞品格局(详见竞品分析报告):
- 极逸 SOON:技术最强,无流量
- TapTap 制造:有流量,封闭且变现弱
- FunloomAI:有付费验证,品类窄
绘境的差异化 = 全闭环:生成 + 流量 + 变现三件事同时解决。
1.2 系统目标
| 维度 | 目标 | 量化指标 |
|---|---|---|
| 功能完整性 | 创作→生成→预览→发布→审核→游戏流→试玩→互动→变现 全链路闭环 | 端到端可走通 |
| 生成能力 | 自然语言输入,3-5 分钟产出可玩 Web 游戏 | 生成成功率 ≥85%(远期蓝图目标;MVP 验收线 ≥80%) |
| 运行性能 | 游戏流首屏可交互 | P75 < 3s, P95 < 6s |
| 可用性 | 核心链路服务可用 | ≥ 99.5%(MVP), ≥ 99.9%(正式) |
| 扩展性 | 支持从单体启动平滑迁移到微服务 | 模块可独立部署 |
| 成本可控 | MVP 阶段基础设施月成本 | < 5000 元/月 |
1.3 非目标(明确不做)
- 不做 3D 开放世界游戏生成
- 不做专业级游戏引擎(Unity/Unreal 级别)
- 不做海外市场(MVP 阶段)
- 不做完全开放式代码生成(agent 写码于 LittleJS 插件库 + harness 九门约束保证稳定性;游戏模板/填参线已废 W-CLEAN)
- 不自研大模型(接入通用 LLM 经 new-api 网关 + 开源 Agent 框架 SAA/Spring AI Alibaba)
2. 业务架构
2.1 核心业务域
graph LR
subgraph 创作域
A0[资产管理] --> A1[游戏设计]
A1 --> A2[AI 辅助生成]
A2 --> A3[组装/编辑/调试]
A3 --> A4[预览试玩]
A4 --> A5[质量校验]
A5 --> A6[发布申请]
end
subgraph 分发域
B1[审核通过] --> B2[游戏流推荐]
B2 --> B3[玩家试玩]
B3 --> B4[互动反馈]
B4 --> B5[分享传播]
end
subgraph 变现域
C1[广告植入] --> C2[广告展示]
C2 --> C3[收益归集]
C3 --> C4[创作者结算]
C4 --> C5[提现]
end
subgraph 数据域
D1[事件采集] --> D2[质量评分]
D2 --> D3[推荐优化]
D3 --> D4[AI 优化建议]
D4 --> A3
end
A5 --> B1
B3 --> C2
B4 --> D1
2.2 用户角色与权限模型
graph TB
VISITOR[访客<br/>可浏览试玩] --> PLAYER[玩家<br/>+互动/收藏/举报]
PLAYER --> CREATOR[创作者<br/>+创建/生成/发布]
CREATOR --> PRO_CREATOR[专业创作者<br/>+批量/编排/B端]
OPERATOR[运营<br/>审核/推荐/下架] --> ADMIN[管理员<br/>+系统配置/权限]
B_CLIENT[B端客户<br/>需求/验收/报告]
| 角色 | 权限边界 | 对应系统入口 |
|---|---|---|
| 访客 | 浏览游戏流 + 试玩(无需登录) | game-studio |
| 玩家 | +点赞/收藏/分享/举报/评论 | game-studio(登录后) |
| 创作者 | +创建项目/生成/编辑/发布/数据看板/收益 | game-studio |
| 专业创作者 | +批量生成/工作流编排(远期)/素材市场/B端接单 | game-studio(高级功能) |
| 运营 | 审核/推荐/下架/精选/内容安全 | game-admin |
| 管理员 | +系统配置/用户管理/权限/字典/监控 | game-admin |
| B端客户 | 需求提交/进度查看/验收/报告 | 独立 B 端门户(P1) |
2.3 核心业务流程
创作者主流程(三种模式)
模式 A:一句话生成(小白路径)
现行口径(2026-06-16):下图为 MVP 现行主线——生成 = SAA(Spring AI Alibaba)裸
StateGraph编排 驱动 new-api 网关 → 便宜 LLM,agent 写码于 LittleJS 插件库,经 harness 九门兜底;Dify/OpenGame 从未部署(旧蓝图原案见 §6.2 决策史)。生成任务派发走GenerationDispatcher(http worker | 进程内 SAA 图 二选一单写),生成态 SAA 编排藏在 job/callback 契约后保持可替换。
sequenceDiagram
participant C as 创作者
participant S as game-studio
participant GW as Gateway
participant AIGC as aigc-module
participant SAA as SAA StateGraph编排
participant NEWAPI as new-api 网关
participant LLM as 便宜LLM(DeepSeek/MiniMax)
participant GATE as harness 九门(校验/构建/真玩)
participant PRJ as project-module
participant BPM as bpm-module
C->>S: 输入 Prompt + 选择风格
S->>GW: POST /api/aigc/generate
GW->>AIGC: 转发(鉴权通过)
AIGC->>AIGC: 创建生成任务(GenerationDispatcher 派发)
AIGC-->>S: 202 Accepted {taskId}
S->>S: 轮询/SSE 监听任务状态
AIGC->>SAA: dispatch(job):进入裸图编排
SAA->>SAA: 节点:渲染→设计→生成代码(11 节点/4 条件边)
SAA->>NEWAPI: 各节点经 OpenAI 兼容接口调模型
NEWAPI->>LLM: 转发(单 key→自动入 newapi_cost 计费平面)
LLM-->>NEWAPI: 返回 GameConfig / 游戏代码
NEWAPI-->>SAA: 模型产物
SAA->>GATE: 校验/构建/真玩 九门(done 由确定性门定,非 LLM 自评)
GATE-->>SAA: 通过 → 出 GamePackage;不通过 → 修复回环
SAA-->>AIGC: 回调 callback:packageUrl + manifest
AIGC->>PRJ: 写入草稿版本(含生成的资产)
AIGC-->>S: 任务完成通知
C->>S: 预览试玩(iframe 加载)
C->>S: 编辑标题/简介/封面/标签
C->>S: 点击发布
S->>GW: POST /api/project/publish
GW->>PRJ: 提交发布审核
PRJ->>BPM: 发起审核工作流
BPM-->>C: 通知审核结果
模式 B:资产驱动创作(进阶路径,详见下方"创作工作台核心设计")
创作者先在资产空间中逐步积累游戏素材(角色/关卡/音乐/机制),然后选择模板组装为完整游戏。AI 在每个环节辅助生成单项资产,但最终决策权在创作者。
模式 C:工作流编排(专业路径)
专业创作者可自定义生成流程的节点、参数和条件分支,适用于批量生产、品牌定制等场景。(2026-06-16 纠偏:原述"进入 Dify 可视化编排界面"——Dify 从未部署、已降级远期;现行/远期编排基建 = SAA(Spring AI Alibaba)裸 StateGraph 编排(HJ-AGI-002),可视化编排面属远期能力。)
玩家游戏流主流程
sequenceDiagram
participant P as 玩家
participant S as game-studio
participant GW as Gateway
participant FEED as feed-module
participant RT as runtime-module
participant TEL as telemetry-module
P->>S: 进入首页/游戏流
S->>GW: GET /api/feed/list?cursor=xxx
GW->>FEED: 推荐列表(规则+行为信号)
FEED-->>S: [{gameId, title, cover, manifest_url}, ...]
S->>S: 展示封面卡片 + 预加载下一款 manifest
P->>S: 点击"开始玩"
S->>RT: 加载 manifest → 资源 → 启动游戏(iframe sandbox)
S->>TEL: 上报 game_load_start
RT-->>S: 游戏启动
S->>TEL: 上报 game_play_start
P->>S: 游玩 30s+
S->>TEL: 上报 game_play_30s
P->>S: 游戏结束
S->>TEL: 上报 game_complete
P->>S: 点赞/收藏/分享
S->>GW: POST /api/feed/interaction
GW->>FEED: 记录互动
P->>S: 上滑切换下一款
S->>S: 销毁当前容器 + 激活预加载容器
创作工作台核心设计
设计原则:创作者不是"Prompt 输入者",而是"游戏设计师"。AI 是助手,不是替代品。
创作工作台提供三种创作模式,覆盖从小白到专业的全链路:
| 模式 | 目标用户 | 交互方式 | AI 角色 |
|---|---|---|---|
| 一句话生成 | 纯小白 | Prompt → 一键出成品 | AI 主导,人确认 |
| 资产驱动创作 | 进阶创作者 | 先设计资产,再组装游戏 | AI 辅助生成单项资产 |
| 全自定义编排(远期能力,MVP 暂不提供) | 专业创作者 | 可视化编排面=远期(对齐 §2.3 模式C/L815;现行专业路径=按需调 SAA 裸 StateGraph)+ 手动调参 | AI 按需调用 |
创作者资产管理体系
每个创作者拥有独立的资产空间(Asset Workspace),所有创作素材归创作者所有:
graph TB
subgraph 创作者资产空间
direction TB
subgraph 视觉资产
IMG[角色立绘/场景图/UI 元素]
TEX[贴图/材质/粒子效果]
ANIM[动画/帧序列/Spine]
COVER[封面/宣传图/分享卡片]
end
subgraph 音频资产
BGM[背景音乐]
SFX[音效]
VOICE[角色语音/音色]
MV[过场动画/MV]
end
subgraph 设计资产
CHAR[角色设定<br/>外观/性格/能力/台词]
LEVEL[关卡设计<br/>地图/难度曲线/触发条件]
MECH[游戏机制<br/>玩法规则/胜负条件/计分]
ECON[经济系统<br/>货币/道具/产出/消耗]
STORY[剧情/对话树/分支]
end
subgraph 商业化资产
SHOP[付费道具设计<br/>皮肤/复活/加速/关卡包]
AD_CFG[广告位配置<br/>时机/类型/频次]
SOCIAL[社交接入配置<br/>好友/排行/邀请/PK]
end
end
IMG & TEX & ANIM & COVER --> GAME[游戏项目]
BGM & SFX & VOICE & MV --> GAME
CHAR & LEVEL & MECH & ECON & STORY --> GAME
SHOP & AD_CFG & SOCIAL --> GAME
资产生成方式
每种资产都支持三种产出方式:
| 产出方式 | 说明 | 质量控制 |
|---|---|---|
| AI 生成 | 自然语言描述 → AI 产出(图片/音乐/角色/关卡等) | 平台合规检测 + 风格一致性校验 |
| 手动上传 | 创作者上传自有素材 | 格式/大小/安全扫描 + 版权声明 |
| 市场获取 | 从素材市场购买/获取他人共享的资产 | 授权链验证 + 使用范围限制 |
资产驱动的游戏组装流程
sequenceDiagram
participant C as 创作者
participant WS as 工作台
participant ASSET as 资产服务
participant AIGC as AI 生成
participant COMP as 合规检测
participant RT as 运行时
Note over C,RT: 阶段一:准备资产
C->>WS: 创建角色设定(描述性格/外观/能力)
WS->>AIGC: AI 生成角色立绘(基于描述)
AIGC->>COMP: 图像合规检测
COMP-->>AIGC: 通过
AIGC-->>WS: 角色立绘
C->>ASSET: 保存到我的资产空间
C->>WS: 设计关卡(描述地图/难度/触发器)
WS->>AIGC: AI 生成关卡配置 JSON
AIGC-->>WS: 关卡配置
C->>WS: 手动微调数值(速度/生成频率/奖励)
C->>ASSET: 保存关卡到资产空间
C->>WS: 描述背景音乐风格
WS->>AIGC: AI 生成 BGM
AIGC->>COMP: 音频合规检测(版权/内容)
COMP-->>AIGC: 通过
C->>ASSET: 保存 BGM
Note over C,RT: 阶段二:组装游戏
C->>WS: 选择游戏模板/机制(如"躲避类")
C->>WS: 从资产空间拖入:角色 + 关卡 + BGM + 音效
C->>WS: 配置游戏机制(胜负条件/计分规则)
C->>WS: 配置付费道具(复活 = 看广告 or ¥1)
C->>WS: 配置广告位(过关插屏 + 结算激励视频)
WS->>RT: 编译组装 → GamePackage
Note over C,RT: 阶段三:预览与调试
C->>WS: 预览试玩(iframe 沙箱)
WS->>WS: 实时调试面板(FPS/事件流/状态变量)
C->>WS: 发现问题 → 调整参数 → 重新编译
C->>WS: 满意 → 提交发布
质量与合规控制点
在创作全链路设置7 道门禁,确保产出质量和平台安全:
graph LR
G1[① Prompt/描述<br/>安全检测] --> G2[② AI 产出<br/>合规校验]
G2 --> G3[③ 资产入库<br/>版权声明+风格校验]
G3 --> G4[④ 组装时<br/>Schema 完整性]
G4 --> G5[⑤ 编译后<br/>性能门禁]
G5 --> G6[⑥ 预览时<br/>可玩性自测]
G6 --> G7[⑦ 发布前<br/>终审+合规+适龄]
| 门禁 | 检测内容 | 阻断条件 | 责任方 |
|---|---|---|---|
| ① Prompt 安全 | 违禁词/敏感意图/注入攻击 | 命中 → 拒绝 + 提示修改 | compliance 模块 |
| ② AI 产出合规 | 图片涉黄涉暴/文本违规/音频侵权 | 检测不通过 → 不入库 | compliance 模块 |
| ③ 资产入库 | 版权声明完整/风格与 IP 库比对/文件安全 | 疑似侵权 → 冻结 + 人工复核 | ip 模块 |
| ④ 组装完整性 | GameConfig JSON Schema/必填字段/资源引用有效 | 缺失 → 编译失败 + 提示 | runtime 模块 |
| ⑤ 性能门禁 | 包体积 ≤10MB/首屏 ≤2MB/无外部网络请求 | 超限 → 阻断 + 优化建议 | runtime 模块 |
| ⑥ 可玩性自测 | 加载成功/启动成功/30s 无崩溃/结束事件触发 | 失败 → 阻断发布 | runtime 模块 |
| ⑦ 发布终审 | 标题/简介/封面/标签/适龄/全链路合规汇总 | 人工或自动决策 | bpm + compliance |
创作者自由度 vs 平台控制的边界
| 维度 | 创作者可以做 | 平台不允许 |
|---|---|---|
| 视觉 | 上传任意图片/AI 生成/购买素材 | 涉黄涉暴涉政/侵犯已知 IP |
| 音频 | 上传/AI 生成/购买 | 侵权音乐/违规语音 |
| 玩法 | 任意配置机制/关卡/难度 | 赌博/欺诈/诱导未成年消费 |
| 付费设计 | 设计道具/定价/广告位 | 强制付费才能通关/虚假概率/过度广告 |
| 社交接入 | 排行榜/好友邀请/PK | 获取用户隐私/骚扰 |
| 代码 | 通过模板参数控制逻辑 | 注入任意 JS/访问外部网络/操作 DOM |
底线原则:创作者通过配置(不是代码)驱动游戏行为。平台对运行时代码拥有完全控制权,创作者不直接写 JS——这是安全和合规可控的基础。
3. 系统架构
3.1 整体分层
graph TB
subgraph ACCESS[接入层]
CDN[CDN<br/>静态资源/游戏包]
NGINX[Nginx<br/>前端托管/SSL终结]
end
subgraph FE[前端应用]
STUDIO[game-studio<br/>Vue3+Vant<br/>创作者+玩家]
ADMIN[game-admin<br/>Vue3+ElementPlus<br/>运营+管理]
end
subgraph GW[网关层]
GATEWAY[Spring Cloud Gateway<br/>路由/限流/鉴权/灰度]
end
subgraph BIZ[业务服务层]
STU[studio<br/>创作编排/编辑器域]
PRJ[project<br/>项目生命周期]
AIGC[aigc<br/>AI生成引擎]
RT[runtime<br/>运行时/包/转换]
FEED[feed<br/>游戏流/推荐]
TEL[telemetry<br/>遥测/数据]
PAY[pay<br/>支付/订阅]
TRADE[trade<br/>结算/钱包]
COMM[community<br/>社区/通知]
IP[ip<br/>素材/版权]
COMP[compliance<br/>合规/安全]
BIZSVC[biz<br/>B端业务]
AD[ad<br/>广告引擎]
end
subgraph INFRA[基础设施层_Yudao原生]
SYS[system<br/>用户/权限/OAuth2]
INFRASVC[infra<br/>文件/任务/日志]
BPM[bpm<br/>工作流]
end
subgraph AI[AI生成层_现行]
SAA[SAA StateGraph编排<br/>Spring AI Alibaba v1.1.2.2]
NEWAPI[new-api 网关<br/>OpenAI兼容/多模型]
LLM[便宜LLM<br/>DeepSeek/MiniMax]
MMX[mmx-cli<br/>图片/音乐素材]
LJS[LittleJS+Runner v2<br/>Tier1 引擎/插件库]
end
subgraph MW[中间件层]
NACOS["Nacos<br/>(future-state·框架自带未部署)"]
MYSQL[MySQL 8.0]
REDIS[Redis 7]
MQ["RocketMQ 5<br/>(future-state·框架自带未部署)"]
MINIO[MinIO/OSS]
end
subgraph OBS[可观测性]
PROM[Prometheus]
GRAFANA[Grafana]
SENTRY[Sentry]
JAEGER[Jaeger<br/>链路追踪]
end
NGINX --> STUDIO
NGINX --> ADMIN
STUDIO --> GATEWAY
ADMIN --> GATEWAY
GATEWAY --> PRJ
GATEWAY --> AIGC
GATEWAY --> RT
GATEWAY --> FEED
GATEWAY --> TEL
GATEWAY --> PAY
GATEWAY --> TRADE
GATEWAY --> COMM
GATEWAY --> IP
GATEWAY --> COMP
GATEWAY --> BIZSVC
GATEWAY --> AD
GATEWAY --> SYS
GATEWAY --> INFRASVC
GATEWAY --> BPM
AIGC --> SAA
SAA --> NEWAPI
NEWAPI --> LLM
SAA --> MMX
SAA --> LJS
PRJ --> MYSQL
PRJ --> REDIS
PRJ --> MQ
PRJ --> MINIO
AIGC --> MYSQL
AIGC --> REDIS
AIGC --> MQ
AIGC --> MINIO
RT --> MYSQL
RT --> REDIS
RT --> MQ
RT --> MINIO
FEED --> MYSQL
FEED --> REDIS
FEED --> MQ
FEED --> MINIO
TEL --> MYSQL
TEL --> REDIS
TEL --> MQ
TEL --> MINIO
3.2 部署拓扑(Docker Compose 阶段)
graph LR
subgraph 宿主机
subgraph 中间件容器
nacos["Nacos:8848<br/>(future-state·MVP未部署)"]
mysql[MySQL:3306]
redis[Redis:6379]
rocketmq["RocketMQ:9876<br/>(future-state·MVP未部署)"]
minio[MinIO:9000]
end
subgraph 基础服务容器
gateway[Gateway:8080]
system[System:48081]
infra[Infra:48082]
bpm[BPM:48083]
end
subgraph 业务服务容器
game_all["game-server:48090<br/>单体模式含全部13个业务模块<br/>(内置 SAA 裸图编排/aigc)"]
end
subgraph AI生成接入_现行
newapi["new-api 网关<br/>(外部·mini-infra:3000)"]
mmx["mmx-cli<br/>(MiniMax 素材生成)"]
end
subgraph 前端容器
admin_nginx[admin-nginx:80]
studio_nginx[studio-nginx:81]
end
subgraph 可观测性容器
prometheus[Prometheus:9090]
grafana[Grafana:3001]
jaeger[Jaeger:16686]
end
end
MVP 阶段单体启动:所有 13 个业务模块编译为同一个 JAR(game-server),通过 Spring Profile 控制模块加载。需要独立扩缩时再启用 Nacos 拆为独立服务(future-state:Nacos 框架自带、MVP 未部署 registry,单体期走本地配置)。
3.3 模块间通信
| 通信方式 | 场景 | 协议 |
|---|---|---|
| 同步 HTTP | 前端→Gateway→业务服务 | REST JSON |
| 同步 HTTP | aigc→new-api 网关→LLM;SAA 各节点经 OpenAI 兼容接口调模型 | REST JSON |
| 进程内调用 | aigc 生成派发 GenerationDispatcher(http worker | 进程内 SAA 图,二选一单写) |
Java 接口 |
| 同步 Feign | 服务间同步调用(如 project→system 查用户) | Spring Cloud OpenFeign |
| 异步 MQ(future-state) | 生成任务派发、审核通知、事件摄取、结算触发 | RocketMQ(框架自带、MVP 未部署 broker;现行走进程内/同步) |
| 事件广播(future-state) | 发布成功→feed 刷新缓存、→telemetry 记录 | RocketMQ Topic(同上,MVP 未启用) |
3.4 平台 Game SDK 设计
为什么需要 SDK
生成的游戏运行在 iframe 沙箱中,与平台隔离。SDK 是平台能力注入游戏的唯一通道——没有 SDK,平台就是一个静态文件托管。
设计原则
| 原则 | 含义 | 约束 |
|---|---|---|
| 极轻 | 不增加用户感知加载时间 | 核心模块压缩后 < 8KB |
| 非阻塞 | 所有 API 调用异步,不占游戏主线程 | 零同步等待 |
| 优雅降级 | SDK 任何功能失败,游戏照常运行 | try-catch 包裹每个模块 |
| 按需加载 | 非核心模块(广告/社交/支付)懒加载 | 首屏只加载 core |
| 沙箱安全 | 通过 postMessage 与宿主通信 | 不暴露宿主 DOM/Cookie/网络 |
| 版本化 | SDK 版本与平台版本解耦,向后兼容 | semver 管理 |
SDK 模块分层
┌─────────────────────────────────────────────────────────────┐
│ WanxiangGameSDK(注入到每个生成的游戏中) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Core Layer(内联,< 8KB,游戏启动时加载) │ │
│ │ ├── Lifecycle 游戏生命周期管理 │ │
│ │ ├── EventBus SDK ↔ 宿主 postMessage 通信 │ │
│ │ ├── Telemetry 事件上报(批量/异步/sendBeacon 兜底) │ │
│ │ └── ErrorTrack 错误捕获与上报 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Plugin Layer(按需懒加载,不影响首屏) │ │
│ │ ├── Ad 广告展示(激励视频/插屏/Banner) │ │
│ │ ├── Pay 内购/打赏触发 │ │
│ │ ├── Social 排行榜/好友/邀请/分享 │ │
│ │ ├── Storage 云存档/进度保存 │ │
│ │ └── Debug 调试面板(仅开发模式) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
各模块能力清单
Core.Lifecycle(生命周期)— 必选,内联
| API | 说明 | 触发时机 |
|---|---|---|
sdk.ready() |
通知宿主游戏初始化完成 | 游戏入口代码执行后 |
sdk.started() |
通知宿主游戏开始运行 | 第一帧渲染后 |
sdk.paused() |
通知宿主游戏暂停 | 用户切后台/广告弹出 |
sdk.resumed() |
通知宿主游戏恢复 | 广告关闭/回到前台 |
sdk.completed(result) |
通知宿主游戏结束 | 通关/失败/超时 |
sdk.error(err) |
上报致命错误 | 游戏崩溃时 |
sdk.onPause(cb) |
监听宿主要求暂停 | 切换游戏/销毁前 |
sdk.onResume(cb) |
监听宿主要求恢复 | 回到当前容器 |
Core.Telemetry(事件上报)— 必选,内联
| API | 说明 | 约束 |
|---|---|---|
sdk.track(event, data) |
上报自定义事件 | 异步,不返回 Promise |
sdk.trackTiming(label, ms) |
上报耗时 | 异步 |
内置自动上报(无需游戏代码调用):
game_load_start/game_load_success/game_load_failedgame_play_start/game_play_30s/game_completegame_error(window.onerror + unhandledrejection)game_fps(每 10s 采样平均 FPS)
Core.ErrorTrack(错误捕获)— 必选,内联
| 能力 | 说明 |
|---|---|
| 全局 onerror 捕获 | 自动上报 JS 错误 |
| unhandledrejection | 自动上报 Promise 异常 |
| 错误去重 | 相同 stack 10s 内只报 1 次 |
| 错误不中断游戏 | 捕获后吞掉,游戏继续运行 |
Plugin.Ad(广告)— 按需加载
| API | 说明 | 触发方式 |
|---|---|---|
sdk.ad.showRewarded(opts) |
展示激励视频,回调结果 | 创作者在游戏配置中声明广告点 |
sdk.ad.showInterstitial() |
展示插屏广告 | 关卡结束/游戏结束时自动触发 |
sdk.ad.showBanner(position) |
展示 Banner | 游戏启动时按配置展示 |
sdk.ad.onReward(cb) |
监听激励完成 | 玩家看完广告后回调 |
sdk.ad.onClose(cb) |
监听广告关闭 | 广告关闭后恢复游戏 |
降级策略:广告加载失败 → 跳过广告 → 游戏继续。绝不因广告问题阻断游戏体验。
Plugin.Pay(内购)— 按需加载
| API | 说明 |
|---|---|
sdk.pay.purchase(itemId) |
发起购买(由宿主弹出支付 UI) |
sdk.pay.onSuccess(cb) |
支付成功回调 |
sdk.pay.onCancel(cb) |
支付取消回调 |
sdk.pay.queryOwned(itemId) |
查询是否已拥有 |
Plugin.Social(社交)— 按需加载
| API | 说明 |
|---|---|
sdk.social.getLeaderboard(id) |
获取排行榜数据 |
sdk.social.submitScore(id, score) |
提交分数 |
sdk.social.getFriends() |
获取好友列表(需授权) |
sdk.social.invite(friendId) |
邀请好友 |
sdk.social.share(data) |
触发分享(由宿主处理) |
Plugin.Storage(云存档)— 按需加载
| API | 说明 |
|---|---|
sdk.storage.save(key, data) |
保存进度到云端 |
sdk.storage.load(key) |
加载云端进度 |
sdk.storage.delete(key) |
删除存档 |
Plugin.Debug(调试面板)— 仅开发模式
| 能力 | 说明 |
|---|---|
| 实时 FPS 曲线 | 性能监控 |
| 事件流日志 | SDK 所有事件实时展示 |
| 状态变量查看器 | GameConfig 运行时状态 |
| trace_id 展示 | 从生成到运行的全链路追踪 ID |
| 网络请求拦截 | 监控 SDK 与宿主通信 |
| 一键性能快照 | 导出性能数据 |
SDK 与宿主通信协议
sequenceDiagram
participant GAME as 游戏(iframe)
participant SDK as WanxiangGameSDK
participant HOST as 宿主(game-studio)
participant API as 后端 API
Note over GAME,API: 游戏启动
HOST->>SDK: postMessage({type:'init', config, trace_id})
SDK->>SDK: 初始化 Core 模块
SDK->>GAME: window.WanxiangSDK 可用
GAME->>SDK: sdk.ready()
SDK->>HOST: postMessage({type:'lifecycle', event:'ready'})
Note over GAME,API: 事件上报(异步批量)
GAME->>SDK: sdk.track('level_complete', {level:1, score:100})
SDK->>SDK: 加入缓冲队列(每 10 条 or 5s flush)
SDK->>HOST: postMessage({type:'telemetry', events:[...]})
HOST->>API: POST /api/telemetry/events/batch
Note over GAME,API: 广告展示(懒加载)
GAME->>SDK: sdk.ad.showRewarded({placement:'revive'})
SDK->>SDK: 首次调用 → 动态加载 Ad Plugin
SDK->>HOST: postMessage({type:'ad', action:'show_rewarded'})
HOST->>HOST: 弹出广告覆盖层(iframe 外部渲染)
HOST->>SDK: postMessage({type:'ad', event:'reward_granted'})
SDK->>GAME: onReward callback 触发
GAME->>GAME: 玩家复活,游戏继续
Note over GAME,API: 广告失败降级
HOST->>SDK: postMessage({type:'ad', event:'ad_failed'})
SDK->>GAME: onReward callback({fallback:true})
GAME->>GAME: 免费给复活(不阻断体验)
关键设计决策
| 决策 | 选择 | 为什么 |
|---|---|---|
| 广告渲染位置 | 宿主侧(iframe 外部) | 广告 SDK 需要网络权限,游戏 iframe 禁止网络 |
| 支付 UI | 宿主侧弹出 | 支付安全不能在游戏沙箱内完成 |
| 社交数据 | 宿主代理请求 | 游戏无网络权限,通过 postMessage 由宿主代理 |
| 事件缓冲 | SDK 内 10 条/5s flush | 减少 postMessage 频率,不影响游戏帧率 |
| 错误上报 | 捕获但不中断 | 游戏稳定性 > 数据完整性 |
| 插件加载 | 首次 API 调用时懒加载 | 首屏只需 8KB Core,广告/社交/支付按需 |
合规定位与降级原则
合规模型:同意即可用,拒绝即不可用。
用户注册/首次进入
↓
隐私协议 + 用户服务协议(必须同意)
↓
同意 → 进入平台 → SDK Core 全功能默认启用
拒绝 → 不可使用平台
法律基础:《个保法》第13条第(二)款——"为订立、履行合同所必需"。用户接受平台服务即构成合同关系,SDK 采集的数据(生命周期/互动/错误/性能)是提供推荐、质量保障、变现服务的必要数据。
与抖音/微信小游戏同一合规模式:用户不同意则不可玩免费游戏。
非核心能力降级原则(铁律):
| 分类 | 模块 | 失败时游戏行为 | 用户感知 |
|---|---|---|---|
| 核心(异步不阻塞) | Lifecycle / Telemetry / ErrorTrack | 上报失败 → 静默丢弃,游戏不受影响 | 零感知 |
| 非核心(失败即跳过) | Ad | 广告加载失败/超时 → 跳过广告,给玩家免费奖励 | "广告不可用,已赠送奖励" |
| 非核心(失败即跳过) | Pay | 支付网络异常 → 提示稍后重试,不阻断游戏 | toast 提示 |
| 非核心(失败即跳过) | Social | 排行榜/好友加载失败 → 展示本地缓存或空态 | 功能降级但可继续玩 |
| 非核心(失败即跳过) | Storage | 云存档失败 → 回退 localStorage | 下次换设备可能丢失进度 |
编码铁律:Plugin 层的任何代码都包裹在 try-catch 中,异常不向上抛。游戏主循环(requestAnimationFrame)永远不被 SDK 阻塞。
// SDK Plugin 调用的内部实现模式(伪代码)
async function safePluginCall(fn, fallback) {
try {
return await Promise.race([fn(), timeout(5000)])
} catch (e) {
sdk._core.telemetry.track('sdk_plugin_error', { module: fn.name, error: e.message })
return fallback // 游戏拿到 fallback 值继续运行
}
}
合规所需的产品侧配套
| 文件/机制 | 说明 | 时机 |
|---|---|---|
| 隐私政策 | 明确列出 SDK 采集的所有数据类型、用途、保留期限 | 注册前强制展示 |
| SDK 目录页 | 列出 WanxiangGameSDK + 第三方 SDK(穿山甲/优量汇/微信支付等) | 隐私政策附录 |
| 未成年人保护 | 识别未成年后:禁止广告展示 + 禁止付费 + 限制时长 + 最小采集 | 实名认证后触发 |
| 数据删除权 | 用户注销时清除关联的事件/画像数据 | 设置页提供入口 |
SDK 体积预算
| 模块 | 压缩后大小 | 加载时机 |
|---|---|---|
| Core(Lifecycle + EventBus + Telemetry + ErrorTrack) | < 8KB | 内联到游戏入口 |
| Plugin.Ad | < 5KB(不含广告联盟 SDK) | 首次调用 ad API 时 |
| Plugin.Pay | < 3KB | 首次调用 pay API 时 |
| Plugin.Social | < 4KB | 首次调用 social API 时 |
| Plugin.Storage | < 2KB | 首次调用 storage API 时 |
| Plugin.Debug | < 15KB | 仅开发模式加载 |
| 首屏总负担 | < 8KB | — |
SDK 与 runtime 模块的关系
runtime-module 编译 GamePackage 时:
1. 将 SDK Core 代码内联到游戏 entry.js 头部
2. 在 GameConfig 中声明需要的 Plugin(ad/pay/social/storage)
3. manifest.json 中记录 SDK 版本号
4. 宿主根据 manifest 决定加载哪些 Plugin chunk
游戏代码不直接引用广告联盟 SDK 或支付 SDK——这些由宿主在 iframe 外部管理。游戏只通过 sdk.ad.showRewarded() 等抽象 API 触发,具体实现对游戏透明。
4. 核心链路技术设计
4.1 AI 生成链路
架构决策(现行,2026-06-16):SAA(Spring AI Alibaba)裸 StateGraph 编排 + new-api 网关 → 便宜 LLM + agent 写码于 LittleJS 插件库 + harness 九门兜底。
✅ 现行主线(C2 裁定 2026-06-09 → HJ-GEN-001 终审 2026-06-12 → HJ-AGI-002 2026-06-15):
- 生成 = LLM 经 new-api 网关(OpenAI 兼容,多模型)直连便宜模型(DeepSeek-v4 / MiniMax-M2.7/M3);C2 spike(4 模板 × 13 创意 = 52/52 结构层 100%)证实「LLM 直出 + 固定运行时」可达标,后续 HJ-GEN-001 进一步演进为「agent 写码于插件库」(游戏模板/填参线随 W-CLEAN 退役)。
- 编排基建 = SAA 裸
StateGraph(11 节点 / 4 条件边,SaaStudioGraph.assemble()唯一布线源),done 由 harness 九门确定性判定、不让 LLM 自评。- Dify / OpenGame 均从未部署、降级为远期增强;下方"为什么选 Dify + OpenGame"表保留为决策史(蓝图原案),非现行架构。
决策史(蓝图原案,为什么当初选 Dify + OpenGame,不自研):
| 维度 | 自研 | Dify + OpenGame(蓝图原案,未落地) |
|---|---|---|
| 核心生成能力 | 3-6 个月 | 2-4 周集成验证 |
| DAG 编排引擎 | 2-3 个月 | Dify 开箱即用 |
| 可视化工作流 UI | 1-2 个月 | Dify 自带 |
| 多模型切换 | 2 周 | Dify 原生 |
| 质量 benchmark | 从零建立 | OpenGame-Bench 现成 |
| 可观测性 | 自建 | Dify 内置 trace |
| 总周期 | 6-12 个月 | 4-6 周 |
当初为什么不选其他(决策史):
- LangGraph:纯 Python 框架,无可视化 UI,运营无法参与编排
- Coze:字节闭源,不可控
- n8n:通用自动化,非 LLM 原生
后话:现行 SAA 裸图编排即"Java 进程内确定性多步编排",避开了对 Dify 可视化 UI 的依赖(可视化编排面属远期能力);多模型切换由 new-api 网关承担;可观测性由 SAA graph-core 的 observation 机芯(每节点发 Micrometer observation)承担。
生成任务状态机:
stateDiagram-v2
[*] --> QUEUED: 创建任务
QUEUED --> RUNNING: 消费消息
RUNNING --> SUCCEEDED: 生成完成+质量通过
RUNNING --> FAILED: 生成失败/质量不达标
RUNNING --> TIMED_OUT: 超时(120s)
FAILED --> QUEUED: 重试(≤2次)
TIMED_OUT --> QUEUED: 重试(≤1次)
SUCCEEDED --> [*]
FAILED --> [*]: 超过重试次数
TIMED_OUT --> [*]: 超过重试次数
QUEUED --> CANCELED: 用户取消
RUNNING --> CANCELED: 用户取消
CANCELED --> [*]
性能指标:
- 生成 P50 耗时目标:< 60s
- 生成 P95 耗时目标:< 180s
- 生成成功率目标:≥ 85%(远期蓝图目标;MVP 验收线 ≥80%)
- 队列最大积压:500 任务,超过则返回 429
4.2 游戏运行时链路
三容器策略(参考抖音短视频预加载):
[Container N-1] [Container N] [Container N+1]
(销毁中) (当前播放) (预加载完成)
加载时序:
sequenceDiagram
participant APP as game-studio
participant CDN as CDN/OSS
participant SANDBOX as iframe sandbox
APP->>CDN: 请求 manifest.json(hash 缓存)
CDN-->>APP: {entry, assets[], checksum}
APP->>APP: 校验 manifest 完整性
APP->>CDN: 并行请求 entry.js + 关键 assets
APP->>SANDBOX: 创建 iframe(CSP + sandbox)
APP->>SANDBOX: 注入 GameConfig + Game SDK bridge
SANDBOX->>SANDBOX: 执行 entry.js → 初始化游戏
SANDBOX->>APP: postMessage({type:'game_loaded'})
APP->>APP: 隐藏 loading,展示游戏
Note over APP,SANDBOX: 游玩中:SDK bridge 上报生命周期事件
SANDBOX->>APP: postMessage({type:'game_complete', score})
APP->>APP: 展示结果页 + 互动按钮
安全边界:
- iframe
sandbox="allow-scripts allow-same-origin" - 红线(2026-06-10 审计补):
allow-same-origin仅当游戏包部署于独立源(usercontent 子域,与宿主不同源)时方可使用——同源下 iframe 可触宿主 DOM/存储、甚至自移除 sandbox,沙箱铁律失效。独立源就绪前,禁用allow-same-origin。 - CSP:
script-src 'self'; connect-src 'none'(游戏内无网络请求);CSP 须经游戏包托管侧 HTTP 响应头下发,不以 meta 标签为唯一依赖 - postMessage 来源校验 + schema 校验
- LLM 产物消毒(模板驱动后注入面=配置字符串):GameConfig 文案字段(title/label/theme 等)入库前做白名单字符集+长度校验,渲染侧一律转义后绘制,禁止 innerHTML/eval
- 资源总大小 ≤ 10MB,首屏 ≤ 2MB
4.3 推荐引擎链路
MVP 推荐策略(规则 + 信号,非机器学习):
Score = w1*quality_score + w2*freshness + w3*interaction_rate
- w4*skip_rate - w5*error_rate - w6*report_rate
+ bonus_new_creator + bonus_featured
| 信号 | 来源 | 权重方向 |
|---|---|---|
| quality_score | telemetry 模块聚合 | 正向 |
| freshness | 发布时间衰减 | 正向(24h 内 boost) |
| interaction_rate | 点赞+收藏+分享 / 曝光 | 正向 |
| skip_rate | 3s 内上滑 / 曝光 | 负向 |
| error_rate | 加载失败 / 试玩次数 | 负向(硬降权) |
| report_rate | 举报数 / 曝光 | 负向(阈值触发人工审核) |
| bonus_new_creator | 新创作者前 3 个作品 | 保底曝光 |
| bonus_featured | 运营精选池标记 | 固定加分 |
候选集生成:Redis Sorted Set,TTL 60s,cursor 分页。
5. 数据架构
5.1 核心实体 ER(精简)
erDiagram
USER ||--o{ GAME_PROJECT : owns
GAME_PROJECT ||--o{ GAME_VERSION : has
GAME_VERSION ||--|| GAME_PACKAGE : builds_to
GAME_VERSION ||--o{ GENERATION_TASK : generated_by
GAME_VERSION ||--o{ REVIEW_RECORD : reviewed_in
USER ||--o{ INTERACTION : performs
INTERACTION }o--|| GAME_PROJECT : targets
USER ||--o{ WALLET : has
WALLET ||--o{ TRANSACTION : records
GAME_PROJECT ||--o{ AD_SLOT : contains
AD_SLOT ||--o{ AD_IMPRESSION : tracks
USER {
string id PK
string email
string phone
string display_name
string avatar_url
string[] roles
datetime created_at
}
GAME_PROJECT {
string id PK
string owner_id FK
string title
string slug
string status
string[] tags
string cover_url
float quality_score
datetime published_at
}
GAME_VERSION {
string id PK
string project_id FK
int version_number
string status
string config_json
string package_url
string manifest_url
datetime created_at
}
GENERATION_TASK {
string id PK
string version_id FK
string status
string prompt
string template_id
int retry_count
int duration_ms
string error_code
datetime created_at
}
GAME_PACKAGE {
string id PK
string version_id FK
string storage_path
string checksum_sha256
int size_bytes
string manifest_json
datetime built_at
}
5.2 存储选型
| 数据类型 | 存储 | 理由 |
|---|---|---|
| 业务实体(用户/项目/版本/订单) | MySQL 8.0 | Huijing 原生,事务一致性 |
| 游戏包/素材/封面 | MinIO(本地) / 阿里云 OSS(生产) | 对象存储,CDN 加速 |
| 推荐候选集/热数据 | Redis 7 | 低延迟,Sorted Set 排序 |
| 事件流(埋点) | MySQL 分区表(MVP) → ClickHouse(增长期) | 先简后扩 |
| 搜索(游戏/素材) | MySQL FULLTEXT(MVP) → Elasticsearch(增长期) | 先简后扩 |
| 配置/注册(future-state) | Nacos | Huijing 框架自带,MVP 未部署 registry;现行单体走本地配置/Spring Profile |
| 分布式锁/限流 | Redis | 高性能 |
5.3 数据流向总览
graph LR
STUDIO[game-studio] -->|事件上报| TEL_API[telemetry /events/batch]
TEL_API -->|异步·future-state| MQ["RocketMQ<br/>(框架自带·MVP未部署)"]
MQ -->|消费入库| MYSQL[(MySQL 事件表)]
MYSQL -->|定时聚合| AGG[GameDailyStats]
AGG -->|写入| REDIS_FEED[Redis 候选集]
REDIS_FEED -->|读取| FEED[feed-module]
FEED -->|返回| STUDIO
AIGC[aigc-module] -->|生成产物| OSS[(MinIO/OSS)]
OSS -->|CDN分发| CDN[CDN]
CDN -->|加载| STUDIO
6. 技术选型决策记录
6.1 后端框架
| 候选 | 选择 | 理由 |
|---|---|---|
| Huijing Cloud (Java 17 + Spring Cloud Alibaba) | ✅ 选用 | 60%+ 后台能力开箱即用;RBAC/OAuth2/BPM/文件/通知/审计/代码生成/多租户全覆盖;社区活跃(60k+ star);fork 二开可控 |
| NestJS (Node.js) | ❌ 放弃 | v1 已验证单体可行但缺乏企业级基础设施;微服务生态弱于 Java;后台管理/工作流需从零建 |
| Go (Kratos/go-zero) | ❌ 放弃 | 性能好但后台基础设施缺失;RBAC/BPM/代码生成无现成方案 |
6.2 AI 生成引擎
| 候选 | 选择 | 理由 |
|---|---|---|
| new-api 网关 → 便宜 LLM + SAA 裸图编排(现行) | ✅ 现行 | LLM 经 new-api 网关(OpenAI 兼容/多模型)直出可玩游戏,SAA(Spring AI Alibaba v1.1.2.2)裸 StateGraph 编排确定性多步流程,harness 九门兜底质量;后端实测已接入(game-module-aigc-server 14 文件 + spring-ai-alibaba 1 pom),C2 spike 52/52 结构层 100%(HJ-GEN-001 / HJ-AGI-002) |
| ❌ 远期增强(从未部署) | 蓝图原案:Dify DAG 可视化/多模型/可观测性,OpenGame SOTA/6 阶段 pipeline;产能/复杂度上台阶时再评估启用,MVP 从不部署 | |
| 纯自研 | ❌ 放弃 | 6-12 个月,时间不允许 |
| LangGraph | ❌ 放弃 | 无可视化 UI,运营无法参与编排 |
| Coze | ❌ 放弃 | 闭源不可控,依赖字节 |
现行口径(2026-06-16):MVP 不部署 Dify/OpenGame,生成主线 = new-api 网关 + SAA 裸图编排(详见 §4.1)。Dify+OpenGame 整体降级为远期增强路径,本表保留其行作决策史。AgentScope(agent-native 探索)= long-term premium 独立轨,亦不在 MVP 运行时。
6.3 前端
| 候选 | 选择 | 理由 |
|---|---|---|
| Vue3 + Element Plus (admin) | ✅ 选用 | Huijing 官方主推,文档最全,二开友好 |
| Vue3 + Vant (studio) | ✅ 选用 | 移动优先组件库,适配游戏流滑动体验 |
| React + Next.js | ❌ 放弃 | 与 Huijing 前端生态不一致,二开成本高 |
6.4 数据库
| 候选 | 选择 | 理由 |
|---|---|---|
| MySQL 8.0 | ✅ 选用 | Huijing 默认,社区方案最多,迁移成本最低 |
| PostgreSQL | ❌ 放弃 | 虽然 JSONB/全文检索更强,但 Huijing 适配成本高 |
6.5 消息队列
| 候选 | 选择 | 理由 |
|---|---|---|
| RocketMQ 5 | ✅ 选用(future-state:框架自带、MVP 未部署 broker) | Huijing 默认集成,延迟消息/事务消息/死信队列完整,适合生成任务调度;MVP 运行时未部署 broker,现行生成派发走进程内 GenerationDispatcher/同步,待产能/异步化需求上台阶时启用 |
| Kafka | ❌ 放弃 | 偏大数据流,运维重,MVP 阶段过度 |
| Redis Stream | ❌ 放弃 | 可靠性不如 RocketMQ,无死信/事务消息 |
6.6 游戏运行时与多渠道导出
运行时按产物复杂度分层(Tier1/2/3),不同层选不同引擎。
| 候选 | 选择 | 理由 |
|---|---|---|
| LittleJS 增强发行版 + Runner v2(Tier1:Web 预览/游戏流,现行) | ✅ 现行 | 引擎 55KB gz,URL 化交付享 HTTP+编译双缓存,冷开 0.54s vs 自研壳 2.86s(4.8~5.3×);agent 写码于插件库直接可运行,装载契约 game-host.d.ts;平台完全控制沙箱/SDK 注入;MVP 唯一交付层(2026-06-12 终裁,spike 85/82) |
| ❌ 已废除(2026-06-11/12) | 自研壳实为机制演示(资产载而不绘/零 juice/只胜不败),手搓引擎=critical risk;15KB 红线废除(系 srcdoc 内联架构衍生约束,前提失效),改三层约束框架(SLO@千元机+4G P75 / 预算入场券 gz≤350KB·raw≤1.5MB / 工程增强层) | |
| Cocos Creator 3.8.8 + MCP(Tier2/3:复杂 2D+3D / 独立 App) | ✅ 选用 | 一栈覆盖复杂 2D+3D+原生与小游戏导出;MCP(158 工具)可 AI 驱动、出功能快;MVP 仅至多 1 个探针 demo |
| Three.js | ❌ 放弃 | 仅 web3D,与 Cocos 能力重复(已移除) |
| Phaser 3 全栈 | ❌ 放弃(spike 竞标落选) | 纯 2D 游戏引擎;经 T1 eval-spike 与 LittleJS 对比,败于冷开/交付形态(工程质量合格,证据留 spike 目录) |
| LayaAir 全栈(运行时+编辑器+导出) | ❌ 放弃 | 引擎过重影响游戏流加载;无 AI/MCP 生态;官方导出平台清单不含快手(旧"一键导出快手"为事实错误) |
| Unity | ❌ 放弃 | AI 适配差、启动重(7-10s),与 P75 < 3s 冲突 |
分层架构(Tier1 LittleJS 增强发行版 + Runner v2 / Tier2/3 Cocos-MCP):
AI 生成 → agent 写码于 LittleJS 插件库(Tier1,玩法/美术/关卡/UI=生成域)
↓ Web 预览/游戏流
LittleJS 增强发行版(55KB gz)+ Runner v2(iframe sandbox + SDK Core + 装载契约 game-host.d.ts)→ URL 化交付享双缓存
↓ 复杂 2D/3D/独立 App(Tier2/3,远期)
Cocos Creator 3.8.8 + MCP → 官方一键导出小游戏包
↓ 多渠道导出枢纽 = 微信小游戏格式包
微信=引擎官方格式;抖音=自有导出接口;快手=经"微信格式兼容转换"(快手开发者工具,无专用接口);Tier1(LittleJS)渠道 adapter 走 W-CH-α 竞标
模板哲学(2026-06-12 W-CLEAN):游戏模板/填参式模板已废除(W-CLEAN,旧4模板+存量已清)——模板 = LittleJS 能力插件/二次开发件,玩法/美术/关卡/UI 全是 agent 生成域;旧 4 模板(clicker/dodge/runner/match)+ 存量数据已清除。好玩基线 v2 改挂评估门。注:「玩法模板」(品类/玩法框架·引导 AI 生成·非 pre-built 代码)未废 = 有效功能·待建,但非最高优先级(最高=Tier 0 生成可靠,玩法模板排其后;HJ-DEMO-AUDIT-001 创始人 2026-06-17,见完成度与优先级总账)。
为什么分层:
- Web 预览和游戏流需要极快加载(P75 < 3s),Tier1 LittleJS 增强发行版 + Runner v2 满足,MVP 仅交付此层
- 复杂 2D/3D/原生产物(Tier2/3)需成熟引擎,复用 Cocos 而非自研(自研 3D/原生引擎工期数十人月不可行),且 MCP 使 AI 驱动可行
- 导出以微信小游戏格式包为统一中转,可异步离线进行,不影响实时预览体验
6.7 AI 素材生成工具链
| 环节 | 工具(现行) | 类型 | 选用理由 |
|---|---|---|---|
| 图片/贴图/角色/场景 | ✅ mmx-cli(MiniMax) | 商用 CLI | 2026-06-12 创始人亲验拍板默认;agent 造游戏直接 CLI 调用,免 GPU/免训练;成本走 new-api 单 key 自动入计费台账 |
| 背景音乐/音效 | ✅ mmx-cli(MiniMax) | 商用 CLI | 同一套 CLI 出图与出乐,免基础设施; |
| 角色语音/音色克隆 | Fish Audio / 阿里 CosyVoice | API+开源 | 中文效果最佳;Fish Audio 支持 few-shot 音色克隆;CosyVoice 开源可自部署 |
| 封面/宣传图 | ✅ mmx-cli(复用同一 CLI) | 商用 CLI | 同一套工具,不同 prompt |
| ❌ ComfyUI(退备选) | 开源 | 节点化 workflow、可训 IP 风格 LoRA、自部署无审查;但需 GPU(无 GPU 走 CPU 慢 10x);mmx-cli 拍板后退为备选 |
现行口径(2026-06-16):素材/音乐工具链 = mmx-cli(2026-06-12 创始人亲验拍板)。ComfyUI 退备选、Stability Audio 降级远期。下方"为什么选 ComfyUI"留作备选时的决策史。
为什么 ComfyUI 留作备选(决策史,非现行):
- ComfyUI 可训练 IP 风格 LoRA,生成风格一致的系列素材(角色/场景/UI)
- 自部署无 API 限制/审查,游戏场景(武器/战斗)不被拒绝
- 长期成本远低于商用 API(GPU 固定成本 vs 按次付费)——但需 GPU 基建,mmx-cli 免 GPU 即用故拍为默认
6.8 内容安全
| 环节 | 工具 | 类型 | 选用理由 |
|---|---|---|---|
| 图片 NSFW/涉政/涉暴 | safe-content-ai(自部署)+ 阿里云内容安全(兜底) | 开源+商用 | 自部署做首道快检(免费/低延迟),高风险样本二次送阿里云确认 |
| 文本违禁/语义 | 阿里云文本审核 | 商用 API | 违禁词库持续更新,语义理解强于规则匹配 |
| 音频内容 | 阿里云音频审核 | 商用 API | 涉黄涉政语音识别 |
| AI 输出风控 | 生成链路内置 Guardrails(SAA 节点/Java 壳) | 自研规则 | Prompt 注入检测 + LLM 输出 schema 校验( |
6.9 工具层全景图
graph TB
subgraph AI生成工具层_现行
SAA[SAA StateGraph编排<br/>Spring AI Alibaba v1.1.2.2]
NEWAPI[new-api 网关<br/>OpenAI兼容/多模型]
LLM[便宜LLM<br/>DeepSeek/MiniMax]
MMX[mmx-cli<br/>图片/音乐素材·MiniMax]
VOICE[Fish Audio/CosyVoice<br/>语音/音色]
end
subgraph 运行时工具层
LJS[LittleJS 增强发行版<br/>55KB gz·Tier1 引擎]
RUNNER[Runner v2<br/>装载契约 game-host.d.ts]
COCOS["Cocos+MCP<br/>(Tier2/3 渠道导出)"]
SDK[WanxiangGameSDK<br/>平台能力注入]
end
subgraph 安全工具层
SAFE_IMG[safe-content-ai<br/>图片快检]
ALI_SEC[阿里云内容安全<br/>兜底确认]
GUARD[Guardrails<br/>Prompt注入+输出Schema校验]
end
subgraph 商业化工具层
CSJ[穿山甲SDK<br/>字节广告]
GDT[优量汇SDK<br/>腾讯广告]
WXPAY[微信支付<br/>Huijing集成]
ALIPAY[支付宝<br/>Huijing集成]
end
subgraph 基础设施工具层
YUDAO[Huijing Cloud<br/>RBAC/BPM/文件/通知]
NACOS["Nacos<br/>(future-state·框架自带未部署)"]
MINIO[MinIO<br/>对象存储]
JPUSH[极光推送<br/>通知]
end
SAA --> NEWAPI
NEWAPI --> LLM
SAA --> MMX & VOICE
SAA --> LJS
LJS --> RUNNER
RUNNER --> SDK
SAFE_IMG --> ALI_SEC
现行口径(2026-06-16):本图已对齐现行工具链——生成 = SAA 裸图编排 → new-api 网关 → 便宜 LLM,素材 = mmx-cli(ComfyUI/Stability Audio 退备选、降级远期),Tier1 引擎 = LittleJS 增强发行版 + Runner v2(自研 Canvas Runtime/LayaAir CLI 已退役)。详见 §6.2/§6.6/§6.7 决策史。
7. 非功能性设计与工程治理
7.1 性能
| 指标 | MVP 目标 | 正式目标 | 应对策略 |
|---|---|---|---|
| 游戏流首屏 | P75 < 3s | P75 < 1.5s | CDN + 预加载 + 资源压缩 + HTTP/2 |
| API 平均延迟 | P95 < 500ms | P95 < 200ms | Redis 缓存 + 连接池 + 读写分离 |
| 生成任务耗时 | P50 < 60s | P50 < 30s | SAA 图并行/条件节点 + 模型优化(new-api 多通道)+ 产物缓存(Prompt hash 命中跳 LLM) |
| 并发玩家 | 1,000 DAU | 100,000 DAU | 水平扩缩 + 推荐缓存 + CDN 卸载 |
| 数据库容量(行数) | 单表 < 5000 万行 | 同左 | 超过则分区/归档,事件表 → ClickHouse;QPS 目标随首次压测基线另定 |
性能测试节奏:Phase 3 结束后跑首次压测(wrk/k6),上线前必须通过目标值。
7.2 可靠性与高可用
| 策略 | 实现 | 落地阶段 |
|---|---|---|
| 服务注册/发现 | Nacos 集群(3 节点,生产)— future-state,框架自带、MVP 未部署 | Phase 4 |
| 熔断降级 | Sentinel(Huijing 集成),per-API 规则 | Phase 1 配置 |
| 数据库高可用 | MySQL 主从(生产);MVP 单节点 + 每日备份 | 上线前 |
| 消息可靠 | RocketMQ 同步刷盘 + 死信队列 + 延迟消息 — future-state,框架自带、MVP 未部署 broker | Phase 2 |
| 生成降级 | LLM 不可用 → new-api 多通道切换 + harness 门兜底 + 确定性 Fallback 生成器 | Phase 2 |
| 游戏加载降级 | 加载超时 5s → 自动跳过 + 错误记录 + 降权 | Phase 3 |
| 备份恢复 | MySQL: 每日全量 + binlog;OSS: 跨区域复制 | Phase 1 |
| 回滚 | 每次部署保留前 3 个版本镜像,5 分钟内可回退 | CI/CD 内置 |
SLO 定义:
| 服务 | SLO | Error Budget(月) |
|---|---|---|
| 游戏流 API | 99.5% 可用 | 3.6 小时不可用 |
| AI 生成 | 99%(允许更高失败率) | 7.2 小时 |
| 支付 | 99.9% | 43 分钟 |
7.3 幂等性与分布式一致性
幂等性设计
| 场景 | 问题 | 方案 |
|---|---|---|
| 用户重复点击"生成" | 重复创建生成任务 | 前端防抖 + 后端 idempotency_key(Redis 5min 去重) |
| MQ 重复消费 | 同一消息处理多次 | 每条消息携带 message_id,消费前查 Redis 已处理集合 |
| 支付回调重复 | 重复入账 | 订单状态机 + 乐观锁(version 字段),已完成的订单不可重入 |
| 发布重复提交 | 重复创建审核流程 | project_version 唯一约束 + 状态前置校验 |
分布式事务
原则:尽量避免分布式事务,用最终一致性 + 补偿替代。
| 场景 | 涉及模块 | 方案 |
|---|---|---|
| 生成成功 → 写版本 + 扣积分 | aigc → project + pay | 本地事务写版本 + MQ 通知扣积分;扣积分失败 → 补偿(标记版本为待支付) |
| 发布审核通过 → 上架 + 刷新 feed | bpm → project + feed | 审核通过本地事务写状态 + MQ 广播 feed 刷新缓存 |
| 支付成功 → 发货 + 通知 | pay → project/ad + community | 支付本地事务 + MQ 事件扇出(各模块独立消费) |
兜底机制:定时任务扫描"中间态"超 5 分钟的记录 → 重试或告警。
7.4 安全
| 层面 | 措施 | 落地阶段 |
|---|---|---|
| 接入防护 | WAF(阿里云/Cloudflare)+ DDoS 高防 | 上线前 |
| 传输 | 全站 HTTPS + HSTS + TLS 1.3 | Phase 1 |
| 鉴权 | OAuth2 + JWT + Refresh Token 轮换(7天/30天) | Phase 1 |
| 权限 | RBAC + DataPermission(创作者只看自己的项目/资产) | Phase 1 |
| 游戏沙箱 | iframe sandbox + CSP + postMessage 来源+Schema 校验 | Phase 2 |
| 内容安全 | Prompt 检测 + 图片检测 + AI 输出校验 + 音频检测 | Phase 2 |
| 注入防护 | Prompt 注入 + SQL 参数化 + XSS 过滤 + SSRF 白名单 | Phase 1 |
| 密钥管理 | Nacos 加密 / K8s Secret(生产);密钥 90 天轮换 | Phase 1 |
| 审计 | 全操作日志 + 180 天保留 + 关键操作实时告警 | Phase 1 |
| 渗透测试 | 上线前一次 + 每季度一次 | 上线前/季度 |
7.5 可观测性
graph LR
APP[业务服务] -->|Metrics| PROM[Prometheus]
APP -->|Traces| JAEGER[Jaeger]
APP -->|Logs| LOKI[Loki/ELK]
APP -->|Errors| SENTRY[Sentry]
PROM --> GRAFANA[Grafana Dashboard]
JAEGER --> GRAFANA
LOKI --> GRAFANA
GRAFANA --> ALERT[告警通道<br/>飞书/钉钉/短信]
日志规范:
| 规则 | 说明 |
|---|---|
| 格式 | JSON 结构化(timestamp / level / trace_id / span_id / module / message / context) |
| 级别 | ERROR(需人处理)/ WARN(可能需关注)/ INFO(关键链路)/ DEBUG(开发用) |
| 脱敏 | Token/密码/手机号/身份证 → 脱敏后输出(138****1234) |
| trace_id | Gateway 入口注入,全链路透传(含 SAA 编排节点 observation + new-api 调用) |
| 保留 | ERROR/WARN: 90 天;INFO: 30 天;DEBUG: 仅 dev 环境 |
告警升级链:
| 级别 | 条件 | 通知方式 | 响应时间 |
|---|---|---|---|
| P0 Critical | 服务不可用 / 数据丢失 / 安全事件 | 电话 + 短信 + 群 | 5 分钟 |
| P1 High | 5xx > 2% / 生成成功率 < 70% / 支付异常 | 短信 + 群 | 15 分钟 |
| P2 Medium | P95 > 800ms / MQ 积压 > 500 / 错误率上升 | 群通知 | 1 小时 |
| P3 Low | 非核心模块降级 / 日志异常增长 | 群通知 | 工作时间处理 |
7.6 工程协作与 DevOps
CI/CD Pipeline
graph LR
DEV[开发推送] --> LINT[代码检查<br/>Checkstyle/ESLint]
LINT --> TEST[自动化测试<br/>单元+集成]
TEST --> BUILD[构建镜像<br/>Docker Build]
BUILD --> SCAN[安全扫描<br/>依赖漏洞/镜像扫描]
SCAN --> DEPLOY_STG[部署 Staging]
DEPLOY_STG --> SMOKE[冒烟测试]
SMOKE --> APPROVE[人工审批<br/>(prod 才需要)]
APPROVE --> DEPLOY_PROD[滚动部署 Prod]
DEPLOY_PROD --> VERIFY[健康检查+流量验证]
VERIFY --> DONE[完成]
VERIFY -->|失败| ROLLBACK[自动回滚]
工具选型:
- CI:GitHub Actions(或 GitLab CI,根据代码托管平台)
- 镜像仓库:阿里云 ACR / Harbor(自建)
- 部署:Docker Compose(MVP)→ K8s ArgoCD(正式)
- 安全扫描:Trivy(镜像)+ Snyk(依赖)
分支策略
main ← 始终可部署,保护分支
└── develop ← 集成分支,CI 通过才能合入
├── feature/xxx ← 功能开发
├── fix/xxx ← Bug 修复
└── release/x.y ← 发版分支(冻结后只修 bug)
| 规则 | 说明 |
|---|---|
| main 保护 | 禁止直推,必须 PR + 至少 1 人 review + CI 通过 |
| feature 命名 | feature/{module}-{brief},如 feature/aigc-dify-integration |
| commit 规范 | Conventional Commits(feat:/fix:/chore:/docs:) |
| PR 大小 | 单次 < 500 行变更,超过必须拆分 |
环境管理
| 环境 | 用途 | 数据 | 部署方式 |
|---|---|---|---|
| local | 开发者本机 | Docker Compose + seed 数据 | 手动 |
| dev | 联调/集成 | 共享数据库(可随时重置) | push develop 自动部署 |
| staging | 预发布验证 | 生产数据脱敏子集 | merge to release 自动部署 |
| prod | 线上 | 真实数据 | 审批后滚动部署 |
数据库迁移
| 工具 | Flyway(Java 标准,Huijing 已集成) |
|---|---|
| 文件命名 | V{版本号}__{描述}.sql,如 V1.0.0__create_game_project.sql |
| 规则 | 只新增、不回滚(需回滚则写新迁移补偿);DDL 和 DML 分开 |
| 检查 | CI 阶段自动执行 flyway validate,不通过则阻断 |
| 大表变更 | pt-online-schema-change 或 gh-ost,不锁表 |
7.7 API 契约与版本管理
API 版本策略
| 方式 | 说明 |
|---|---|
| URL Path 版本 | /api/v1/feed/list,大版本不兼容时升 v2 |
| 向后兼容 | 新增字段不算 breaking;删除/重命名字段 = 新版本 |
| 并行期 | 新版本上线后,旧版本保留至少 3 个月 |
| 废弃通知 | Response Header Deprecation: true + Sunset: date |
服务间契约
| 机制 | 说明 |
|---|---|
| Feign 接口定义 | 每个模块的 -api 包声明 Feign 接口 + DTO,消费方引用此包 |
| 契约测试 | Provider 端 Pact 验证 + Consumer 端 Stub 测试(P2,正式阶段引入) |
| 变更通知 | API 变更必须在 PR 描述中标注影响的消费方 |
事件 Schema 演进
| 规则 | 说明 |
|---|---|
| 版本号 | 每个事件类型带 schema_version 字段(如 game_play_start.v2) |
| 向后兼容 | 新增字段给默认值;老版本消费者忽略未知字段 |
| 不兼容变更 | 新事件名(如 game_play_start_v3),老版本并行消费直到下线 |
| Schema Registry | MVP 用文档管理;正式阶段引入 Schema Registry(如 Confluent 兼容方案) |
7.8 测试策略
┌─────────────────┐
│ E2E 测试 │ 少(核心链路 5-10 条)
│ Playwright │
┌───┴─────────────────┴───┐
│ 集成测试 │ 中(模块间 + 外部依赖)
│ Testcontainers │
┌───┴─────────────────────────┴───┐
│ 单元测试 │ 多(业务逻辑/工具类)
│ JUnit 5 + Mockito │
└─────────────────────────────────┘
| 层级 | 覆盖范围 | 工具 | 运行时机 | 目标覆盖率 |
|---|---|---|---|---|
| 单元测试 | Service/Util/Validator | JUnit 5 + Mockito | 每次 push | 核心逻辑 > 80% |
| 集成测试 | Controller + DB + MQ + 外部 API | Testcontainers(MySQL/Redis/RocketMQ) | PR merge | 核心链路 100% |
| E2E 测试 | 前端 → 后端 → DB 全链路 | Playwright(前端)+ RestAssured(API) | 部署 staging 后 | 核心 happy path |
| 性能测试 | API 吞吐/延迟/并发 | k6 / wrk | Phase 3 结束 + 上线前 | 满足 §7.1 指标 |
| 安全测试 | OWASP Top 10 / 渗透 | ZAP + 人工渗透 | 上线前 + 季度 | 无 Critical/High |
7.9 灰度发布与 Feature Flag
灰度发布
| 策略 | 实现 | 适用场景 |
|---|---|---|
| 按百分比 | Gateway 路由权重(5% → 20% → 50% → 100%) | 新版本服务全量前验证 |
| 按用户标签 | Gateway Header 匹配(内部用户/种子用户/创作者等级) | 新功能定向开放 |
| 按地域 | Gateway IP/地域规则 | 区域性功能或合规要求 |
| 回滚 | 路由权重调回 0% + 旧版本容器不销毁 | 发现异常 5 分钟内回退 |
Feature Flag
| 工具 | 本地配置/数据库开关(MVP,Nacos 框架自带未部署,future-state)→ Nacos 配置中心 / Unleash/LaunchDarkly(正式) |
|---|---|
| 用法 | 代码中 if (featureFlag.isEnabled("new-recommend-algo")) { ... } |
| 管理 | admin 后台可开关,无需重新部署 |
| 清理 | Feature Flag 上线稳定 2 周后必须删除,不留死代码 |
7.10 扩展性设计
| 扩展方向 | 预留机制 |
|---|---|
| 新玩法/能力插件 | LittleJS 能力插件注册(游戏模板/填参线已废 W-CLEAN,玩法/美术/关卡/UI=agent 生成域)+ Prompt Registry 示例 |
| 新 LLM 供应商 | new-api 网关多通道(OpenAI 兼容)+ 同模型降级抽检 |
| 新广告联盟 | AdProvider SPI 接口 |
| 新支付渠道 | PayChannel SPI 接口(Huijing 原生支持) |
| 新分发渠道 | ConversionAdapter SPI 接口;Tier1(LittleJS)渠道 adapter 走 W-CH-α 竞标 |
| 单体→微服务(future-state) | Spring Profile 控制模块加载 + Nacos 路由(Nacos 框架自带、MVP 未部署) |
| MySQL→ClickHouse | 事件表 DAO 抽象 + 双写期 |
| SDK 版本升级 | manifest 中声明 SDK 版本 + 向后兼容 + 运行时按版本加载 |
| 多端适配(小程序壳/APP壳) | SDK + 宿主分离;宿主可替换为微信/抖音小程序容器 |
| Prompt 版本管理 | Prompt 即第 8 契约(Git Registry)+ 环境隔离(draft/published)+ 轻量门禁 |
| 生成产物缓存 | 相同 Prompt hash → 缓存命中 → 跳过 LLM 调用(节省成本/加速) |
8. 关键技术风险与应对
| # | 风险 | 概率 | 影响 | 应对策略 | 降级方案 |
|---|---|---|---|---|---|
| 1 | LLM 调用不稳定(超时/限流/幻觉) | 高 | 高 | new-api 网关多通道切换 + 同模型降级抽检 + SAA 节点重试 + harness 九门兜底 | 确定性 Fallback 生成器 |
| 2 | 生成游戏质量不可控 | 高 | 高 | JSON Schema 强校验 + 可玩性自动测试(harness 九门)+ 插件库约束 | 质量不达标不入库(门未过不出包) |
| 3 | 游戏沙箱逃逸 | 低 | 极高 | CSP + sandbox + 无网络 + postMessage 校验 | 检测到异常立即销毁 iframe |
| 4 | — | — | 现行生成 = new-api + SAA 裸图编排,无 OpenGame 依赖;本行留作历史 | — | |
| 5 | LLM 网关/编排框架升级不兼容(new-api / SAA) | 中 | 中 | 锁定 SAA v1.1.2.2(同 minor 补丁前向兼容)+ new-api 自部署可控 + 编排藏在 job/callback 契约后可替换 | 单写切回 http worker dispatcher |
| 6 | 广告联盟审核不通过 | 中 | 高 | 提前申请资质 + 内容合规前置 | 延迟广告上线,先做订阅/B端 |
| 7 | 多模块单体启动内存不足 | 低 | 中 | 8GB+ JVM + 模块懒加载 | 拆分 2-3 个 JVM |
| 8 | MQ 重复消费导致数据不一致 | 中 | 高 | 消息幂等消费(§7.3) | 定时任务修复 + 告警 |
| 9 | 分布式事务部分失败 | 中 | 高 | 最终一致性 + 补偿机制(§7.3) | 中间态扫描 + 人工介入 |
| 10 | CI/CD 流水线瘫痪 | 低 | 中 | 多 runner + 镜像缓存 | 手动部署备案流程 |
| 11 | 第三方 SDK 数据泄露 | 低 | 极高 | 广告/支付 SDK 宿主侧隔离 + 最小权限 | 紧急下线第三方 SDK |
| 12 | LLM 网关单点(new-api)通道批量失效(2026-06 已真实发生:二厂系全废) | 中 | 高 | 多通道健康巡检 + key 激活状态监控 + 同模型降级抽检(R8) | 单通道降级运行 + 批跑冻结阀 |
| 13 | LLM 成本失控(免费生成被滥刷 / 推理输出吃光配额) | 中 | 高 | 生成限频限额 + 日预算熔断告警 + 显式 max_tokens | 超额暂停生成入口,仅确定性模板兜底 |
| 14 | 监管与上游平台风险(无版号 UGC 定性 / AIGC 标识义务 / 微信抖音下场) | 中 | 极高 | 非纯技术风险,由合规专项与对外材料承载(HJ-AUDIT-001 R2),本表登记防失踪 | 自有端收敛邀请制灰度 + 变现走渠道备案通道 |
9. 演进路线
⚠️ 2026-06-10 回填:本章甘特为 2026-06-06 蓝图原案,执行排期以
mvp-execution-spec+MVP作战清单为准;「Dify + OpenGame Docker 部署」一项已随 C2 裁定取消(模板驱动主线);验收口径已改内网种子灰度(2026-06-08 业务决策)。
gantt
title v2.0 实施路线
dateFormat YYYY-MM-DD
axisFormat %m/%d
section Phase 1:基座(2周)
Fork huijing-cloud + 本地跑通全栈 :p1a, 2026-06-09, 3d
创建 13 个 game-module 骨架 :p1b, after p1a, 3d
Dify + OpenGame Docker 部署 :p1c, after p1a, 3d
game-admin fork + game views 骨架 :p1d, after p1a, 4d
game-studio 项目初始化 :p1e, after p1a, 3d
Docker Compose 全栈可启动 :p1f, after p1c, 3d
section Phase 2:创作链路(3周)
project 模块 CRUD + 状态机 :p2a, after p1f, 4d
aigc→Dify→OpenGame 集成验证 :p2b, after p1f, 5d
runtime 编译+打包+预览交付 :p2c, after p2b, 4d
studio 创作工作台 UI :p2d, after p2a, 7d
生成质量门禁(Schema+可玩性) :p2e, after p2c, 3d
section Phase 3:分发链路(3周)
feed 推荐引擎 + API :p3a, after p2e, 5d
studio 游戏流 UI + 三容器预加载 :p3b, after p3a, 5d
compliance 内容安全 + 审核(BPM) :p3c, after p2e, 5d
telemetry 事件摄取 + 看板 :p3d, after p3a, 5d
互动(点赞/收藏/分享/举报) :p3e, after p3b, 3d
section Phase 4:变现+部署(2周)
ad 广告位定义 + 联盟 SDK 集成 :p4a, after p3e, 5d
trade 创作者钱包 + 分成结算 :p4b, after p4a, 4d
pay 积分充值(微信/支付宝) :p4c, after p4a, 3d
deploy 文档 + healthcheck + seed :p4d, after p4b, 3d
全链路冒烟测试 :p4e, after p4d, 2d
section Phase 5:打磨+上线(1周)
性能优化(CDN/缓存/预加载) :p5a, after p4e, 3d
安全加固 + 渗透测试 :p5b, after p4e, 3d
灰度发布 + 种子用户内测 :p5c, after p5a, 4d
总周期:约 11 周(2.5 个月),产出完整 MVP 闭环。
10. 成本估算
10.1 基础设施成本(MVP 阶段,月度)
| 资源 | 规格 | 月费估算 |
|---|---|---|
| 云服务器(业务) | 4C16G × 2 | ¥1,200 |
| 生成接入服务器(new-api 网关自部署 + 调度) | 4C16G × 1( |
¥600 |
| MySQL RDS | 2C8G | ¥400 |
| Redis | 2G | ¥200 |
| OSS + CDN | 100GB 存储 + 500GB 流量 | ¥300 |
| LLM API 调用 | ~10,000 次/月 × ¥0.1 | ¥1,000 |
| 域名 + SSL | — | ¥100 |
| 监控/备份/冗余 | Prometheus/Grafana/Sentry + 备份 | ¥500 |
| 合计 | ~¥4,300/月(上限 < 5000 元/月,与投资人版核算口径一致) |
10.2 团队配置(建议最小)
| 角色 | 人数 | 职责 |
|---|---|---|
| 后端工程师 | 2 | huijing 二开 + 业务模块 + API |
| 前端工程师 | 1 | game-studio + game-admin 二开 |
| AI/生成工程师 | 1 | SAA 裸图编排 + new-api 接入 + 便宜模型/harness 门 + 生成质量 |
| 产品/运营 | 1 | PRD + 种子用户 + 审核 |
| 合计 | 5 人 |
11. 附录
11.1 术语表
| 术语 | 含义 |
|---|---|
| GameConfig | 游戏配置 JSON,描述玩法/关卡/角色/规则 |
| GamePackage | 可运行的游戏包(代码 + 资源 + manifest) |
| DAG / StateGraph | 有向无环图/状态图,描述生成工作流节点编排;现行由 SAA(Spring AI Alibaba)裸 StateGraph 承担(11 节点/4 条件边), |
| quality_score | 基于玩家行为信号聚合的游戏质量评分 |
| Feed | 游戏流推荐列表 |
| Manifest | 游戏包描述文件(入口/资源列表/hash/大小) |
11.2 决策记录索引
| 决策 | 文档位置 |
|---|---|
| 模块划分(13 个业务模块) | 技术架构与模块.md |
| AI 引擎选型( |
本文 §6.2 |
| 生成主线 = 模板驱动 via new-api 网关 → agent 写码于插件库(MVP 现行) | C2 裁定:docs/agent-specs/2026-06-09-generation-spike/spike-summary.md;HJ-GEN-001 + .agents/skills/cheap-model-game-generation.md |
agentic 编排基建 = SAA(Spring AI Alibaba GA v1.1.2.2)裸 StateGraph 编排(HJ-AGI-002,现行;AgentScope 降 long-term premium) |
docs/agent-specs/2026-06-15-SAA-* + .agents/skills/saa-graph-orchestration.md + .agents/knowledge/tech-decisions.md §1/§4 |
Tier1 引擎 = LittleJS 增强发行版(55KB gz)+ Runner v2 装载契约 game-host.d.ts(2026-06-12 终裁,自研 Canvas<15KB 已废除、15KB 红线废除) |
docs/agent-specs/_archive/2026-06-11-T1引擎终裁包.md + .agents/knowledge/tech-decisions.md §1.1 |
| 模板 = LittleJS 能力插件;游戏模板/填参式模板已废除(W-CLEAN),玩法/美术/关卡/UI=agent 生成域;「玩法模板」(品类/玩法框架·引导 AI 生成·非 pre-built 代码)未废=有效功能·待建,但非最高优先级(最高=Tier 0 生成可靠,玩法模板排其后;HJ-DEMO-AUDIT-001 创始人 2026-06-17,见完成度与优先级总账) | HJ-GEN-001 + .agents/knowledge/tech-decisions.md §1.1 |
| AI 素材/音乐工具链 = mmx-cli(MiniMax,2026-06-12 创始人亲验拍板默认);ComfyUI 退备选 | .agents/knowledge/tech-decisions.md §1(AI 素材工具链行) |
| 代码命名空间 = com.wanxiang.huijing(公司 Wanxiang/项目 Huijing,2026-06-15 合 dev/2.0.0);对外品牌 = 绘境AI | docs/memorys brand-rename + .agents/knowledge/product-and-architecture.md |
| RocketMQ / Nacos = future-state(yudao 框架自带依赖+yaml 配置存在,MVP 未部署 broker/registry) | 本文 §3.1/§3.3/§5.2/§7.2;.agents/knowledge/tech-decisions.md |
| LLM 接入(D1:主 DeepSeek/备 Qwen;现行 = new-api 网关多模型,deepseek-v4-flash/pro + MiniMax-M2.7/M3 渠道全活) | docs/agent-specs/_archive/2026-06-08-mvp业务决策.md + .agents/knowledge/tech-decisions.md §3 |
| MVP 模板集(D2:idle/tycoon/merge/clicker —— ⚠️ 游戏模板/填参线(旧4模板)已随 W-CLEAN 废除、存量已清;玩法模板(品类框架)未废待建;模板=LittleJS 插件) | 同上 + HJ-AUDIT-001 R4 + W-CLEAN |
11.3 后续文档规划
| 文档 | 受众 | 状态 |
|---|---|---|
| 系统概要设计-技术决策版(本文) | CTO/技术合伙人 | ✅ 完成 |
| 系统概要设计-投资人版 | 投资人/融资 | ✅ 完成 |
| 系统概要设计-开发团队版 | 工程师 | ✅ 完成 |
| 接口契约文档 | 前后端工程师 | Phase 2 产出 |
| 数据库设计文档 | 后端工程师 | Phase 1 产出 |