AI做PPT怎么做

文章导读
把 AI 用在 PPT 上,稳妥的链路只有一条:模型只负责产出结构化大纲(JSON),再由固定脚本把 JSON 渲染成 .pptx。中间那层 JSON 是关键:它决定了大纲能否被程序读懂,也决定了排版出问题时能否把问题归到具体的一页。
📋 目录
  1. 壹 AI做PPT之前先确认这三件事
  2. 贰 AI做PPT:最短可用路径
  3. 叁 AI做PPT:一个真实场景的完整做法
  4. 肆 AI做PPT:跑不通先查这三处
A A

把 AI 用在 PPT 上,稳妥的链路只有一条:模型只负责产出结构化大纲(JSON),再由固定脚本把 JSON 渲染成 .pptx。中间那层 JSON 是关键:它决定了大纲能否被程序读懂,也决定了排版出问题时能否把问题归到具体的一页。

这条链路不适合的场景也要先说清:页数很少、以图形和版式设计为主的汇报、以及公司母版复杂且需要嵌入特殊字体的模板,用 AI 直接生成通常不如手工排版省时间。

适用场景:有稳定模板、10 到 30 页、以文字条目和简单统计图表为主的汇报。操作动作:先确认模型版本、调用权限与额度、模板版式索引这三个前提,再让模型按固定字段输出 JSON,最后由脚本渲染,两步不要合并。验证方式:先跑 3 页小样本,确认 JSON 能被解析、版式索引不越界、正文框不溢出。风险边界:让模型直接生成 .pptx 或直接写 python-pptx 代码并执行,结果通常不可复现,复杂版式仍需人工调整。

AI做PPT之前先确认这三件事

模型版本不要凭记忆填写,直接向接口查询。通用接入骨架如下,BASE_URL 和 API_KEY 换成自己控制台里给出的值:

curl -s "$BASE_URL/v1/models" \
  -H "Authorization: Bearer $API_KEY"

返回列表里一般能看到当前账号可用的模型名称,把它原样填进后续脚本的 model 参数。没有这个接口的服务商,就在控制台的“模型列表”类页面查看模型名称那一列。不同厂商字段命名不完全一致,需要结合自己的环境确认。

调用权限与额度在控制台的 API Keys 页面确认三件事:Key 是否启用、是否允许调用目标模型、用量是否已到上限。判断顺序是按状态码区分:401 通常是 Key 没带上或写错,403 多半是账号或该模型未开通,429 一般是用量或频率触顶。这三类问题在渲染阶段的表现都一样,都是“生成了空页”,所以必须在写 PPT 之前排除。

AI做PPT怎么做

模板入口位置是 python-pptx 认版式索引,不认你在 PowerPoint 里看到的名字。先打印出来:

from pptx import Presentation
prs = Presentation('template.pptx')
for i, layout in enumerate(prs.slide_layouts):
    print(i, layout.name)

能看到从 0 开始、带名称的版式列表,说明模板可读,记下要用的那个索引。如果这一步就抛 PackageNotFoundError,先确认文件路径和文件本身,不要往下走。

AI做PPT:最短可用路径

  1. 建隔离环境并装依赖:python -m venv .venv && . .venv/bin/activate && pip install python-pptx openai。做完应看到 pip 结束且没有 error 行。
  2. 跑上面那段版式打印代码,拿到 LAYOUT_INDEX。做完应看到版式名与索引的对应关系。
  3. 调用模型生成 outline.json,提示词要求“只输出 JSON、不要解释、不要代码围栏”,temperature 取 0.2 这类低值。做完用 python -c "import json;json.load(open('outline.json'))" 验证,应无报错。
  4. 执行渲染脚本:
import json
from pptx import Presentation

data = json.load(open('outline.json', encoding='utf-8'))
prs = Presentation('template.pptx')
layout = prs.slide_layouts[LAYOUT_INDEX]  # 用上一步打印出的索引
for page in data['slides']:
    s = prs.slides.add_slide(layout)
    s.shapes.title.text = page['title']
    tf = s.placeholders[1].text_frame
    tf.text = page['bullets'][0]
    for b in page['bullets'][1:]:
        tf.add_paragraph().text = b
prs.save('out.pptx')
print('pages:', len(prs.slides))

做完应看到终端打印的 pages 数与 JSON 里的页数一致,打开 out.pptx 能逐页看到标题和条目。

最容易踩的坑是跳过 JSON 这一层,直接让模型输出完整 .pptx 或让模型写一段 python-pptx 代码再执行。模型生成的代码经常使用不存在的版式索引、把字体名写成模板里没有的值,而且每次结果不同,出问题无法定位。让模型只产出固定字段的 JSON,渲染代码自己手写并固定下来,返工成本会低很多。

AI做PPT怎么做

AI做PPT:一个真实场景的完整做法

场景:给 12 人的运维小组做季度复盘。输入是一份约 800 行的告警 CSV,字段为告警时间、系统、级别、处理时长;输出是 8 页 PPT,依次是封面、总览、按系统 Top5、按级别分布、处理时长分布、三条问题、三条改进、结束页。

配置取值:model 填控制台里看到的模型名,temperature 取 0.2,max_tokens 取 2000 左右,模板文件 template.pptx 放在项目根目录,LAYOUT_INDEX 用第 2 步打印出来的“标题和内容”那一项的实际索引,不要照抄别人的数字。先在本地把 CSV 聚合成一段不超过 800 字的统计摘要,再把摘要贴进提示词,不要直接把 800 行原始数据塞进去。

提示词放在 gen_outline.py 里,要求输出这种结构:

{
  "deck_title": "第三季度告警复盘",
  "slides": [
    {
      "title": "本季度告警总览",
      "bullets": ["总告警量:按统计摘要填写", "涉及系统数:按统计摘要填写"]
    }
  ]
}

提示词正文建议写成:你是运维复盘 PPT 大纲生成器,只输出 JSON,不要解释,不要代码围栏;共 8 页,每页 title 不超过 18 个字,bullets 3 到 5 条、每条不超过 28 个字;数据只能引用摘要中出现过的数字,摘要里没有的写“待补充”。最后一句约束很关键,它能挡住模型自行编造统计口径。

AI做PPT怎么做

渲染完成后按页人工过一遍:字数最多的一页是否溢出文本框、占位符 1 在选中的版式里是否存在、中文字体是否被模板默认字体接管。这一步没有自动化替代方案。

AI做PPT:跑不通先查这三处

卡点一:鉴权失败。典型提示是 401 Unauthorized 或 invalid api key。先查环境变量是否真的注入,用 echo ${API_KEY:0:6} 看前几位是否有值;再查是否把 Key 写进了 .env 但脚本没加载。若提示 429,去控制台用量页面看配额,而不是反复重试。

卡点二:JSON 解析失败。典型报错是 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)。检查位置是把模型原始返回先落盘成 raw.txt 再打开,多数情况是模型在 JSON 前后加了一句解释,或者用代码围栏包了一层。修法是提示词里明确禁止代码围栏,解析前先截取第一个 { 到最后一个 } 之间的内容。

卡点三:渲染阶段报索引错误或空页。典型报错是 IndexError: list index out of range(版式索引超出 prs.slide_layouts 长度)或 KeyError(版式里没有第二个占位符)。检查位置是重跑版式打印代码,确认 LAYOUT_INDEX 与模板实际顺序一致;占位符不存在时改成用 add_textbox 指定位置,不要假设每个版式都有固定数量的占位符。