Files
Genarrative/docs/experience/RPG_ROLE_VISUAL_DESCRIPTION_CHAIN_2026-04-24.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

2.3 KiB

RPG 角色形象描述数据链路核查 2026-04-24

结论

草稿生成阶段会让大模型为每个可扮演角色和场景角色生成 visualDescription,该字段是角色主形象生成和资产工坊“形象描述”输入框的同一份默认文本来源。

本次核查发现前端 normalizeCustomWorldProfileRecord 曾在规范化 playableNpcs / storyNpcs 时丢弃 visualDescriptionactionDescriptionsceneVisualDescription。因此后端草稿 JSON 中有大模型生成的文字,但草稿进入前端编辑器后,资产工坊可能只能回退到 description,用户看不到真正的角色形象文字描述。

数据链路

  1. 后端草稿生成:server-rs/crates/api-server/src/custom_world_foundation_draft.rs
    • 角色框架名单 prompt 要求 LLM 输出 visualDescriptionactionDescriptionsceneVisualDescription
    • visualDescription 定义为打开角色形象图像生成面板时默认填入的角色形象描述。
  2. 后端角色主形象生成:server-rs/crates/api-server/src/custom_world.rs
    • generate_draft_foundation_role_visuals 从角色对象读取 visualDescription
    • 缺失时直接失败,提示不能在角色形象设定文本生成前生图。
    • 生图成功只写回 imageSrcgeneratedVisualAssetId,不会覆盖 visualDescription
  3. 草稿持久化:草稿 profile JSON 保留角色对象字段,visualDescription 应与图片字段一起进入保存载荷。
  4. 前端规范化:src/data/customWorldLibrary.ts
    • normalizePlayableNpc / normalizeStoryNpc 必须保留三类资产描述字段。
  5. 资产工坊展示:src/components/rpg-creation-asset-studio/RpgCreationRoleAssetStudioModalImpl.tsx
    • modal 用角色对象构造 baseRole
    • buildDefaultRolePromptBundle(baseRole) 优先把 role.visualDescription 转成 visualPromptText
    • RpgCreationRoleVisualSection 的“形象描述” TextArea 展示 visualPromptText

验收要点

  • 草稿生成完毕后,打开某个角色的资产工坊,应在“形象描述”框看到 LLM 生成的 visualDescription
  • 如果角色有 visualDescription,缓存中的旧 visualPromptText 不应覆盖它。
  • 如果角色缺 visualDescription,才允许前端回退到更弱的字段或缓存文本。