Files
Genarrative/docs/technical/RPG_CREATION_PROFILE_GENERATION_BACKEND_MIGRATION_2026-04-28.md
2026-04-28 19:36:39 +08:00

2.1 KiB
Raw Permalink Blame History

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 后门。

这与当前边界冲突:

  1. 前端只负责表现和 API client。
  2. RPG 创作 prompt 与 LLM 编排只能在 server-rs/crates/api-server/src/prompt/rpg/api-server 侧出现。
  3. 外部 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

  1. 校验 settingText
  2. 要求 Bearer 鉴权。
  3. 要求 platform-llm 可用。
  4. 复用 generate_custom_world_foundation_draft(...) 生成 profile 草稿。
  5. 补齐结果页需要的 id / settingText / templateWorldType / compatibilityTemplateWorldType / items / generationMode / generationStatus / creatorIntent
  6. 直接返回 CustomWorldProfile JSON保持前端旧 client contract 不变。

本轮不新增 SpacetimeDB 表,不修改 migration.rs

3. 验收

  1. src/services/rpg-creation/** 不再出现 import('../ai')LegacyAiModuleloadLegacyAiModule
  2. src/services/rpg-creation/index.ts 不再导出 generateLegacyCustomWorldProfile
  3. node 环境测试确认 profile 生成只走 requestJson mock。
  4. Rust api-server 测试确认 /api/runtime/custom-world/profile 未登录返回 401