# 大鱼吃小鱼提示词脚本拆分 2026-04-28 ## 背景 大鱼吃小鱼当前在 `server-rs/crates/api-server/src/big_fish.rs` 与 `server-rs/crates/api-server/src/big_fish_agent_turn.rs` 中同时承载了三类不同职责的提示词: 1. Agent 聊天阶段的草稿生成提示词。 2. 结果页主图 / 生图提示词。 3. 结果页动作关键帧提示词。 这会带来两个直接问题: 1. 聊天共创脚本和正式资产脚本混在路由业务文件中,后续继续调词时很容易顺手改到状态编排逻辑。 2. 大鱼吃小鱼已经明确要求“草稿编译”和“结果页资产工坊”分离,如果提示词仍散落在业务实现里,后续很容易再次把动作资产逻辑误塞回 compile action。 ## 本轮目标 把下面三类提示词显式拆到独立 prompt 脚本中: 1. 草稿生成提示词。 2. 生图提示词。 3. 动作提示词。 并保持以下边界不变: 1. 不改变 Big Fish 的会话表、草稿表、资产表结构。 2. 不改变 compile action 只编译草稿、不串行生成资产的现有口径。 3. 不改写当前中文提示词语义,只做脚本落位和调用收口。 ## 落位方案 新增文件: ```text server-rs/crates/api-server/src/prompt/big_fish.rs ``` 该文件统一收口: 1. `BIG_FISH_AGENT_SYSTEM_PROMPT` 2. `build_big_fish_agent_prompt(...)` 3. `build_big_fish_level_main_image_prompt(...)` 4. `build_big_fish_level_motion_prompt(...)` 5. `build_big_fish_stage_background_prompt(...)` 6. `BIG_FISH_DEFAULT_NEGATIVE_PROMPT` 7. `BIG_FISH_TRANSPARENT_ASSET_NEGATIVE_PROMPT` 同时把 `prompt/mod.rs` 补齐为正式导出入口,和现有: 1. `puzzle/image.rs` 2. `character_visual.rs` 3. `character_animation.rs` 4. `scene_background.rs` 保持同一层级。 ## 调用边界 ### 1. 草稿生成 `server-rs/crates/api-server/src/big_fish_agent_turn.rs` 改为只负责: 1. 调用公共 LLM turn 执行器。 2. 解析 `replyText / progressPercent / nextAnchorPack`。 3. 组装 finalize input。 不再内联维护大段 system prompt / output contract / chat prompt 拼接逻辑。 ### 2. 生图与动作 `server-rs/crates/api-server/src/big_fish.rs` 改为只负责: 1. 读取当前 session 与 draft。 2. 根据 `asset_kind` 构造正式资产上下文。 3. 调用 DashScope 出图。 4. 下载、后处理、持久化并写入资产绑定。 主图、动作关键帧、背景图的正式提示词脚本都从 `crate::prompt::big_fish` 引入,不再内联在路由业务脚本中。 ## 为什么三类脚本要继续分开 ### 草稿生成提示词 它的职责是把玩法灵感收束成: 1. 玩法承诺 2. 生态视觉主题 3. 成长阶梯 4. 风险节奏 它面向的是 LLM 的结构化共创,不面向图片模型。 ### 生图提示词 它的职责是把已经落库的等级蓝图翻译成“单体鱼形主图”的正式图片提示词。 它面向的是透明背景主体资产,需要强调: 1. 单体主体 2. 透明背景 3. 中心构图 4. 不出现 UI / 场景 / 多主体 ### 动作提示词 它的职责是把等级蓝图和动作槽位翻译成“静态关键帧预览图”的正式图片提示词。 它和主图区别在于: 1. 需要显式带入 `motion_key` 2. 需要区分 `idle_float / move_swim` 3. 需要强调动作方向和关键帧姿态 因此不能继续复用同一段文本拼接后靠 if 分支临时改句子。 ## 本轮验收 1. 大鱼吃小鱼草稿生成提示词已从 `big_fish_agent_turn.rs` 抽离。 2. 大鱼吃小鱼主图、动作、背景提示词已从 `big_fish.rs` 抽离。 3. 路由业务文件只保留编排、鉴权、调用与错误映射职责。 4. 新增 prompt 文件具备最小测试覆盖。 5. `npm run check:encoding` 通过,确保新增中文文档与 Rust 注释未被写坏。