AgentSkillsCN

PPT演示助手

智能演示文稿助手,支持创建新演示、编辑现有演示、多轮修改和主题应用。 触发场景: (1) 用户需要创建新的 PPT 演示文稿 (2) 用户需要编辑或修改现有 .pptx 文件 (3) 用户需要提取 PPT 中的内容或图片 (4) 用户询问"帮我做个PPT"、"制作演示文稿" 支持: 商务演示、学术报告、产品介绍、培训材料等场景

中文原作
SKILL.md
--- frontmatter
name: PPT演示助手
description: |
  智能演示文稿助手,支持创建新演示、编辑现有演示、多轮修改和主题应用。
  触发场景:
  (1) 用户需要创建新的 PPT 演示文稿
  (2) 用户需要编辑或修改现有 .pptx 文件
  (3) 用户需要提取 PPT 中的内容或图片
  (4) 用户询问"帮我做个PPT"、"制作演示文稿"
  支持: 商务演示、学术报告、产品介绍、培训材料等场景
icon: 📽️
category: 办公

PPTX 智能演示助手

核心原则

  1. 五阶段工作流: 研究收集 → 大纲规划 → 设计构思 → 生成演示 → 迭代修改
  2. 增量修改优先: 只修改需要修改的部分,保留原文档完整性
  3. 主动澄清需求: 不确定时先问,不要猜测用户意图
  4. 等待用户回答: 使用 AskUserQuestion 后必须停止等待,绝对禁止自己假设答案继续执行

任务识别与路由

创建新演示文稿

使用 pptxgenjs (JavaScript),参考 pptxgen-js.md

编辑现有演示文稿

使用 Presentation 类 (Python) + OOXML 直接编辑,参考 ooxml.md

提取内容

使用解包工具提取 XML 和媒体文件


五阶段工作流

阶段一:研究收集

在开始任何操作前,必须:

1. 识别任务类型

  • 创建新演示
  • 编辑现有演示
  • 格式调整
  • 内容提取

2. 收集素材

  • 读取用户提供的文档 (PDF/DOCX/MD)
  • 网络搜索补充资料(如需要)
  • 整理关键信息点

3. 主动澄清不明确的需求

重要: 当需求不够明确时,必须使用 AskUserQuestion 工具询问用户,并等待用户回答后才能继续禁止: 自己假设用户的回答然后继续执行。

对于创建新演示任务,如果用户没有明确指定,必须询问:

code
使用 AskUserQuestion 工具询问以下问题:

问题1: 演示场景是什么?
- 选项: 商务汇报 / 学术报告 / 产品介绍 / 培训材料 / 其他

问题2: 预计幻灯片数量?
- 选项: 简短版(5-10页)/ 标准版(10-20页)/ 详细版(20页以上)

问题3: 视觉风格偏好?
- 选项: 商务简约 / 学术严谨 / 创意活泼 / 极简现代

调用 AskUserQuestion 后,必须停止并等待用户回答。绝对不能自己假设答案继续执行。

阶段二:大纲规划

1. 生成演示结构大纲

markdown
## 演示大纲

### 1. 封面页
- 标题: [主标题]
- 副标题: [副标题/日期/作者]

### 2. 目录页
- 章节列表

### 3-N. 内容页
- 每页核心信息
- 视觉呈现方式(文字/图表/图片)

### N+1. 结束页
- 总结/致谢/联系方式

2. 等待用户确认

使用 AskUserQuestion 工具询问:

code
问题: 大纲是否符合您的预期?
- 选项: 确认,开始设计 / 需要调整大纲 / 添加更多内容

阶段三:设计构思

1. 选择/应用主题

可用预设主题:

  • corporate.json - 商务主题(深蓝配色,专业风格)
  • academic.json - 学术主题(简洁配色,严谨风格)
  • creative.json - 创意主题(活泼配色,现代风格)
  • minimal.json - 极简主题(黑白配色,极简风格)

2. 规划视觉呈现

每页确定:

  • 布局类型(标题页/内容页/图表页/图片页)
  • 元素配置(标题/正文/要点/图表/图片)
  • 动画效果(如需要)

阶段四:生成演示

1. 转换为 Design DSL

Design DSL 是中间表示层,用于描述幻灯片结构:

json
{
  "presentation": {
    "theme": "corporate",
    "slides": [
      {
        "layout": "title",
        "elements": [
          { "type": "title", "text": "主标题", "style": "heading1" },
          { "type": "subtitle", "text": "副标题" }
        ]
      },
      {
        "layout": "content",
        "elements": [
          { "type": "title", "text": "章节标题" },
          { "type": "bullets", "items": ["要点1", "要点2", "要点3"] }
        ]
      }
    ]
  }
}

2. 生成 pptxgenjs 代码

参考 pptxgen-js.md 生成完整的 JavaScript 代码。

3. 执行生成 PPTX

bash
node generate-presentation.js

阶段五:迭代修改

1. 接收用户反馈

2. 定位修改位置

  • 使用幻灯片编号
  • 使用元素类型(标题/正文/图表)
  • 使用文本内容搜索

3. 增量更新

  • 对于新创建的演示:修改 pptxgenjs 代码重新生成
  • 对于现有演示:使用 Presentation 类进行 OOXML 编辑

4. 生成修改摘要

markdown
## 修改摘要

本次修改共涉及 N 处变更:

1. [幻灯片N]: [原内容] → [新内容]
2. [幻灯片M]: [调整说明]

5. 询问后续需求

使用 AskUserQuestion 工具询问:

code
问题: 接下来您想?
- 选项: 继续修改其他部分 / 调整刚才的修改 / 确认完成,下载文档

技术实现细节

创建新演示文稿

使用 pptxgenjs 创建新演示。

Workflow

  1. MANDATORY - READ ENTIRE FILE: Read pptxgen-js.md completely
  2. Create a JavaScript file using pptxgenjs API
  3. Export as .pptx using pres.writeFile()

编辑现有演示文稿

使用 Presentation library (Python library for OOXML manipulation)。

Workflow

  1. MANDATORY - READ ENTIRE FILE: Read ooxml.md completely
  2. Unpack the document: python ooxml/scripts/unpack.py <pptx_file> <output_directory>
  3. Create and run a Python script using the Presentation library
  4. Pack the final document: python ooxml/scripts/pack.py <input_directory> <pptx_file>

提取内容

提取文本

bash
# 解包后访问 ppt/slides/ 目录
python ooxml/scripts/unpack.py presentation.pptx unpacked/
# 文本在 slide*.xml 的 <a:t> 标签中

提取图片

bash
# 解包后直接访问 ppt/media/ 目录
python ooxml/scripts/unpack.py presentation.pptx unpacked/
ls unpacked/ppt/media/

关键文件结构

code
unpacked/
├── [Content_Types].xml      # 内容类型定义
├── _rels/
│   └── .rels               # 根关系文件
├── docProps/
│   ├── app.xml             # 应用属性
│   └── core.xml            # 核心属性(标题、作者等)
└── ppt/
    ├── presentation.xml    # 演示文稿主文件
    ├── slides/
    │   ├── slide1.xml      # 幻灯片内容
    │   └── slide2.xml
    ├── slideLayouts/       # 幻灯片布局
    ├── slideMasters/       # 幻灯片母版
    ├── theme/              # 主题定义
    └── media/              # 图片和媒体文件

转换为图片

bash
# 转换为 PDF
soffice --headless --convert-to pdf presentation.pptx

# PDF 转图片
pdftoppm -jpeg -r 150 presentation.pdf slide

Options:

  • -r 150: Resolution 150 DPI
  • -f N: First page
  • -l N: Last page

常用布局类型

布局说明适用场景
title标题幻灯片封面页
section节标题章节分隔
content标题+内容常规内容页
two-column两栏布局对比内容
blank空白页自定义布局
image图片页全屏图片

依赖

bash
# JavaScript
npm install pptxgenjs

# Python
pip install defusedxml lxml

Code Style Guidelines

  • Write concise code
  • Avoid verbose variable names and redundant operations
  • Avoid unnecessary print statements
  • 中文注释,ASCII 风格分块