缘起
偶然看到微软发布的 PPT-Eval 基准测试(https://microsoft.github.io/ppteval/)——一个专门评估 AI Agent 操作 PowerPoint 能力的 benchmark。120 个任务,覆盖 12 个不同领域的演示文稿。好奇心驱动下,花了点时间把这个系统的评分机制扒了个底朝天。
120 个任务长什么样?
所有任务都围绕 PowerPoint 幻灯片编辑,按操作类型可分为:
文本修改(内容/格式) 32个 (26.7%)
新增元素(文本框/要点/形状) 20个 (16.7%)
表格/图表/SmartArt 17个 (14.2%)
样式/颜色/背景修改 15个 (12.5%)
布局/对齐/大小调整 11个 (9.2%)
编号/列表格式转换 7个 (5.8%)
图片操作(旋转/裁剪) 6个 (5.0%)
幻灯片管理 5个 (4.2%)
超链接 3个 (2.5%)
页眉页脚/页码 3个 (2.5%)
动画/过渡 1个 (0.8%)
难度分布:Easy 51个、Medium 39个、Hard 30个。
来源文件涵盖 12 个学科——操作系统、菲律宾前殖民文化、会计等式、
海平面上升、儿童眼镜处方……五花八门。
自动评分是怎么设计的?
这也是本文的重点。评分体系分三层:
第一层:Rubric(评分标准)的生成
Rubric 不是手写的,而是 LLM 自动生成的。流程分两步:
① 任务提议:ClaudeTaskProposer 代理实际打开 PPTX 文件(沙箱中),
浏览内容后提出任务,如:
"[Easy][SLIDE:1] Change the lecture number from 'Lecture 3' to 'Lecture 1'"
② Rubric 生成:把一句话目标 + 大量编程上下文丢给 Claude,让它生成
包含 Python 评分函数的 JSON 树。上下文包括:
- Python 类定义(PowerPointDiff、Slide、SlideScreenshot 等)
- 全局变量(文件路径、差异对象、截图列表)
- 可用函数(llm_call、vlm_call)
- 生成指南:"优先用 Python 直接验证,VLM 又慢又贵"
生成的 rubric JSON 示例:
{
"root": {
"name": "Change lecture number",
"children": [{
"name": "Title updated correctly",
"is_critical": true,
"scorer": {
"type": "function",
"function_code": "def compute_score():\n from pptx import Presentation\n ..."
}
}]
}
}
第二层:双轨评分机制
运行时评分引擎(PPTVerifier)走两条路径:
[路径 A] 纯程序评分(约90%的任务)
评分函数直接用 python-pptx 解析 PPTX(XML),验证文字内容、
字体属性、项目符号格式、超链接、表格结构等。
def compute_score():
from pptx import Presentation
prs = Presentation(modified_ppt_path)
title = prs.slides[0].shapes.title.text.strip()
if 'Lecture 1' in title:
return "OK", 1.0
return "Failed", 0.0
不需要视觉模型,不需要截图,就像跑单元测试。
[路径 B] VLM 视觉评分(约10%的任务)
对于 python-pptx 无法验证的属性("表格是否过大遮挡内容"、
"颜色是不是蓝色调"、"图片是否旋转了45°"),引擎会:
1. 生成幻灯片截图(通过 PowerPoint Online 或 LibreOffice)
2. 传给 VLM(默认 Claude Sonnet 4)
3. 用自然语言提问,解析 YES/NO
def compute_score():
img = [s for s in modified_ppt_screenshots
if s.slide_number == 3][0].image_path
answer = vlm_call(images=[img],
prompt="Is there a table? Answer YES/NO.")
return answer, 1.0 if 'YES' in answer else 0.0
第三层:评分执行流程
PPTVerifier.verify()
1. 生成 PowerPointDiff(对比差异)
2. 检查是否有 vlm_call
无 → 跳过截图
有 → 生成幻灯片截图
3. 遍历 rubric 树,每个叶子执行 compute_score()
4. 加权汇总(critical 权重高,non-critical 权重 0.3)
5. 输出(总分, 理由)
与计算机等级考试一级的对比
NCRE-1(一级) PPT-Eval
操作者 人类考生 AI Agent
操作方式 手动点菜单 视觉+坐标操作
指令形式 详细分步骤 一句话自然语言
考察核心 人会不会用 PPT Agent 能否自主执行
重合度 Easy-Medium ≈70% Hard 超出一级范围
一级考试范围更广(母版、多媒体、放映设置),PPT-Eval 在特定
领域更深(表格创建、图表生成、图片裁剪旋转等)。
一些有意思的发现
1. 评分函数的质量取决于 Claude 的编程能力——它需要理解
python-pptx API 并写出正确的验证代码。
2. VLM 使用非常有节制——生成指南明确说"VLM 又慢又贵",
只有程序判断不了时才用它。
3. 不需要视觉 LLM 的场景:文字修改、格式调整、颜色属性、
项目符号、超链接——这些都可以通过解析 PPTX XML 搞定。
4. 需要视觉 LLM 的场景:表格美观度、旋转角度、颜色色调。
5. Rubric 树设计精巧——critical 标记确保关键改动必须正确,
non-critical 节点用低权重柔性计分,防止过于严格。
总结
PPT-Eval 的自动评分体系是一个 LLM 生成 + 双轨执行的精巧设计。
LLM 负责"写测试代码",运行时引擎负责"跑测试"。
90% 的情况纯代码就够了,剩下 10% 才动用昂贵的 VLM 看截图。
这背后的更大趋势是:评估 AI Agent 的最好方式,
可能就是用另一个 AI 来写测试。
当任务空间大到人手无法覆盖时,LLM 驱动的自动 rubric 生成
成了一个很务实的选择。