Agent Skills: /ppt

|

UncategorizedID: wayfind/origin-task/ppt

Install this agent skill to your local

pnpm dlx add-skill https://github.com/wayfind/origin-task/tree/HEAD/ppt-generator/skills/ppt

Skill Files

Browse the full folder contents for ppt.

Download Skill

Loading file tree…

ppt-generator/skills/ppt/SKILL.md

Skill Metadata

Name
ppt
Description
|

/ppt

一键生成专业 PPT 的编排器


🚀 首次使用初始化(必读)

在生成 PPT 之前,必须先确认用户的账号和工具可用性。

Step 1: 确认账号能力

必须使用 AskUserQuestion 工具询问用户:

问题1: 您是否有 ChatGPT Plus/Pro 账号?
  - 是 → 可使用 deep-research 进行深度研究
  - 否 → 仅使用 WebSearch(研究质量较低)

问题2: 您是否有 Gemini API Key(Pro 或以上)?
  - 是 → 可使用 nano-banana-image 生成配图
  - 否 → 跳过配图生成

Step 2: 安装依赖 Skill

根据用户确认,安装对应的 skill:

# 如果有 ChatGPT Plus,安装 deep-research
# 相对路径: ../../../openai-deep-research (同一个 git 库)
SKILL_BASE="/home/david/prj/origin-task"

# deep-research skill
if [ ! -d "$SKILL_BASE/openai-deep-research" ]; then
    echo "deep-research skill 已在 $SKILL_BASE/openai-deep-research"
fi

# nano-banana-image skill
if [ ! -d "$SKILL_BASE/nano-banana-image" ]; then
    echo "nano-banana-image skill 已在 $SKILL_BASE/nano-banana-image"
fi

Step 3: 配置认证

ChatGPT Plus 用户:

提示: 请在浏览器中登录 ChatGPT (chat.openai.com)
deep-research 将使用 Playwright 自动化访问

Gemini API 用户:

提示: 请设置环境变量 GEMINI_API_KEY
export GEMINI_API_KEY="your-api-key-here"

Step 4: 记录用户配置

将确认结果保存到 .pptrc.yaml

# .pptrc.yaml (自动生成)
capabilities:
  deep_research: true    # 有 ChatGPT Plus
  image_generation: true # 有 Gemini API

auth:
  chatgpt_logged_in: true
  gemini_api_key_set: true

⚠️ 初始化检查清单

每次执行 /ppt 时,检查:

  1. [ ] 是否存在 .pptrc.yaml

    • 否 → 执行初始化流程
    • 是 → 读取已保存的配置
  2. [ ] deep-research 是否可用?

    • 检查: python -c "from research.deep_research import DeepResearch"
  3. [ ] nano-banana-image 是否可用?

    • 检查: skill 目录是否存在 + GEMINI_API_KEY 是否设置

如果任何检查失败,提示用户重新配置!


🔄 强制反思协议(P1 必读)

每个阶段完成后,必须输出反思报告,检查是否有遗漏或问题。

为什么需要反思?

AI 容易"声称完成"但实际跳过步骤。强制反思机制:

  1. 验证 artifact 文件是否真的存在
  2. 检查内容质量(非空、有来源)
  3. 发现遗漏并立即修正

反思输出格式

每个 Stage 完成后,必须输出:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 STAGE REFLECTION: [STAGE_NAME]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [检查项1]: 通过
✅ [检查项2]: 通过
⚠️ [检查项3]: 警告 - [原因]
❌ [检查项4]: 失败 - [原因]

⚠️  Warnings:
   - [警告1]
   - [警告2]

📌 Next: [下一步操作]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

各阶段检查清单

Stage 0: Init 反思

检查项:
- [ ] .pptrc.yaml 已创建
- [ ] deep_research 配置正确
- [ ] image_generation 配置正确

Stage 1: Skeleton 反思

检查项:
- [ ] skeleton.yaml 已创建
- [ ] research_tasks 已定义(数量 > 0)
- [ ] structure 已定义

Stage 2: Research 反思

检查项:
- [ ] research_results/ 目录已创建
- [ ] 所有 required 任务都有对应的 .md 文件
- [ ] 每个结果文件内容 > 100 字符
- [ ] 每个结果文件包含来源引用

Stage 2.5: Images 反思(如果启用)

检查项:
- [ ] images/ 目录已创建
- [ ] 封面图已生成
- [ ] 章节图已生成(可选)

Stage 3: Enrich 反思

检查项:
- [ ] slides/ 目录已创建
- [ ] 所有幻灯片文件已生成
- [ ] @RESEARCH 标记内容已填充(非占位符)

Stage 4: Render 反思

检查项:
- [ ] PPTX 文件已生成
- [ ] 文件大小合理(> 10KB)

反思后行动

如果有 ❌ 错误:
  → 停止,修复问题,重新执行当前阶段

如果有 ⚠️ 警告:
  → 输出警告,询问用户是否继续

如果全部 ✅ 通过:
  → 继续下一阶段

🎨 图片生成协议(P1)

当 image_generation: true 时,在研究完成后生成装饰图片。

触发条件

# .pptrc.yaml 中
capabilities:
  image_generation: true  # ← 此项为 true 时触发

执行时机

Stage 2: Research 完成
    ↓
Stage 2.5: Images 生成  ← 在此执行
    ↓
Stage 3: Enrich

图片生成任务

根据 skeleton.yaml 中的 image_position 字段:

| 位置 | 用途 | Aspect Ratio | |------|------|--------------| | cover | 封面主视觉 | 16:9 | | section | 章节标题背景 | 16:9 | | ending | 结尾感谢图 | 16:9 |

AI 执行协议

当看到 image_generation: true 时:

Step 1: 显式输出图片任务

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 IMAGE GENERATION TASK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Skill: nano-banana-image
Images to generate:
  - cover: 封面主视觉
  - section-01: 章节1背景
  - ending: 结尾感谢图

Status: ⏳ Generating...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Step 2: 调用图片生成

# 使用 Task 工具调用 nano-banana-image
Task(
    subagent_type="general-purpose",
    prompt="""
    使用 nano-banana-image skill 生成 PPT 装饰图片:

    1. 封面图:
       描述: [PPT标题相关的视觉描述]
       输出: images/cover.png
       比例: 16:9

    2. 结尾图:
       描述: Thank you, professional closing
       输出: images/ending.png
       比例: 16:9

    要求: 使用 nano-banana-pro 色彩风格(深色背景、金色/青色点缀)
    """,
    description="Generate PPT images"
)

Step 3: 保存到 images/ 目录

output/project-name/
├── images/               # 🆕 图片目录
│   ├── cover.png
│   ├── section-01.png
│   └── ending.png
├── research_results/
├── slides/
└── skeleton.yaml

Step 4: 在 slide-md 中引用

---
slide:
  id: "01-01"
  type: cover
  layout: title-only
  image: images/cover.png   # 🆕 引用图片
---

# PPT 标题

图片生成失败处理

如果图片生成失败:
  → 输出警告,但继续后续流程
  → 幻灯片将没有装饰图,但内容不受影响

📋 Research Directive 语法(必读)

这是 PPT 生成的核心机制:显式声明研究任务,强制执行获取结果。

语法定义

1. skeleton.yaml 中声明研究任务

# 在 skeleton.yaml 顶层或章节内声明
research_tasks:
  - id: "r01"                    # 唯一标识符
    query: |                      # 研究提示词(详细描述)
      Tesla TSLA stock performance in 2025:
      - Opening and closing prices
      - Year-over-year change percentage
      - Major events affecting stock price
      - Analyst ratings summary
    skill: "deep-research"        # 使用的 skill
    required: true                # true=必须执行, false=可选
    output_format: |              # 期望的输出格式
      ## 2025年股价表现
      - 年初价格: $XXX
      - 年末价格: $XXX
      - 涨跌幅: +/-XX%
      ### 关键事件
      1. [事件1]
      2. [事件2]

2. slide-md 中标记填充位置

---
slide:
  id: "02-02"
  layout: two-column
---

# 2025年股价回顾

::: left
<!-- @RESEARCH: r01 -->
此区域将由研究结果 r01 填充
<!-- @/RESEARCH -->
:::

::: right
<!-- @RESEARCH: r02 -->
此区域将由研究结果 r02 填充
<!-- @/RESEARCH -->
:::

⚠️ AI 执行协议(强制)

当看到 research_tasks<!-- @RESEARCH: --> 标记时,必须执行以下步骤:

Step 1: 显式输出研究任务

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 RESEARCH TASK [r01]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Skill: deep-research
Query:
  Tesla TSLA stock performance in 2025:
  - Opening and closing prices
  - Year-over-year change percentage
  ...

Expected Output Format:
  ## 2025年股价表现
  - 年初价格: $XXX
  ...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Step 2: 调用 Skill 执行研究

# 必须使用 Task 工具调用 deep-research
Task(
    subagent_type="general-purpose",
    prompt="""
    执行研究任务 [r01]:

    使用 openai-deep-research skill 研究以下内容:
    {query}

    输出格式要求:
    {output_format}

    要求:
    1. 数据必须有来源引用
    2. 数据时效性:最近6个月
    3. 包含具体数字,不要模糊表述
    """,
    description="Research: r01"
)

Step 3: 🆕 保存研究结果到文件(P0 强制)

⚠️ 关键改动: 研究结果必须持久化到文件,渲染器会验证!

# 目录结构
output/project-name/
├── skeleton.yaml
├── research_results/        # 🆕 必须存在
│   ├── r01.md              # 研究结果内容
│   ├── r01.meta.json       # 元数据(可选但推荐)
│   ├── r02.md
│   └── ...
└── slides/
    └── *.slide.md

保存 research_results/{task_id}.md:

# Research Result: r01
Generated: 2026-01-12T10:30:00Z
Skill: deep-research

---

## 2025年股价表现
- 年初价格: $248.42
- 年末价格: $445.03
- 涨跌幅: +79.1%

### 关键事件
1. Q1: FSD V12 发布,股价上涨 15%
2. Q3: Robotaxi 发布会,股价创新高
3. Q4: 马斯克政治参与引发波动

---

*来源: Yahoo Finance, Reuters*
*研究时间: 2026-01-12*

保存 research_results/{task_id}.meta.json (可选):

{
  "task_id": "r01",
  "skill": "deep-research",
  "query_hash": "abc123...",
  "executed_at": "2026-01-12T10:30:00Z",
  "duration_seconds": 45,
  "source_count": 5,
  "content_length": 1234
}

Step 4: 填充结果到 slide-md

research_results/{task_id}.md 读取内容填充:

<!-- @RESEARCH: r01 -->
## 2025年股价表现
- 年初价格: $248.42
- 年末价格: $445.03
- 涨跌幅: +79.1%

### 关键事件
1. Q1: FSD V12 发布,股价上涨 15%
2. Q3: Robotaxi 发布会,股价创新高
3. Q4: 马斯克政治参与引发波动

*来源: Yahoo Finance, Reuters*
<!-- @/RESEARCH -->

🚫 渲染阻断机制(P0)

render.js 会在渲染前验证 research_results/ 目录!

如果 skeleton.yaml 定义了 research_tasks:
  但 research_results/ 目录不存在
  或 必需任务 (required: true) 没有对应的 .md 文件

则渲染器拒绝执行并输出:

╔════════════════════════════════════════════════════════════╗
║          ARTIFACT VALIDATION FAILED                        ║
╚════════════════════════════════════════════════════════════╝

🚫 RENDER BLOCKED: research_results/ 目录不存在

skeleton.yaml 定义了 5 个必需研究任务:
  - [r01] Tesla TSLA stock performance in 2025...
  - [r02] Tesla 2026 bullish catalysts...
  ...

解决方法:
  1. 使用 /ppt-enrich 执行研究任务
  2. 确保每个任务都调用 deep-research skill
  3. 将结果保存为 research_results/{task_id}.md

绕过方法(不推荐):

node render.js ./slides/ --skip-artifact-check

研究任务类型

| 类型 | 适用场景 | 示例 query | |------|----------|-----------| | market_data | 股价、财务数据 | "TSLA stock price 2025" | | news_events | 新闻事件分析 | "Tesla major news 2025" | | case_study | 案例研究 | "AI manufacturing cases China 2025" | | statistics | 统计数据 | "Global EV market share 2025" | | comparison | 对比分析 | "Tesla vs BYD sales comparison" | | forecast | 预测分析 | "Tesla stock price forecast 2026" |

工具优先级

| 优先级 | 工具 | 使用条件 | |--------|------|----------| | 🥇 1st | deep-research | required: true 或 capabilities.deep_research=true | | 🥈 2nd | WebSearch | 仅当 deep-research 不可用时的 fallback |

❌ 禁止行为

❌ 看到 research_tasks 却不执行研究
❌ 使用 WebSearch 代替 deep-research(当可用时)
❌ 不显式输出研究任务就直接填充内容
❌ 填充的内容没有来源引用
❌ 使用过时数据(超过6个月)

✅ 正确流程示例

1. 读取 skeleton.yaml
2. 发现 research_tasks: [r01, r02, r03]
3. 输出: "🔍 RESEARCH TASK [r01]..."
4. 调用: Task(subagent_type="general-purpose", prompt="使用 deep-research...")
5. 等待结果
6. 输出: "🔍 RESEARCH TASK [r02]..."
7. 调用: Task(...)
8. ...
9. 生成 slide-md,填充 <!-- @RESEARCH: rXX --> 标记

概述

/ppt 是 PPT 生成的主入口命令,它编排 outline → enrich → render 三阶段流程,将用户的原始需求转化为专业的 PPTX 文件。


🎨 设计工具箱 (Design Toolkit)

重要: 生成 PPT 时,请充分利用以下丰富的设计工具,确保输出美观大方、专业精致。

可用布局类型

| 布局 | 类型 | 适用场景 | 效果 | |------|------|----------|------| | title-only | 全屏标题 | 封面、章节页、结尾 | 视觉冲击力强 | | bullets | 要点列表 | 通用内容、3-5 个要点 | 清晰易读 | | two-column | 双列对比 | 对比内容、左右分列 | 结构对称 | | three-cards | 三列卡片 | 案例展示、特性对比 | 并列展示 | | table | 表格 | 数据密集、多维比较 | 信息整齐 | | quote | 引用 | 名人金句、重点强调 | 突出重点 | | chart | 图表 | 流程、时间线、层级 | 可视化强 |

可用图表模板

使用 ::: chart 块或 ```mermaid 代码块:

| 模板 | 语法示例 | 适用内容 | |------|----------|----------| | 流程图 | template: process-flow | 步骤、阶段、流程 | | 对比图 | template: comparison | 传统 vs 现代、优劣势 | | 时间线 | template: timeline | 历史、规划、路线图 | | 金字塔 | template: pyramid | 层级、架构、分类 | | 自定义 | ```mermaid 代码块 | 复杂自定义图表 |

图表语法示例:

::: chart
template: process-flow
title: AI实施三阶段
steps:
  - 快赢期 | 0-6月
  - 价值放大 | 6-18月
  - 全面转型 | 18月+
:::

装饰图片位置

使用 nano-banana-image 生成同色系装饰图:

| 位置 | 适用页面 | 效果 | |------|----------|------| | cover | 封面页 | 全屏主视觉,增强冲击力 | | section | 章节标题页 | 背景装饰,突出主题 | | side | 内容页 | 侧边装饰,增加美感 | | ending | 结尾页 | 感谢装饰,温馨收尾 |

设计决策原则

  1. 数据 → 图表: 有数字就可视化,不堆砌数字
  2. 对比 → 双列/图表: 对比内容必须清晰区分
  3. 流程 → 流程图: 步骤内容用流程图展示
  4. 案例 → 卡片: 多案例并列用卡片布局
  5. 引用 → Quote: 金句单独突出展示
  6. 重要页 → 配图: 封面、章节页配装饰图

主题选择

| 主题 | 风格 | 适用场景 | |------|------|----------| | corporate-light | 浅色正式 | 企业汇报、正式场合 | | nano-banana-pro | 深色科技 | 创意提案、科技演讲 |


架构

                    /ppt(编排器)
                         │
        ┌────────────────┼────────────────┐
        ▼                ▼                ▼
   /ppt-outline    /ppt-enrich      /ppt-render
   (骨架生成)      (内容填充)       (PPTX渲染)
        │                │                │
        ▼                ▼                ▼
   skeleton.yaml    slide-md/*.md     output.pptx

用法

快速开始

/ppt                              # 交互式生成
/ppt ./docs/                      # 从文档目录生成
/ppt "做一个AI培训的PPT,30分钟"    # 从自然语言生成

完整参数

/ppt [input] [options]

Arguments:
  [input]               输入源(目录/文件/描述)

Options:
  -o, --output <path>   输出 PPTX 路径
  -t, --theme <name>    主题 (corporate-light | nano-banana-pro)
  -d, --duration <min>  目标时长(分钟)
  --no-research         跳过研究步骤
  --step <stage>        只执行到指定阶段 (outline | enrich | render)
  --resume <state>      从断点恢复
  -v, --verbose         详细输出

工作模式

模式 1: 交互式(默认)

/ppt

📋 PPT 生成向导
━━━━━━━━━━━━━━━

检测到上下文:
  - docs/ 目录: 7 个文档, 35,604 字
  - 已有骨架: skeleton.yaml

请选择操作:
  1. 从现有文档生成 PPT
  2. 从骨架继续(跳过 outline)
  3. 重新开始

选择 [1]: _

模式 2: 批处理

# 从文档目录一键生成
/ppt ./docs/ -o presentation.pptx

# 指定主题和时长
/ppt ./docs/ --theme nano-banana-pro -d 60 -o dark-theme.pptx

模式 3: 自然语言

/ppt "给企业高管做一个AI转型的培训,90分钟,需要案例"

# 系统会:
# 1. 解析意图 → 识别为 training, executives, 90min
# 2. 生成骨架 → skeleton.yaml
# 3. 执行研究 → 补充案例和数据
# 4. 生成内容 → slide-md 文件
# 5. 渲染输出 → presentation.pptx

流程阶段

Stage 1: Outline(骨架生成)

Input:  上下文 / 自然语言描述
Output: skeleton.yaml
Tool:   /ppt-outline

生成结构化骨架,定义章节、时长、研究需求。

Stage 2: Enrich(内容填充)

Input:  skeleton.yaml + 上下文
Output: slides/*.slide.md
Tool:   /ppt-enrich

检测内容空缺,执行研究,生成每页幻灯片的 Markdown。

Stage 3: Render(渲染输出)

Input:  slides/*.slide.md
Output: presentation.pptx
Tool:   /ppt-render

将 slide-md 文件渲染为最终 PPTX。

断点续传

支持从任意阶段恢复:

# 保存状态
/ppt ./docs/ --step enrich
# → 生成 .ppt-state.json

# 从断点恢复
/ppt --resume .ppt-state.json
# → 从 render 阶段继续

状态文件结构:

{
  "stage": "enrich",
  "skeleton_path": "skeleton.yaml",
  "slides_dir": "slides/",
  "options": {...},
  "timestamp": "2026-01-12T10:00:00Z"
}

错误恢复

| 错误类型 | 处理策略 | |----------|----------| | 骨架验证失败 | 提示修复,不继续 | | 研究超时 | 跳过该项,继续生成 | | 渲染失败 | 保存 slide-md,提示手动渲染 |

输出

默认输出结构

project/
├── skeleton.yaml           # 骨架文件
├── slides/                 # slide-md 文件
│   ├── 00-01-cover.slide.md
│   ├── 01-01-section.slide.md
│   └── ...
├── presentation.pptx       # 最终 PPT
└── .ppt-state.json        # 状态文件(可选)

清理选项

/ppt ./docs/ --clean        # 生成后删除中间文件

配置

项目配置 (.pptrc.yaml)

# .pptrc.yaml
defaults:
  theme: corporate-light
  duration: 30
  audience: professionals

research:
  mode: browser           # browser | api | mock
  cache: true
  timeout: 300            # 秒

output:
  dir: ./output
  clean_intermediate: false

环境变量

| 变量 | 说明 | |------|------| | OPENAI_API_KEY | OpenAI API 密钥(api 研究模式) | | PPT_THEME | 默认主题 | | PPT_OUTPUT_DIR | 默认输出目录 |

文件结构

.claude/skills/ppt/
├── SKILL.md                # 本文档
├── scripts/
│   ├── orchestrator.py     # 主编排脚本
│   ├── intent_parser.py    # 意图解析器
│   └── state_manager.py    # 状态管理器
└── templates/
    └── .pptrc.yaml         # 配置模板

依赖的 Skills

| Skill | 用途 | |-------|------| | /ppt-outline | 生成骨架 | | /ppt-enrich | 内容填充 | | /ppt-render | PPTX 渲染 |

版本历史

| 版本 | 日期 | 变更 | |------|------|------| | 1.0.0 | 2026-01-12 | 初版 | | 1.1.0 | 2026-01-13 | P1: 强制反思协议、图片生成协议 | | 1.2.0 | 2026-01-13 | P2: Intent Engine 集成、布局预决策 |


🧠 跨会话追踪协议(P2)

使用 Intent Engine 记录 PPT 生成的每个阶段,支持跨会话恢复和决策审计。

为什么需要跨会话追踪?

  1. 断点恢复: 会话中断后,新会话能知道上次进度
  2. 决策审计: 记录为什么选择某个布局/主题
  3. 质量追踪: 里程碑记录便于复盘

集成方式

from ie_integration import IETracker

tracker = IETracker("ai-trends-brief", Path("./output"))

# 创建任务(会话开始时)
tracker.create_ppt_task("AI未来趋势简报", 30, "nano-banana-pro")

# 每个阶段完成后记录里程碑
tracker.log_milestone("skeleton", "Generated 5 sections, 12 slides")
tracker.log_milestone("research", "Completed 3 research tasks with 15 sources")
tracker.log_milestone("layout", "Applied layout decisions: 3 cards, 2 bullets")
tracker.log_milestone("render", "Generated presentation.pptx (2.3MB)")

# 记录重要决策
tracker.log_decision(
    topic="Section 02 Layout",
    options=["bullets", "three-cards", "chart"],
    chosen="three-cards",
    rationale="Content has 3 AI trends, perfect for card layout"
)

# 记录阻塞
tracker.log_blocker("images", "Gemini API rate limited", "Wait 60s and retry")

AI 执行协议

每个阶段完成后,必须输出并记录:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧠 IE MILESTONE: [STAGE_NAME]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Project: ai-trends-brief
Stage: skeleton
Summary: Generated skeleton.yaml with 2 sections

Artifacts:
  ✅ skeleton.yaml (1.2KB)
  ✅ research_tasks: 1

Logged to Intent Engine: ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

会话恢复

新会话开始时:

# 查看当前任务状态
ie status

# 搜索未完成任务
ie search "PPT doing"

📐 布局预决策协议(P2)

在生成 slide-md 之前,必须先运行 LayoutAdvisor 分析内容并决定布局。

为什么需要预决策?

  1. 避免单调布局: 不是所有内容都用 bullets
  2. 智能推荐: 根据内容特征自动推荐最佳布局
  3. 设计一致性: 确保设计决策有据可查

工作流程

skeleton.yaml
     │
     ▼
┌─────────────────┐
│ LayoutAdvisor   │ ← 分析内容特征
│ (预决策)        │
└────────┬────────┘
         │
         ▼
skeleton.yaml (enriched)
with _layout_decision
         │
         ▼
┌─────────────────┐
│ SlideMDWriter   │ ← 使用决策生成
│ (内容生成)       │
└────────┬────────┘
         │
         ▼
slides/*.slide.md

布局决策字段

预决策后,skeleton.yaml 中每个 slide 会添加:

structure:
  - id: "02-trends"
    title: "2026三大趋势"
    slides:
      - id: "02-01"
        type: content
        layout: three-cards
        _layout_decision:           # 🆕 预决策结果
          layout: three-cards
          confidence: 0.9
          chart_type: null
          image_position: icon
          design_hints:
            - 每个卡片展示一个趋势
            - 突出关键指标
          rationale: "内容有3个并列趋势,适合卡片布局"

AI 执行协议

Enrich 阶段必须先执行预决策:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📐 LAYOUT PRE-DECISION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Analyzing 5 sections...

[02-01] 2026三大趋势
  Layout: three-cards (confidence: 90%)
  Rationale: 内容有3个并列趋势,适合卡片布局

[03-01] 实施路线图
  Layout: chart (confidence: 85%)
  Chart: timeline
  Rationale: 时间相关内容适合时间线图表

Layout Distribution:
  three-cards: 2
  bullets: 2
  chart: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

布局推荐规则

| 内容特征 | 推荐布局 | 置信度 | |----------|----------|--------| | 3个并列项 | three-cards | 90% | | 对比内容 | two-column / comparison chart | 80-85% | | 步骤/流程 | chart (process-flow) | 90% | | 时间线 | chart (timeline) | 90% | | 层级结构 | chart (pyramid) | 85% | | 引用/金句 | quote | 90% | | 数据密集 | table | 75% | | 默认 | bullets | 60% |

调用方式

from layout_advisor import LayoutAdvisor

advisor = LayoutAdvisor(verbose=True)

# 为单个章节推荐布局
decision = advisor.recommend_layout(section)
print(f"推荐: {decision.layout.value}, 置信度: {decision.confidence}")

# 批量应用到 skeleton
enriched_skeleton = advisor.apply_decisions_to_skeleton(skeleton)

# 生成设计报告
report = advisor.generate_design_report(skeleton)
print(report)

快速示例

# 最简单的用法
/ppt ./docs/ -o my-presentation.pptx

# 完整流程
/ppt ./docs/ \
  --theme corporate-light \
  --duration 60 \
  -o presentation.pptx \
  -v