Files
TrueGrowth/docs/PPT_STYLE_CONSISTENCY_LESSONS.md

108 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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作为后续重生成的风格来源。
```