Files
TrueGrowth/docs/PPT_STYLE_CONSISTENCY_LESSONS.md

4.5 KiB
Raw Blame History

PPT 风格一致性经验总结

更新日期2026-04-26

背景

当前 PPT 生成是“整页图片”模式:每一页都会独立排队生图。 如果只在每页 prompt 里写一句泛化风格,例如 professional, modern, clean,图片模型会把每页当成独立设计任务,导致封面、目录、内容页和结尾页像来自不同模板。

这类问题不能只靠“提示模型保持一致”解决,需要把“整套 PPT 的风格规格”变成可复用、可持久化的数据。

经验原则

  1. 风格要从单页 prompt 上升为 deck 级规格。

    • 大纲阶段应生成一份全局 styleSpec
    • 每页生图 prompt 都注入同一份 styleSpec
    • styleSpec 需要具体描述色板、字体、布局、装饰母题和禁止漂移项,不能只写抽象形容词。
  2. 风格规格要持久化到 PPT 页面元数据。

    • 完整 PPT、思维导图转 PPT、手动新增 PPT 页都应写入 pptMeta.styleSpec
    • 单页重生成时应复用原 slidePromptstyleSpec,否则新增页或重生成页容易脱离整套 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 大图,不因风格一致性引入强制串行等待。

验证建议

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

提交备注模板

问题描述:
- 完整 PPT 和单页 PPT 生图各自独立理解风格,导致页面之间视觉体系不一致。

修复思路:
- 引入 deck 级 styleSpec并在大纲解析、整页生图 prompt、Frame 元数据和单页重生成入口中复用。
- 单页重生成在已有上一页图片时带入上一页参考图,但不改变完整 PPT 的队列并发策略。

更新代码架构:
- PPT prompt 层负责 styleSpec 生成、归一化和注入。
- PPT Frame 元数据新增轻量 styleSpec作为后续重生成的风格来源。