# PPT 风格一致性经验总结 更新日期:2026-04-26 ## 背景 当前 PPT 生成是“整页图片”模式:每一页都会独立排队生图。 如果只在每页 prompt 里写一句泛化风格,例如 `professional, modern, clean`,图片模型会把每页当成独立设计任务,导致封面、目录、内容页和结尾页像来自不同模板。 这类问题不能只靠“提示模型保持一致”解决,需要把“整套 PPT 的风格规格”变成可复用、可持久化的数据。 ## 经验原则 1. 风格要从单页 prompt 上升为 deck 级规格。 - 大纲阶段应生成一份全局 `styleSpec`。 - 每页生图 prompt 都注入同一份 `styleSpec`。 - `styleSpec` 需要具体描述色板、字体、布局、装饰母题和禁止漂移项,不能只写抽象形容词。 2. 风格规格要持久化到 PPT 页面元数据。 - 完整 PPT、思维导图转 PPT、手动新增 PPT 页都应写入 `pptMeta.styleSpec`。 - 单页重生成时应复用原 `slidePrompt` 和 `styleSpec`,否则新增页或重生成页容易脱离整套 PPT。 3. 相邻页面上下文比强制串行更适合作为默认策略。 - 完整 PPT 生成如果强制等上一页图片完成再生成下一页,会明显拖慢整体体验。 - 默认做法应保持后台并发/队列模型,只在 prompt 中注入上一页、下一页摘要。 - 当上一页已经有生成图时,单页重生成可以把上一页图片作为额外参考图传入。 4. 参考图不能写入大对象元数据。 - `pptMeta` 只保存轻量 URL、提示词和 `styleSpec` 文本。 - 不要把 base64 大图、图片二进制或长文本写入 PPT 元数据,避免画布存储膨胀和内存压力。 5. 新旧数据都要能继续生成。 - 旧大纲没有 `styleSpec` 时,解析层应自动补默认风格。 - 模型只返回部分 `styleSpec` 字段时,应使用默认字段补齐,而不是直接拒绝整份大纲。 ## 代码层面固化的规则 ### 1. 大纲解析负责兜底 `parseOutlineResponse` 不只做 JSON 解析,还要把缺失或不完整的 `styleSpec` 归一化。 这样模型偶发漏字段、旧数据重跑、额外要求中包含风格描述时,都能进入同一条稳定路径。 ### 2. 生图 prompt 必须包含全局风格规格 `generateSlideImagePrompt` 应包含: - 当前页内容、版式和视觉概念 - 整套 PPT 共用的 `styleSpec` - 上一页/下一页摘要 - 明确禁止“当前页另起一套画风、色板、字体或组件样式” ### 3. Frame 元数据是单页重生成的风格来源 创建 PPT Frame 时应写入: - `pptMeta.slidePrompt` - `pptMeta.styleSpec` - `pptMeta.layout` - `pptMeta.pageIndex` 单页重生成、历史切换、素材替换都应优先复用这些轻量元数据。 ### 4. 上一页参考图按“已有则用”处理 单页 AI 生成入口可以查找上一页 PPT 图: 1. 优先按 `pptMeta.pageIndex` 找最近上一页。 2. 没有页码时,按画布 children 顺序向前兜底。 3. 找到 URL 后作为额外参考图传给图片生成弹窗。 不要为了上一页参考图改变完整 PPT 的任务调度策略。 ## 检查清单 - 完整 PPT 生成:每页 `slidePrompt` 都包含同一份 `styleSpec`。 - 思维导图转 PPT:转换出的 outline 和每个 Frame 都有 `styleSpec`。 - 新增 PPT 页:继承当前 deck 的 `styleSpec`,并生成默认 `slidePrompt`。 - 单页重生成:当前页图片作为参考图;上一页已有图片时作为额外参考图。 - 旧数据兼容:缺失 `styleSpec` 的 outline 能正常解析并补默认风格。 - 性能约束:不存 base64 大图,不因风格一致性引入强制串行等待。 ## 验证建议 ```bash pnpm --filter @aitu/drawnix exec vitest run \ src/services/ppt/__tests__/ppt-prompts.test.ts \ src/services/ppt/__tests__/mindmap-to-ppt.test.ts \ src/services/ppt/__tests__/mindmap-to-ppt-generation.test.ts \ src/utils/__tests__/frame-insertion-utils.test.ts pnpm nx typecheck drawnix ``` ## 提交备注模板 ```text 问题描述: - 完整 PPT 和单页 PPT 生图各自独立理解风格,导致页面之间视觉体系不一致。 修复思路: - 引入 deck 级 styleSpec,并在大纲解析、整页生图 prompt、Frame 元数据和单页重生成入口中复用。 - 单页重生成在已有上一页图片时带入上一页参考图,但不改变完整 PPT 的队列并发策略。 更新代码架构: - PPT prompt 层负责 styleSpec 生成、归一化和注入。 - PPT Frame 元数据新增轻量 styleSpec,作为后续重生成的风格来源。 ```