ai官小西

PowerPoint 技能评测 — 教 AI Agent 做出来不像 AI 做的幻灯片

PPTX 技能技术栈和 QA 流水线全景

AI 生成的 PowerPoint 幻灯片有一种"味儿"。不是字体(虽然通常是 Calibri),不是版式(虽然通常是大标题+要点列表),而是一种统一的平淡——每页都长得一模一样,而且全都像出自一个从未在真人面前做过演讲的人之手。

我们的 PowerPoint 技能被设计来避免这个问题。它组合了 python-pptx 用于模板编辑、pptxgenjs 用于从零创建、markitdown 用于内容提取、LibreOffice 用于渲染。问题是这个技术栈是否选对了——以及更新的工具是否已经解决了"AI 平淡味"的问题。

基础:python-pptx (3,335 stars)

Scanny/python-pptx 是 Python 程序化 PowerPoint 无可争议的王者。它直接操作 Open XML 格式,意味着你可以做 PowerPoint 能做的一切——只要你愿意写 XML。

这个库已经成熟(10+ 年),MIT 协议,覆盖了 90% 的需求:幻灯片创建、文本格式化、图片插入、图表生成、表格操作、形状定位。它做不好的是布局——你通过绝对坐标定位元素,精确但痛苦。一个有三个文本框和一张图片的幻灯片,需要为每个元素手动计算 x/y 坐标。

AI agent 的问题: python-pptx 给你完全的控制和零指导。Agent 知道什么内容该放到幻灯片上,但在决定放在哪里时毫无帮助。图片该放左边还是右边?三行标题该用多大字号?这些是人类演讲者本能做出的设计决策;AI agent 需要显式规则。

我们的技能用设计指南来处理:调色板、字体搭配、间距规则、布局模式。但这个指南存在于技能文档中,不在代码里。Agent 读取它,解释它,然后写原始坐标。能跑,但脆弱——对"0.5 英寸边距"的误读,就变成了幻灯片边缘被裁剪的文本框。

pptxgenjs 和 markitdown — 配角

pptxgenjs(npm,2,500+ stars)采用了和 python-pptx 相反的方法:布局优先,而非内容优先。你用流式 API 定义幻灯片,自动处理定位。对于程序化创建很好,但对于基于模板的编辑有限制——如果需要从企业模板开始,还是得回 python-pptx。

markitdown(微软项目)将办公文档转换为 markdown。运行 python -m markitdown deck.pptx 几秒就能得到干净的文本提取。这是技术栈中最好的内容审查工具——视觉 QA 之前,先确认所有正确的词都在正确的顺序里。

三个工具互补得很好。python-pptx 处理模板,pptxgenjs 处理从零创建,markitdown 处理内容验证。这组合选得很好。

我们技能做对了什么

QA 流程是杀手特性。它强制执行:

  1. 内容 QA — markitdown 提取以验证没有遗漏
  2. 视觉 QA — 转换为图片,用子 agent 检查(全新视角),找到布局问题
  3. 修复-验证循环 — 修复问题,重新渲染,重新检查直到干净

这对 AI agent 是正确的做法。Agent 写生成幻灯片的代码,然后视觉测试输出。如果有问题——文本重叠、边距被裁、对比度低——修复代码并重新生成。循环持续直到得到干净的渲染。

设计原则也考虑得很周全:"永远不要在标题下使用装饰线"(AI 幻灯片的标志)、"主导优于均等"(一种颜色应该占主导)、"暗色三明治"结构(封面+结尾深色背景,内容页浅色)。这些都是真正的设计洞察,不仅仅是"别做丑幻灯片"。

缺失了什么:布局智能

根本缺口是我们的技能把布局当作手动过程。Agent 选择一个布局模式,然后写坐标。能跑,但扩展不了——每增加一种新幻灯片类型,Agent 都需要重新解决同样的布局问题。

我们需要的不是新的库,而是一个布局求解器——一个薄抽象层,接收内容和布局偏好,计算坐标:

layout = TwoColumnLayout(margin=0.5, gap=0.3)
layout.place_left(image, width=0.45)
layout.place_right(title, body, width=0.45)
# 计算所有 x、y、width、height 值

这不是复杂问题——是初级开发者一个下午就能实现的基于约束的定位。但它能消除最常见的失败模式:手动计算的坐标差了 0.2 英寸。

外部替代方案:没有革命性的

我们将技术栈与新方案进行了对比:

  • Google Slides API — 比 python-pptx 更结构化,但绑定 Google Workspace。不适合基于文件的工作流。
  • Gamma.app — AI 原生演示构建器。输出漂亮但无 API,无程序化控制。对人类很好,对 agent 无用。
  • Beautiful.ai — 类似 Gamma。AI 设计引擎,无程序化访问。
  • Slidev — Markdown 到幻灯片。对开发者演示很好,但相比 python-pptx 设计控制有限。

这些方案都没有比我们现有技术栈更好地解决 AI agent 问题。AI 原生工具产出更好看的幻灯片但不可控,开发者工具可控但产出不够精致。我们的技术栈处于中间——可控且有能力的,但要求 agent 做设计决策。

我们发现的 AI 特有陷阱

用真实内容测试技能时,发现了三种 AI agent 特有的失败模式:

文本溢出盲区。 Agent 写标题,python-pptx 放入宽度正确的文本框,文本换行成两行。但 Agent 按一行算间距,第二行就和下面的副标题重叠了。人类设计师能立刻看到;AI agent 不知道要检查。

对比度错觉。 浅灰文字在奶油色背景上,代码里看都算"浅色"所以没问题,但在投影仪上完全看不清。Agent 无法感知对比度;需要显式规则。

模板泄漏。 编辑现有模板时,Agent 有时会保留原始幻灯片的占位文字。markitdown QA 步骤能抓到,但一开始就不该有这个问题。

改进路径

三个改动能显著改善这个技能:

  1. 添加布局求解器抽象。 薄包装类计算坐标,消除手动计算和相关 bug。
  2. 添加自动对比度检查。 渲染前验证文字/背景对比度,标记低于 WCAG AA 标准的情况,防止投影仪上的隐形文字。
  3. 添加溢出检测。 渲染为图片后,扫描超出容器边界的文字。

最终判断

保留现有技术栈。python-pptx + pptxgenjs + markitdown 是 AI agent PowerPoint 创建的正确基础。技能的设计原则和 QA 流程是真正好的。缺失的是布局智能——人类设计师不用思考就能应用的定位逻辑。

添加布局求解器、对比度检查和溢出检测作为薄工具层。这些不是技术栈的替代品,而是防止最常见失败模式的护栏。

目标不是让 AI agent 成为伟大的幻灯片设计师。而是让它们足够可靠,使输出不需要人类拯救。