# PPT模板提取术

> 把任意公司 .pptx 模板提炼为一个公司专属 PPT 模板 Skill(命名规范:〈公司名〉PPT模板制作助手〈序号〉, 如「电网公司PPT模板制作助手1」; 强路·可编辑·视觉一致)。触发:用户给了一个 .pptx 模板并希望"以后用这个模板风格批量生成 PPT"或"把这个模板做成可复用 Skill"。这是第1层元技能,产物是第2层公司专属 Skill。

- Skill: `songyouai/ppt` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add songyouai/ppt`
- Raw SKILL.md: https://api.skillmd.com/api/skills/songyouai/ppt/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: SongYouAI (https://skillmd.com/u/songyouai)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/songyouai/ppt

---


# PPT模板提取术(第1层·元技能)

> 把任意公司 PPT 模板,提炼成一个**可复用的公司专属 Skill**。
> 第1层(本技能)= 模板→Skill 的**生成器**;第2层(产物)= 某公司的「〈公司名〉PPT模板制作助手〈序号〉」(如「电网公司PPT模板制作助手1」),用来批量出 PPT。
> 本技能内含**事例库**(`examples/`)。每成功提炼一次,就往里追加一条案例;事例越多,下次分类与生成越准。

---

## 0. 输入

- 本 SKILL.md + `README.md`(给接收者看的门面) + `references/` 脚本 + `examples/` 事例库(随本技能自带)
- 用户的**公司模板 .pptx**(与本技能同目录或用户指定路径)
- 可选:用户补充说明(如"必须 16:9""清除某水印")

⚠️ 模板是二进制,**无法塞进本文件**,必须作为单独文件随任务提供。

---

## 1. 阶段判定(自动)

- 检测目标 Skill 目录(`~/.workbuddy/skills/<公司名>PPT模板制作助手<序号>` 或用户指定)是否已存在:
  - **已存在** → 走「校验增强」:重跑提取、比对差异、补事例、更新 SKILL.md。
  - **不存在** → 走「完整创建」。
- 能力自检(自动降级兜底):
  - 有 `python` + `python-pptx` → 走**自动提取**(代码精确读 XML,非肉眼意会)。
  - 无 `python-pptx` → 先执行 `pip install python-pptx`(或 `python -m pip install python-pptx`)补齐;仍装不上才降级。
  - 无 `python` → 降级为「分析 + 产出待办清单」,明确告知用户需补环境或人工补全令牌。
- **跨平台**: 下文命令里的 `python3` 在 Windows 上请用 `python`(脚本本身跨平台, 仅命令名不同)。

---

## 2. 提取设计令牌(Step 1,自动)

运行 `references/extract_template.py <模板.pptx> <输出目录>`:

- 页面比例(EMU → 比值)
- 主题色(Office clrScheme 12 色 hex)
- 字体(扫描 slide/版式/母版 run.font.name)
- 版式列表(slide_layouts 名称)
- 全部图片**不落盘**(随 `company-template.pptx` 底座继承即可);仅**自动判 LOGO**:
  - 排除铺满 >60% 页面的背景图(`is_bg`)
  - 在剩余图中取"离页面四角最近"者,优先级 母版 > 版式 > slide
  - 真 LOGO 存为 `assets/logo.<ext>`
- 产出 `assets/tokens.md`(机器可读令牌)

读 `assets/tokens.md`,记录关键事实:**版式数量**与**slide 数量**的比值——这是分类的核心依据(见 Step 3)。

---

## 3. 模板类型分类 + 选生成策略(Step 2,核心)

读 `references/classification.md` 决策树,结合 `assets/tokens.md` 判定类型,**选对应生成策略**:

| 类型 | 判据 | 生成策略(写进 Layer2 SKILL.md) |
|---|---|---|
| **页面库型** | slide 多(≥10)且版式极少(≤3) | 复制模板页 + 替换文字(保留全部页作库,挑页删余) |
| **母版克隆型** | 版式丰富(≥5)且 slide 少 | 克隆母版 + 用版式新增页 |
| **混合型** | 介于两者之间 | 母版克隆为主,缺页时从现有 slide 复制补 |

⚠️ **这一步决定成败**:分类错(如对页面库型误用母版克隆)会丢失大量既有设计, fidelity 暴跌。事例库(`examples/`)是分类的经验来源——抽前先扫一眼同类案例(大批量同家族模板, 先查 `examples/全量清单.md` 确认其已登记的类型与特征, 避免重复提炼)。

---

## 4. 落库底座 + 写 Layer2 SKILL.md(Step 3)

1. 复制模板为 `assets/company-template.pptx`(生成底座,**强路核心**)。
2. **复制生成器进 Layer2(自包含,关键)**:把本技能 `references/gen_sample.py` 与 `references/verify_sample.py` 复制到 Layer2 的 `references/` 目录。这样 Layer2 自带"打开底座→挑页→替换文字→删余页"的执行代码与比对器,任何 Agent 用 Layer2 时**直接调用**,不必重新推导代码(避免弱路漂移)。
3. 用下方「Layer2 SKILL.md 模板」填空:
   - 替换 `<公司/模板描述>`、`<触发场景>`、`<比例>`、`<主题色>`、`<LOGO 路径>`、`<字体>`、`<可用页面类型>`、`<生成策略段落>`。
   - **硬规则 11 条原样保留,不得删改**(尤其第 11 条清第三方水印)。
   - 把 `examples/` 中同类案例的"坑"同步进硬规则或备注。

### Layer2 SKILL.md 模板(填空用)

```
---
name: <公司>PPT模板制作助手
description: 用"<公司/模板描述>"公司 PPT 模板生成可编辑 PPTX。触发:<触发场景>类 PPT。
---

# <公司>PPT模板制作助手

## 生成底座(<生成策略名>)

<生成策略段落:页面库法/母版克隆法/混合法,讲清"打开底座→挑页/用版式→替换文字→删余页">

> 本 Skill 自带执行代码,**直接调用,勿重造**:
> `python3 references/gen_sample.py --tpl assets/company-template.pptx --out 产出.pptx --strategy <页面库法|母版克隆法> --pages <索引,逗号分隔>`
> ⚠️ `--pages` 语义因策略而异: **页面库法**=模板页(slide)索引; **母版克隆法**=版式(layout)索引(0=封面, 1=标题内容, 2=...)。填错会删错页或版式越界报错。
> 生成后用 `python3 references/verify_sample.py assets/company-template.pptx 产出.pptx --expect <页数>` 自检(页数断言防删除失效假通过)。

## 设计令牌(从 assets/tokens.md 原样填入)
- 页面比例: <比例>
- 主题色: <hex>
- LOGO: assets/logo.<ext>(<位置/尺寸>;母版继承优先,缺时插此文件)
- 字体: <字体列表>(⚠️ 缺失字体回退系统字体,视觉可能微调)
- 可用页面类型: <节选自模板,标明每页索引>
- 图片资产: 模板内全部图片随底座继承,无需单独引用;仅 assets/logo.<ext>(真LOGO)缺时插入,严禁重绘

## 【硬规则】
1. 保留原模板页面比例
2. 视觉以"复制模板页+替换文字/克隆母版"实现,不重新绘制风格
3. LOGO 只许母版继承或插入 assets/logo.<ext>,严禁用形状/文字重绘
4. 保留模板固定品牌元素(背景图/页脚/装饰)
5. 优先复用原页面版式,不新造
6. 每页只表达一个核心观点
7. 不编造资料中不存在的数据/案例/机构
8. 所有元素必须可继续编辑
9. 生成前先给建议页数与页面大纲(标明每页用模板第几页)
10. 完成后说明每页核心内容、所用模板页、需人工复核页
11. 【清除第三方水印】若模板带任何来源/广告水印,生成的公司 PPT 不得保留;复制的页带此类字样必须清除。
```

---

## 5. 自检 + 自测收敛(Step 4–5,自动)

1. **逐项自检** Layer2 SKILL.md:比例 / LOGO原图 / 色值 / 中间页版式 / 内容真实 / 真克隆或真复制底座 / 可编辑 / 禁重绘 LOGO / 清第三方水印 — 缺项补齐。
2. **生成 3 页样例**:用 `references/gen_sample.py`(按 Step 3 策略)产出 `样例-<主题>.pptx`。
3. **自动比对** `references/verify_sample.py`(判据:比例✓ / **页数=期望值(--expect)**✓ / 页面实色⊆模板✓ / LOGO原图二进制✓ / 字体✓ / 版式同源✓ / 可编辑✓ / 残留占位符=0✓)。⚠️ 必须带 `--expect <生成页数>`,否则"删页失效却保留全页"会蒙混 ALL_PASS。
4. **收敛循环**(最多 3 轮):任一 ✗ → 定位根因 → 修正(换页/修替换逻辑/升级比对项)→ 重生成重比对;连续 2 轮零 ✗ 提前停。

---

## 6. 输出报告 + 自进化(Step 6,关键)

1. 向用户输出**提炼报告**:Skill 路径 / 模板类型 / 策略 / 收敛轮数 / 判据全 ✓ / **遗留风险**(字体缺失、页面库未覆盖类型、矢量LOGO等)。
2. **自进化(必做)**:把本次提炼写成一条案例,追加到 `examples/<模板名>-<类型>.md`,格式:

```
## <模板名>(<日期>)
- 类型: 页面库型 / 母版克隆型 / 混合型
- 策略: <用了哪套>
- 关键事实: slide=N 版式=M 比例= 字体=
- 踩坑: <真实翻车点 + 怎么修>
- 结果: 收敛轮数 / 判据 / 遗留风险
- 可复用经验: <下次同类模板直接用的结论>
```

事例越多 → 分类越准、生成越接近原版。这是本技能"越用越准"的引擎。

> **大批量同家族模板(如 182 个第一PPT 模板)**:不要逐个建案例文件(会撑爆事例库、Agent 反而忽略)。
> 做法:① 跑 `extract_template.py` 批量抽令牌 → ② 按 classification.md 决策树自动分类聚类 →
> ③ 每类型挑代表验证收敛 → ④ 每类型写 **1 条** 结构化案例 + 一份 `examples/全量清单.md`(逐文件索引兜底)。
> 已沉淀: `第一PPT家族-通用特征.md` / `国家电网-页面库型.md` / `混合型-第一PPT.md` / `母版克隆型-第一PPT.md` / `全量清单.md`。

---

## 7. 硬纪律(给执行 Agent)

- 模板文件**必须落库**为 `assets/company-template.pptx`,否则退化为弱路(凭文字重画, fidelity 靠运气)。
- LOGO / 图片**只许文件引用,严禁文字/形状重绘**(二进制无法被文字复现)。
- 模板为底座,**不是参考**——生成时打开它、复用它,不是从空白 Presentation 新建一套。
- 不自欺:遗留风险如实列,不宣称"零问题"。

