Skill 从入门到精通——第四章 Anthropic 官方Skill解析—pptx Skill 解析
pptx Skill 解析—演示文稿创建与编辑
一、技能概述
PPTX Skill 是 Anthropic 官方 Claude Code 的 Office 文档处理技能之一,专精于 .pptx 文件的读取、编辑、创建三大场景。其架构核心为双路径工作流:
- 模板编辑路径:基于 OOXML 物理文件操作(ZIP 解包 → XML 编辑 → ZIP 回包),通过显式中间态实现精准、可验证的编辑。
- 从零创建路径:基于
PptxGenJS(Node.js 库)程序化生成全新演示文稿
技能的核心设计哲学是**“可验证的物理编辑”**——所有对现有 PPTX 的修改均通过解包为 XML 文件后操作,再经 Schema 校验回包,确保输出文件的 Office 兼容性。
触发条件(由 SKILL.md frontmatter 定义):
- 用户提及
.pptx 文件名
- 关键词触发:
deck「文稿」、slides「幻灯片」、presentation「演示文档」
- 任何涉及 PPTX 作为输入、输出或双向交互的场景
二、文件结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
pptx/
├── SKILL.md # 编排层:触发条件、设计规范、QA 强制要求
├── editing.md # 模板编辑模式完整指南(工作流程SOP + 格式化规则 + 常见陷阱)
├── pptxgenjs.md # PptxGenJS 从零创建指南(API 参考 + 常见陷阱)
├── LICENSE.txt # 专有协议
└── scripts/ # 执行层
├── add_slide.py # 幻灯片克隆 / 从布局创建新幻灯片
├── clean.py # 文件清理(引用图遍历算法)
├── thumbnail.py # 缩略图网格生成(soffice → PDF → ppm)
└── office/ # Office 通用基础设施(与 docx/xlsx 技能共享)
├── unpack.py # 解压 + XML 美化 + 智能引号转义 + DOCX 预处理
├── pack.py # XML 压缩 + 验证编排 + ZIP 回包
├── soffice.py # LibreOffice 沙箱适配层(运行时 LD_PRELOAD shim 编译)
├── validate.py # 验证路由 CLI 入口
├── helpers/ # DOCX 专用 DOM 优化器
├── validators/ # OOXML Schema 验证体系
└── schemas/ # 内嵌 XSD Schema 库(离线,零外部依赖)
|
架构分层:
- 指令层 (
SKILL.md, editing.md, pptxgenjs.md): 定义 Agent 行为契约、设计规范、QA 流程
- 脚本层 (
scripts/*.py): Python 工具链,处理 OOXML 包结构
- 办公包层 (
scripts/office/): 通用 Office Open XML 解包/打包/验证基础设施
三、核心决策树
Agent 收到用户请求后,按以下决策树路由:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
用户请求涉及 .pptx
│
├─ 读取/分析内容?
│ ├─ 纯文本提取 → python -m markitdown presentation.pptx
│ └─ 视觉概览 → python scripts/thumbnail.py presentation.pptx
│
├─ 编辑/修改现有 PPTX?
│ ├─ 有模板/参考文件 → 模板编辑模式(读取 editing.md 工作流)
│ │ unpack → analyze → manipulate → edit → clean → pack → QA
│ └─ 无模板 → 不适用(建议先获取模板或转从零创建新 PPTX)
│
├─ 从零创建新 PPTX?
│ └─ 无模板可用 → PptxGenJS 模式(读取pptxgenjs.md)
│ (pptxgenjs + 设计规范 + QA 流程)
│
└─ 需要视觉 QA?
└─ 生成图片检查 → soffice.py --convert-to pdf → pdftoppm -jpeg
|
关键决策点:
- 模板可用性: 决定走 XML 编辑流(保留原有设计资产)还是代从零创建新 (完全可控)
- QA 强制循环: SKILL.md 规定"首次渲染几乎从不正确",必须完成至少一次 fix-and-verify 循环才能声明成功
- 子代理策略: 视觉 QA 和幻灯片内容编辑阶段明确建议使用子代理(subagents)并行处理
四、主要工作流
1 模板编辑工作流(editing.md)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# Step 1: 分析模板
├── python scripts/thumbnail.py template.pptx # 视觉概览
└── python -m markitdown template.pptx # 文本内容概览
# Step 2: 规划幻灯片映射(内容 → 布局匹配)
# 原则:拒绝单调布局,主动选择多列、图文组合、全出血图、引用页、数据看板等
├── 为每个内容段选择合适的布局(必须多样化:多列、图文、引言、数据卡等)
└── 避免:所有幻灯片使用同一布局
# Step 3: 解包
└── python scripts/office/unpack.py template.pptx unpacked/ # 解包
# Step 4: 结构操作(由主 Agent 执行,非子代理)
├── 删除幻灯片:从 presentation.xml 的 p:sldIdLst 移除对应 p:sldId
├── 复制幻灯片:python scripts/add_slide.py unpacked/ slide2.xml
├── 调整顺序:重排 p:sldIdLst 中的元素
└── 完成所有结构变更后再进入内容编辑
# Step 5: 内容编辑(可使用子代理并行,每页独立 XML)
├── 每个 slide{N}.xml 是独立文件,Subagent 可并行编辑
├── 必须:使用 Edit 工具(禁止 sed / Python 脚本直接修改)
├── 必须:标题/标头使用 b="1"
├── 禁止:Unicode bullets(•),使用 <a:buChar> 或 <a:buAutoNum>
└── 多个项目必须拆分为独立 <a:p> 元素
# Step 6: 清理
└── python scripts/clean.py unpacked/
# Step 7: 打包&验证
└── python scripts/office/pack.py unpacked/ output.pptx --original template.pptx
# 内部执行:condense XML → XSD 差分验证 → auto-repair → ZIP 打包
# QA(强制)
├── 内容 QA:python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum"
├── 视觉 QA:soffice.py --convert-to pdf → pdftoppm -jpeg → Subagent 图像审查
└── 修复 → 重新验证 → 直到一次完整检查无新问题
|
2 从零创建工作流(pptxgenjs.md)
1
2
3
4
5
6
|
npm install -g pptxgenjs react-icons react react-dom sharp
Node.js 脚本 → pres.addSlide() / addText() / addImage() / addChart() / addTable()
→ pres.writeFile({ fileName: "Presentation.pptx" })
QA 同模板模式(转为 PDF → 图像检查)
|
3 幻灯片添加机制(add_slide.py)
add_slide.py 是 Skill 中唯一被授权修改 PPTX 结构(而非内容)的官方工具:
- 复制模式(
slide2.xml):shutil.copy2() 复制 slide 文件及 .rels,自动移除 notesSlide 引用(避免多 slide 指向同一 notes slide 的验证失败)
- 布局模式(
slideLayout2.xml):生成一个仅包含 spTree 骨架的空白 slide XML,.rels 指向指定 layout
- 关系 ID 分配:解析
presentation.xml.rels 中所有 rId{N},取 max + 1 生成新 ID
- Slide ID 分配:解析
presentation.xml 中所有 p:sldId 的 id 属性,取 max + 1
- Content_Types 注册:自动在
[Content_Types].xml 追加新 slide 的 Override
禁止手动复制 slide 文件——手动复制会遗漏 notes 引用、Content_Types、relationship ID 的同步更新,导致 pack 验证失败。
五、设计通用启示
1、Skill 架构设计模式
- 渐进式披露(Progressive Disclosure): 通过
SKILL.md → editing.md → pptxgenjs.md 三级文档,根据任务复杂度路由到不同详细程度的指南
- 工具链分层: 指令层(markdown)与执行层(python/js 脚本)分离,脚本可独立运行,也可被 Agent 调用。
- QA 内建: 将质量验证作为工作流的必要环节而非可选项,强制 fix-and-verify 循环。
- 子代理感知: 在并行化友好阶段(单页 XML 编辑、视觉审查)明确建议使用 subagents。
2、办公文档 Skill 的通用基础设施
scripts/office/ 中的 unpack.py / pack.py / validate.py / soffice.py 是 Anthropic 为所有 Office 文档技能(docx/pptx/xlsx)构建的共享基础设施:[^33^]
- 解包不仅仅是解压: 包含 XML 美化、关系简化、智能引号转义,将二进制包转换为"AI 可编辑"形态。
- 打包不仅仅是压缩: 包含验证、自动修复、语义对比(
--original),确保"打包成功"等价于"语义安全"。
- 沙箱感知:
soffice.py 处理受限环境中的 LibreOffice 执行,体现 Agent 工作流的部署场景考量。
六 使用示例
示例 1:基础生成 PPT
在claude code中输入指令:
1
2
3
4
5
6
7
|
调用 pptx 技能,基于以下主题生成一份基础的演示文稿:
主题:2024 年第一季度产品销售复盘
要求:
1. 包含封面、目录、销售数据概览、区域销售分析、问题与改进建议、总结 6 个页面;
2. 配色以商务蓝为主,字体统一使用微软雅黑;
3. 销售数据概览页需插入柱状图展示各产品线销售额;
4. 输出格式为 pptx 文件,文件命名为 “2024Q1 销售复盘.pptx”。
|
生成结果如下:

生成的2024Q1 销售复盘.pptx 文件展示:


示例 2:PPT 内修改
1
2
3
4
5
|
调用 pptx 技能,对已生成的 “2024Q1 销售复盘.pptx” 进行如下修改:
1. 将 “区域销售分析” 页的图表替换为饼图(展示各区域销售额占比);
2. 在 “问题与改进建议” 页末尾新增 “行动项时间节点” 表格,包含行动项、负责人、完成时间 3 列;
3. 调整封面页标题字体大小为 36 号,副标题为 24 号;
4. 保存修改后的文件,命名为 “2024Q1 销售复盘_修订版.pptx”。
|
示例 3:数据联动类 PPT
1
2
3
4
5
6
7
8
9
10
11
|
调用 pptx 技能,制作一份关联 Excel 数据的销售分析 PPT:
数据源:“2024 月度销售数据.xlsx”(包含月份、销售额、客单价、复购率字段)
要求:
1. 自动从 Excel 中提取数据,生成 3 个可视化图表:
- 月度销售额趋势折线图;
- 客单价 vs 复购率散点图;
- 各季度销售额占比环形图;
2. 图表需关联数据源,当 Excel 数据更新时,PPT 图表可一键刷新;
3. 每个图表页添加数据解读文字(简要分析趋势 / 异常点);
4. PPT 中添加数据筛选按钮,可切换展示 “华东 / 华南 / 华北” 区域数据;
5. 输出 pptx 文件,并附带数据源关联操作说明。
|
补充学习资源
如您想要系统建立 AI Agent 全栈开发能力,从概念认知到企业级项目落地、线上迭代优化,可以参考《栖微 AI Agent 工程师实战成长营》专栏。专栏以六阶成长路径组织内容,配套实战源码与持续更新的前沿案例,补齐 Demo 到生产环境之间的工程化短板。
更多介绍:《栖微 AI Agent 工程师实战成长营》
Github 项目 :https://github.com/tinyseeking/tidy-agent-practice
欢迎大家一起探讨智能体开发相关问题。