Google AI 工程师博客第三篇,演示如何将 AI 评估结果导出为 CSV 并用热力图向非技术干系人可视化呈现。
欢迎阅读我们「设计与可视化 AI 评估」系列文章的第三篇。与前几期一样,欢迎你只是浏览我的探索过程,而如果你想获得额外收获,可以在家跟着一起动手实践。
注意:本系列文章包含 AI 生成的图表,以及实际截图和手绘编辑版本。AI 还协助进行了少量文案编辑。
如果你打算(重新)实现这个教程,目前需要完成第一篇(Designing AI Evals: Clarity Now and Visualization Next),然后安装 pandas;第二篇(AI Evals at a Glance: Heatmaps for Stakeholders)是说明性的,能让你更深入地理解 AI 评估以及为什么下面的内容会有用,但它更偏向选修性质。
工程团队可能使用自动化测试来评估 Agent,但非技术背景的相关方(产品经理、业务负责人或执行发起人)往往将电子表格作为他们的通用语言,因此以一种他们几乎必定能理解的方式与他们交流是有意义的——这种方式还能让你们协作制作可视化图表,进一步传播信息。
为了让这一切成为现实,今天我们将使用一个 pandas 流水线,将原始的 Inspect AI 评估日志转换为针对 Google Sheets 优化的富 CSV 文件,让你或团队中具备一定电子表格知识的人都能制作出可用于董事会演示的可视化图表。
再次引用前几篇博客文章,我们正在处理的评估有三个维度:model × skill × sample [and epoch],它们交叉形成以下矩阵:

在第二篇中,我们创建了一个简化热力图,反映了该空间在 sample 维度上压缩后的平面切片。虽然我们最终会在后续博客文章中使用 Data Studio 做类似的事情,但目前我们实际上希望保持所有 32 种组合的独立性,并从 inspect eval 文件中提取更多底层统计数据,然后用 pandas 进一步推导信息。这些信息将导出为扁平化的 csv 文件,然后可以导入 Google Sheets 查看。
这个脚本使用 Inspect AI 的 Python pandas 接口来解析评估日志。脚本相对自解释,如果你不熟悉 pandas 和 pandas 的 CSV IO,可以自行查阅相关资料。
虽然脚本的大部分内容处理的是我们之前讨论过的标量指标映射,但有两个列是纯逻辑/布尔类型的。它们代表特定的统计场景,允许最终用户在后续分析时对数据集进行分区。这两个布尔条件是派生出来的,因为我们希望剥离冗余信息,因此不向 Google Sheets 提供完整的 eval 文件,tocsv.py 在日志摄取阶段上游完成了这些重活。
它预先计算两个关键的布尔列,以简化下游仪表板过滤:
completed:标记样本是否干净地完成(无 API 配额 429 错误、超时截断或容器崩溃),且具有有效分数,干净地将模型能力与基础设施噪音隔离。
is_baseline_or_has_activated_skill:区分 Baseline 对照组(始终为 TRUE)和 Active Skill 干预组(当技能工具实际被"激活"时为 TRUE,在 inspect 中意味着已被采用),与 Dormant 运行(FALSE,即技能可用但从未被激活)。
在 Google Sheets 或 Data Studio 中,非技术背景的相关方可以简单地过滤/切换这些预计算的布尔键,即时隔离干净的、活跃的性能表现(或相反情况)。
为了执行这个流水线,我调用了:
python3 tocsv.py
输出文件 data_mega_export.csv 是一个标准的逗号分隔值文件,每个单元格用逗号包围。你可以在标准文本编辑器中预览原始未格式化的内容。虽然大部分是正常的电子表格数据(如字符串和整数),但你也会看到相当复杂的 Google Sheets 公式,这些公式是将评估指标插入公式模板后插值生成的。

例如,上面这个公式将被转换成一个条形图,以同一列中源数据的范围为基准进行归一化,并按三分位数分层着色。
如何将这些文本变成可见的图表?当然是通过打开 sheets.new,然后导入 data_mega_export.csv。出现导入对话框时,勾选 Convert text to numbers, dates, and formulas。

点击导入数据后,Google Sheets 会立即显示标准单元格,并在数据单元格内直接渲染活跃的、彩色编码的迷你图!

你能从所见内容中得出什么结论?一个显而易见的例子是,分数和延迟(Agent 回答一个问题所需时间)之间的相关性可能并不严格。但如果你想获得更深入的洞察呢?
既然这是电子表格,显然你可以做数据透视表、自定义函数或多键排序……你知道,就是会计的那一套。不过,假设你想要自定义视图来查看数据,而不是永久性地改变它。你会怎么做?

与 inspect view 和 inspect viz 热力图不同,Google Sheets 允许你在多个键上动态排序和过滤。不仅如此,你还可以在任意键上排序,所以我选择对之前无法使用的 score 和 latency 字段进行排序。如上图所示,使用 Data > Create filter view,这会在主列顶部为你呈现一组新的控件。
注意:筛选视图不会更改或改变工作表的基础内容;相反,它们是(可命名和共享的)配置,用于限制显示哪些行以及以何种顺序显示。

如果像图片中那样,点击 cost 列 > Filter by condition,选择 Less than 选项并在比较框中填入 0.01,你就可以将显示的行缩小到仅那些成本低于一分钱的内容。这可以用来(例如)只查看"成本较低"的样本,以尝试分析原因。
筛选视图(尽管名称如此)也允许你对数据显示进行排序。由于排序操作是累积的,"主"筛选需要最后应用。因此,在筛选视图中先按 latency 再按 score(都是 Z to A,即递减)排序后,我们得到如下结果:

你还可以选择为此筛选视图命名并保存,以便随时切换开关并与其他协作者共享。要了解更多关于筛选视图的信息,可以阅读 Sort & filter your data。
这种在不改写底层信息的情况下实时排序和筛选显示的能力,使得在讨论中向队友展示和分析数据变得更加容易和快捷。
现在,尽管电子表格具有极大的灵活性,但作为可视化工具仍有一些缺点:
嵌套 IF 语句和过滤器在电子表格公式中处理起来很麻烦,除非你定义自定义宏或 JavaScript 函数,这会导致代码越来越难以在你的心智模型中保持连接。
扁平化的评估运行需要通过多个筛选视图来检查,才能开始理解跨所有运行的复杂趋势或相关性。
那么,我们如何才能更上一层楼并规避这些问题?如果有一个环境——虽然它仍然提供自定义脚本编写任何你需要的东西的能力——但内置了大量 WYSIWYG 可控的可视化图表和图形,让你无需编写代码就能让数据呈现更加生动的生命力,怎么样?更好的问题是,如果这个环境自带三维或更高维度的内置可视化,并且与多种数据源类型有广泛的兼容性呢?
在第四篇中,我们将把这个 Google Sheet 直接连接到 Data Studio,构建一个无需代码的高管摘要仪表板,能够快速直观地展示我们的发现!