PPT叙事师
描述
本技能下载后即可使用,所有核心能力都在技能包内,不依赖任何外部服务。
包内四个文件:
- scripts/ppt_builder.py — 版式生成器,封面 / 目录 / 章节页 / 数据页 / 对比页 / 风险页 / 计划页 七类版式,折线 / 条形 / 环形三种图表
- scripts/outline_validator.py — 大纲校验器,生成前自检,避免格式错误
- references/full-example.md — 从素材到 10 页大纲、再到成品 .pptx 的完整可运行示例
- 本文件 SKILL.md
使用场景
当用户出现以下任一意图时使用本技能:
- 明确要求制作 PPT / 演示文稿 / 幻灯片 / deck / keynote
- 要求把一份文档、报告、数据表、会议记录"做成 PPT"
- 需要工作汇报、项目路演、教学课件、竞品分析、项目复盘类演示材料
- 已有初稿 PPT,需要重构叙事结构或精简文案
不适用:
- 仅需美化已有 .pptx 的视觉样式 → 使用 office 的 pptx 技能
- 仅需撰写演讲稿逐字稿 → 按写作类技能处理
确认点
全流程只强制确认两处,其余步骤自动默认执行,不再逐项打断用户:
1. 叙事主线(步骤 1 产出的一句话主线)
2. 逐页大纲(步骤 2 产出的表格)
用户对第 2 点点头后,步骤 3–7 连续自动完成,只在遇到"素材缺数据"时回来问一句。
指令
步骤 0 · 信息采集
确认以下 5 项,缺失则用默认值并在输出开头标注默认值:
1. 演示场景(工作汇报 / 路演 / 教学 / 竞品分析 / 复盘 / 其他)
2. 受众与决策者关注点(如 VP 关注结果与风险)
3. 时长或页数上限(默认 12–15 页)
4. 目标结论(希望听众听完做什么决定)
5. 素材来源(对话文本 / 本地文件 / 数据表 / 图片 / 链接 / 会议记录)
步骤 1 · 选定叙事骨架并产出主线【确认点 ①】
按场景选择;无匹配则用「金字塔 + SCQA」通用骨架。
- 工作汇报:结论先行 → 结果数据 → 关键动作 → 问题与风险 → 下一步计划
- 项目路演:痛点 → 方案 → 数据验证 → 竞争壁垒 → 团队 → 融资计划
- 教学课件:学习目标 → 概念讲解 → 例证 → 练习 → 小结与作业
- 竞品分析:市场概况 → 主要玩家 → 多维对比 → 差异机会 → 建议
- 项目复盘:目标 → 实际结果 → 归因分析 → 经验教训 → 改进项
- 通用:SCQA(情境-冲突-问题-答案)→ 论点 MECE 分组
产出一句话叙事主线(含数字结论 + 逐页逻辑走向),暂停等用户确认。
步骤 2 · 输出逐页大纲【确认点 ②】
每页给出 4 项,用表格呈现:
| 页码 | 标题(结论式) | 核心要点(≤3 条) | 建议图表/版式 |
|---|---|---|---|
- 标题必须是结论句;禁止"关于 XX 的介绍""XX 概述"这类无信息量标题
- "建议图表/版式"一列直接映射到步骤 5 的版式函数名
- 暂停等用户确认;确认后步骤 3–7 自动执行
- 确认后先用包内校验器自检:
import sys; sys.path.insert(0, "scripts") # 在技能根目录下执行
from outline_validator import validate_outline
issues = validate_outline(pages, scene="工作汇报") # pages 为大纲 list[dict]
print(issues or "校验通过")
步骤 3 · 文案精炼(分场景规则)
| 场景 | 要点数上限 | 单条字数 | 附加规则 |
|---|---|---|---|
| 工作汇报 / 路演 / 竞品 | ≤3 条 | ≤20 字 | 保持精炼,能数字化就数字化 |
| 教学课件 / 技术方案 | ≤5 条 | ≤40 字 | 允许更多解释与公式,可保留定义、推导步骤 |
| 复盘 | ≤3 条 | ≤25 字 | 每条必须含"事实 + 归因"两段 |
通用要求:保留支撑性证据(数据来源、时间范围);"增长 37%"优于"增长明显"。
时间轴页(plan)按阶段计,最多 5 个阶段、单条 ≤25 字。
步骤 4 · 应用视觉规范
默认规范(用户有品牌规范时以其为准)。主题色与字号已固化在 scripts/ppt_builder.py:
| 用途 | 变量 | 默认 HEX |
|---|---|---|
| 主色(标题/骨架) | THEME.primary |
#1F4E79 |
| 辅色(表格头/次系列) | THEME.secondary |
#2E75B6 |
| 强调色(关键数字/风险) | THEME.accent |
#ED7D31 |
| 正文 / 注释 / 浅底 | text / muted / light |
#262626 / #808080 / #F2F2F2 |
字体与回退:首选 微软雅黑;若环境无此字体,按回退链依次尝试 微软雅黑 → Microsoft YaHei → 思源黑体 → Source Han Sans SC → Arial Unicode MS → 宋体,并在交付说明中提示用户实际生效字体。脚本已通过 _set_ea() 显式写入中文字形,避免中文被替换为默认字体。
字号层级:页标题 32pt / 二级标题 20pt / 正文 16pt / 注释 12pt。
版式原则:一页一观点;图表优先于文字。图表选型:趋势→折线(line),占比→环形(donut),对比→条形(bar)。
步骤 5 · 安装依赖并生成文件
依赖一键安装(首次使用,或报错 ModuleNotFoundError: No module named 'pptx' 时执行一次即可):
# 自动判断:已装则跳过,未装则安装(PowerShell 5.1+)
python -c "import pptx"; if ($LASTEXITCODE -ne 0) { python -m pip install --quiet python-pptx }
单条命令版(任何 shell 均可):
python -m pip install --quiet python-pptx
说明:
- 下载慢时加国内镜像:python -m pip install --quiet python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple
- 权限不足时改用用户级安装:python -m pip install --user python-pptx
- 安装后需重启当前会话,环境才会生效
调用包内生成器(在技能根目录执行):
import sys; sys.path.insert(0, "scripts")
from ppt_builder import Deck
d = Deck()
d.cover("Q3 逆势增长 37%", "季度经营汇报", "张三", "2026-10-13")
d.toc(["业绩概览", "渠道拆解", "风险与对策", "Q4 计划"])
d.section(1, "业绩概览", "先看结论,再看过程")
d.data("Q3 营收 1.2 亿,同比 +37%",
kpis=[("营收", "1.2 亿", "+37%"), ("毛利率", "40%", "+3pt")],
chart=("line", ["7月", "8月", "9月"],
{"实际": [3200, 3900, 4900], "目标": [3000, 3300, 3600]}),
source="数据来源:财务系统导出 2026-10-01")
d.compare("线上贡献 62%,是增长主引擎",
("线上", ["同比 +58%", "获客成本 -12%", "复购率 31%"]),
("线下", ["同比 +6%", "门店数持平", "客单价 +4%"]))
d.risk("华东产能是 Q4 最大风险",
[("产能", "缺货率 9%", "锁定代工产能", "高"),
("退货", "退货率 +1.8pt", "质检前置", "中"),
("汇率", "毛利承压", "套期保值", "中")])
d.plan("Q4 目标 1.6 亿,四步落地",
[("10月", "锁产能"), ("11月", "大促"), ("12月", "清库存"), ("1月", "复盘")])
d.save("工作汇报_Q3销售_20261013.pptx")
版式函数与图表对应关系:
| 页类型 | 函数 | 说明 |
|---|---|---|
| 封面 | cover(title, subtitle, presenter, date) | 满屏主色 + 结论式大标题 |
| 目录 | toc(items) | 编号列表 |
| 章节页 | section(index, title, blurb) | 大编号 + 辅色底 |
| 数据页 | data(title, kpis, chart, bullets, source) | KPI 卡片 + 图表 + 来源标注 |
| 对比页 | compare(title, left, right) | 左右双栏(对比/竞品) |
| 风险页 | risk(title, risks) | 表格:风险/影响/对策/等级 |
| 计划页 | plan(title, phases) | 时间轴:阶段 + 关键动作 |
| 通用页 | content(title, bullets) | 纯要点页 |
| 图表 | chart=("line"/"bar"/"donut", 类别列表, {系列名: 数值}) | 折线 / 条形 / 环形 |
- 命名:
{场景}_{主题}_{YYYYMMDD}.pptx - 输出到用户工作区,并在回复中给出文件链接
- 必须实际生成文件;不得只给代码、不得声称已生成而未落地
- 若用户只要大纲,跳过本步骤
步骤 6 · 生成后校验清单
生成文件后逐项自查,并在交付说明中列出结果(脚本 d.validate(path) 可自动检查前两项):
print(d.validate("工作汇报_Q3销售_20261013.pptx"))
- [ ] 占位符:无未替换的模板变量占位符、无空白占位符
- [ ] 数据一致:正文数字与源数据、图表数值三者一致
- [ ] 来源标注:每个含数据的页面底部有来源与时间范围
- [ ] 逻辑不重复:相邻页结论不重复、不互相矛盾
- [ ] 字体可用:中文字形已声明;环境缺字体时已在说明中提示回退方案
- [ ] 图表对应结论:图表形态与标题结论一致(趋势用折线、占比用环形、对比用条形)
步骤 7 · 交付说明
输出:文件路径 + 叙事主线一句话 + 每页作用简述 + 建议的讲演时长分配 + 校验清单结果。
素材处理(多模态)
| 素材 | 提取方式 | 引用与标注要求 |
|---|---|---|
| 图片 / 截图 | 读取图片内容,识别其中的文字与关键数字 | 在图注标注"图片来源";不得据模糊图片推测数字,缺失即标「无数据」 |
| 链接 / 网页 | 抓取正文与标题,忽略导航广告 | 标注站点与抓取日期;引用观点需注明出处 |
| 表格 / 数据表 | 读取列名、时间范围、单位;做汇总前先确认口径 | 图表页底部标注"数据来源 + 截止日期";口径不一致先向用户确认 |
| 会议记录 / 聊天 | 抽取决议项、待办、责任人、时间点 | 涉及未定论内容标"待确认",不得写成已决结论 |
示例
输入:把这份《Q3销售数据.xlsx》做成给 VP 的季度汇报 PPT,10 页内
输出:
1. 叙事主线(确认点①):"Q3 逆势增长 37%,靠渠道结构优化,Q4 需补齐华东产能。"
2. 逐页大纲(确认点②,表格共 10 页,标题均为结论句,版式列已映射到函数)
3. 步骤 3–7 自动执行:生成 工作汇报_Q3销售_20261013.pptx 并给出文件链接
4. 交付说明:建议讲述 8 分钟;重点页 P2 数据 / P6 风险 / P9 计划;校验清单全部通过
完整过程(源数据 → 主线 → 大纲 → 生成代码 → 校验输出)见 references/full-example.md。
约束
- 不编造数据;素材缺失的数字标注「无数据」,不得虚构
- 不擅自更改用户提供的品牌配色与 Logo 规范
- 生成文件前必须先拿到「叙事主线 + 逐页大纲」两处确认
- 交付前必须实际生成并校验
.pptx;缺python-pptx时应先提示安装,不得静默跳过文件生成