2.1 KiB
2.1 KiB
RPG 创作 profile 生成后端迁移(2026-04-28)
1. 背景
docs/audits/engineering/RPG_FRONTEND_SCRIPT_BACKEND_MIGRATION_AUDIT_2026-04-28.md 的 5.3 指出,src/services/rpg-creation/rpgCreationGenerationClient.ts 在非浏览器环境仍会动态 import('../ai'),让 RPG 创作 profile 生成继续保留前端 legacy AI 后门。
这与当前边界冲突:
- 前端只负责表现和 API client。
- RPG 创作 prompt 与 LLM 编排只能在
server-rs/crates/api-server/src/prompt/rpg/与api-server侧出现。 - 外部 LLM 调用不能进入 SpacetimeDB reducer,必须由 Axum /
platform-llm完成后再把确定结果交给后续持久化链。
2. 本轮落地
2.1 前端
src/services/rpg-creation/rpgCreationGenerationClient.ts 现在不再判断 typeof window,也不再动态导入 src/services/ai.ts。
无论浏览器、SSR 还是 Vitest node 环境,generateRpgWorldProfile(...) 都只调用:
POST /api/runtime/custom-world/profile
测试如需离线运行,应 mock requestJson,不能恢复本地 AI 生成链。
2.2 后端
server-rs/crates/api-server/src/app.rs 新增:
POST /api/runtime/custom-world/profile
handler 落在 server-rs/crates/api-server/src/custom_world.rs:
- 校验
settingText。 - 要求 Bearer 鉴权。
- 要求
platform-llm可用。 - 复用
generate_custom_world_foundation_draft(...)生成 profile 草稿。 - 补齐结果页需要的
id / settingText / templateWorldType / compatibilityTemplateWorldType / items / generationMode / generationStatus / creatorIntent。 - 直接返回
CustomWorldProfileJSON,保持前端旧 client contract 不变。
本轮不新增 SpacetimeDB 表,不修改 migration.rs。
3. 验收
src/services/rpg-creation/**不再出现import('../ai')、LegacyAiModule、loadLegacyAiModule。src/services/rpg-creation/index.ts不再导出generateLegacyCustomWorldProfile。- node 环境测试确认 profile 生成只走
requestJsonmock。 - Rust
api-server测试确认/api/runtime/custom-world/profile未登录返回401。