3.9 KiB
3.9 KiB
大鱼吃小鱼草稿生成链路修复 2026-04-28
背景
大鱼吃小鱼玩法的结果页已经具备等级卡、主图工坊、动作工坊和背景工坊,但当前 big_fish_compile_draft 只是把锚点交给 module-big-fish 的 compile_default_draft(...) 做静态模板拼装。
这会导致两个直接问题:
- 草稿编译虽然能成功进入结果页,但每一级实体只会拿到非常概括的模板文本,无法真正产出“实体名称、文字描述、形象描述、待机动作描述、移动动作描述”这一组首稿。
- 主图和动作工坊默认提示词没有绑定到一份足够细的草稿真相源,动作面板只能看到合并后的
motionPromptSeed,会表现成“草稿生成一带而过,所有内容都没有正常生成”。
本次修复口径
1. 每级等级蓝图必须补齐的文本字段
大鱼吃小鱼每一级 level blueprint 在保留原有字段的同时,新增并持久化下面这些文本真相:
textDescription- 当前等级实体的正文文字描述。
- 用于结果页等级卡和后续重生成时的人类可读设定底稿。
visualDescription- 当前等级实体的形象描述。
- 主图工坊默认输入内容直接取这份字段。
idleMotionDescription- 当前等级待机动作描述。
idle_float动作工坊默认输入内容直接取这份字段。
moveMotionDescription- 当前等级移动动作描述。
move_swim动作工坊默认输入内容直接取这份字段。
2. 默认提示词流转规则
草稿生成、结果页工坊和正式资产生成统一按下面口径流转:
- 草稿编译阶段先产出上述结构化文本字段。
- 主图工坊默认文案:
- 优先显示
visualDescription visualPromptSeed作为主图正式生图提示词的冻结快照,可由visualDescription组合生成
- 优先显示
- 动作工坊默认文案:
idle_float优先显示idleMotionDescriptionmove_swim优先显示moveMotionDescriptionmotionPromptSeed继续保留为动作方向总提示词摘要,但具体动作正式生图必须显式拼入动作位对应描述
- 草稿阶段生成的正式主图、动作图和后续重生成,都只能读取同一份
draft.levels[*]真相,前端不得本地拼接新的设定文案。
3. 编译策略
big_fish_compile_draft 需要升级为:
api-server先调用 LLM 做结构化草稿编译。- 若 LLM 成功,则把完整
draft_json写回 SpacetimeDB。 - 若 LLM 不可用、返回非法 JSON 或字段缺失,则退回
compile_default_draft(...)的 deterministic fallback。
这样可以同时保证:
- 正常环境下草稿不再只是模板壳。
- 模型偶发失败时不会打断结果页主链。
- SpacetimeDB reducer 不承担外部网络调用,仍然符合后端边界。
落地范围
本次修复涉及:
server-rs/crates/module-big-fishserver-rs/crates/spacetime-moduleserver-rs/crates/spacetime-clientserver-rs/crates/shared-contractsserver-rs/crates/api-serverpackages/shared/src/contracts/bigFish.tssrc/components/big-fish-result/BigFishResultView.tsx
验收口径
修复后需要满足下面这些观察结果:
- 点击“生成草稿”后,
draft.levels[*]不再只有空泛模板,而是每级都带名称、文字描述、形象描述、待机动作描述、移动动作描述。 - 打开主图工坊时,默认文本来自当前等级的
visualDescription。 - 打开待机动作工坊时,默认文本来自当前等级的
idleMotionDescription。 - 打开移动动作工坊时,默认文本来自当前等级的
moveMotionDescription。 - 资产槽位
promptSnapshot与对应动作位 / 主图位的默认提示词一致。 - LLM 不可用时仍然能生成一版可用 fallback 草稿,而不是直接报错或写入空草稿。