zcbot/skills/ppt/SKILL.md

6.4 KiB
Raw Blame History

name description
ppt 生成 PowerPoint 演示文稿 (.pptx)。当用户要求做汇报 PPT、把材料/会议纪要/方案转为幻灯片、生成演示稿时使用。

PPT

把材料变成可演示的 .pptx。先定调,再出稿,再验收 —— 不要一口气把整份 deck 丢出去。

资源

  • references/design_principles.md —— 画布尺寸 + 字号/配色/留白/字数预算等硬规则
  • references/layouts.md —— 9 种版式的 python-pptx 起手代码 + 安全区/越界保护 + apply_brand 品牌条
  • references/icons.md —— 业务图标两层:Iconify (在线/本地缓存) / unicode 字形兜底
  • assets/icons/ —— 本地图标缓存 (Iconify 拉过的图存这,见 INDEX.md 推荐清单)
  • 素材摄取: 直接用 markitdown CLI (PDF/DOCX/PPTX/XLSX/HTML/URL → 干净 Markdown)
  • scripts/fetch_icon.py —— 从 Iconify CDN 拉 SVG/PNG (染主题色,缓存本地)
  • scripts/render_icon.py —— unicode 字形 → 透明 PNG (Iconify 没有时兜底)
  • scripts/quality_check.py —— 产物 .pptx 验收 (越界 / 文本溢出 / 颜色一致)

默认主题 — 商务红 (硬约束)

主色 #C00000 / 辅色 #E15554 / 强调色 #FFC107

不允许擅自换色。除非满足以下任一条件,否则 spec_lock 必须填这套红色:

  • 用户在请求里明确点名其它配色 (例:"做成蓝色"、"用我们公司的紫色")
  • 用户提供素材里有明确的 brand guideline / 配色卡

禁止的自我合理化(都属违规):

  • "这个场景蓝色更专业" / "学术汇报红色不合适" / "财务用蓝更稳重"
  • "我觉得 XX 主题更适合"

要换色,先问用户,不要在 spec_lock 里塞自己的偏好。其它备选见 design_principles.md §2

两阶段工作流

阶段一: 策略 (Strategist) — 八条对齐

产物:spec_lock.md —— 整个 deck 的"宪法",阶段二每页前都要重读。

按下表一次性给出推荐方案,然后 BLOCKING:等用户确认/修改后才能进阶段二。不要一条一条问。

# 默认值
1 画布 16:9 (13.33×7.5 in)
2 页数 封面 + 5-8 页正文 + 尾页(Q&A) = 共 7-10 页。封面 / 尾页强制必有,不在 5-8 页预算里
3 受众 看材料推断:领导汇报 / 同行评审 / 客户 pitch
4 风格 现代简约 (白底 + 细线 + 留白)
5 配色 商务红 #C00000 #E15554 #FFC107 (见上"默认主题")
6 字体 微软雅黑 + Arial
7 图标 Iconify tabler (描边商务图标,主色染色;fetch_icon.py 拉到 assets/icons/ 缓存)
8 图表 数据 ≥ 3 个点的页用 matplotlib 配图

把这 8 项写进 spec_lock.md,以表格形式给用户预览,问一句"按这个开干?"。spec_lock 写定后不再改,有冲突回头跟用户重新对齐。

阶段二: 执行 (Executor) — 逐页生成

每页前 必须 read 一次 spec_lock.md,只用里面定的颜色/字体/图标 —— 不允许凭记忆或临时发挥。这条规则是为了对抗长 deck 中的上下文漂移。

每页流程:

  1. <task_dir>/spec_lock.md (即使刚读过)
  2. 图标先于版式: 这一页要用什么概念图标? 先 glob <skill_dir>/assets/icons/ 看本地有没有 (<skill_dir>load_skill 头里的绝对路径),没有就 python <skill_dir>/scripts/fetch_icon.py <name> --set tabler --color C00000 --size 128 -o <skill_dir>/assets/icons/... 拉一个;add_picture 嵌入。几何形状(圆点/徽章/装饰线)不算图标,走 layouts.md helper 即可
  3. 写一个 run_python block,用 python-pptx 添加这一页 (载入已有 .pptx → append slide → save)
  4. 报这一页:版式、标题、要点条数、用了哪些图标
  5. 用户确认 / 微调后再下一页

为什么逐页? 一次性出全 deck 中途改方向就要全推翻;逐页能让用户在第 2 页就发现问题。

例外: 用户明确说"别问,直接全做了" —— 一次跑完,但跑完必须用 quality_check.py 验收。

阶段三: 验收

python <skill_dir>/scripts/quality_check.py <task_dir>/<output.pptx> --spec <task_dir>/spec_lock.md

不通过的项,回头 edit 对应页。

设计原则 (硬规则速查)

  • 每页一个核心信息: 一页讲一件事,塞两件就拆页
  • bullet ≤ 5 条: 超过就拆页或改成图表/双栏
  • 正文不写完整段落: 列要点;长句留给演讲者口述
  • 数据 ≥ 3 个点应有图表: 用 matplotlib 生成 .png 嵌入
  • 中文标题 ≤ 30 字
  • 配色三色封顶: 主 + 辅 + 强调,其他用灰阶
  • 少用大色块,多用细线 + 图标 + 留白
  • 图标走 MSO_SHAPE: 矢量、可编辑;复杂图标走 render_icon.py
  • Shape 不能越界: layouts.md 起手代码用 assert_inside 在生成时即报错
  • 字数按预算来: 写 bullet 前查 design_principles.md §4.1 字数预算表
  • 详细规则见 references/design_principles.md

工作目录约定

下文 <task_dir> = system prompt 里「task_dir」给的绝对路径(形如 …/workspace/tasks/<task_id>/)。所有产物都写到 task_dir 下,不要写到 cwd / skills/ / repo 根;assets/icons/ 是 skill 自带的图标缓存,继续走 skills/ppt/assets/icons/

<task_dir>/
├── source.md            # markitdown 转出的素材
├── spec_lock.md         # 八条对齐落定
├── slides/
│   └── chart_p3.png     # 各页用到的图片素材
└── <topic>.pptx         # 最终产物 (按主题命名)

反模式

  • 用户没给材料就开始硬编内容
  • 八条没对齐就跑 python-pptx
  • 基于"场景判断"自行换配色(见上"默认主题"违规清单)
  • 缺封面 / 缺尾页(Q&A) —— 两端都是强制项,不算在正文页数预算内
  • 裸白纸版式 —— 所有版式起手都必须 apply_brand(slide, kind),见 layouts.md
  • 业务概念页只用几何形状 —— 比如"战略目标"页只摆圆点 bullet 没有 target 图标,视觉太单薄;按 §阶段二第 2 步先拉 Iconify 图标再做页
  • 一个 run_python 出整 deck (中途改方向就要全推翻)
  • 跑完不做 quality_check.py 就交付
  • 起名 output.pptx / untitled.pptx —— 务必按主题给文件名

输出

完成后告诉用户:文件路径、页数、用到的版式列表、是否有未满足的 spec 项。问一句要不要再改。