一.ARC-AGI 是什么
ARC-AGI(Abstraction and Reasoning Corpus for Artificial General Intelligence,通用人工智能抽象与推理语料库)是由 Keras 创始人、谷歌 AI 研究员 François Chollet 于 2019 年在论文《On the Measure Of Intelligence》中提出的通用智能基准测试体系,核心目标是衡量 AI 系统的抽象推理能力与全新任务下的泛化效率,而非特定任务的熟练度,被业界称为 "AGI 测量标尺"ARC Prize。
Image transformations(图像变换),是 ARC-AGI 最核心的任务载体 ------ 所有抽象推理测试都通过 "网格图像的规则变换" 来具象化呈现,以此排除语言、文化、知识背景的干扰,纯粹测试通用推理能力。
核心任务形式:基于图像变换的抽象推理
ARC-AGI 的经典范式完全围绕网格图像变换展开:
-
任务规则:每个独立任务仅提供 2~4 组「输入网格 - 输出网格」的示例,测试者需要从极少量样本中抽象出背后隐藏的变换规则,再对全新的测试输入网格生成正确的输出结果。
-
载体形式:网格尺寸在 1×1 到 30×30 之间,仅使用 10 种不同颜色的像素方格,不包含任何文字、符号或现实物体,彻底排除外部知识对测试的干扰ARC Prize。
-
变换类型:这些图像变换覆盖了人类基础认知的多个维度,包括几何对称 / 旋转 / 平移、重力下落等物理直觉、颜色映射 / 计数匹配等逻辑规则、物体分组 / 层级提取等关系抽象。
ARC-AGI 已经迭代三代,评估维度逐步升级:
-
ARC-AGI-1(2019):初代基准,包含约 800 个静态网格变换任务,是最经典的版本,曾作为 Kaggle ARC 竞赛的核心赛题ARC Prize。
-
ARC-AGI-2(2025):扩展任务集,提升了认知复杂度的颗粒度,保留静态输入输出格式,可更精细地评估不同层级的抽象推理能力。
-
ARC-AGI-3(2026):升级为交互式智能体基准,从静态图像变换变为无说明的回合制环境探索,新增对探索能力、世界建模、目标设定、行动规划的评估,更贴近真实通用智能场景。
二. 利用 ARC-AGI 图像变换评估模型性能的完整方法
ARC-AGI 的性能评估,本质是通过全新的网格图像变换任务,衡量模型「从极少量示例中归纳抽象规则、并泛化到新输入」的通用推理能力。它的评估逻辑与传统 CV/NLP 的监督式测评有本质区别:核心看「新任务泛化效率」,而非「已知任务拟合精度」。
一、评估的核心前提与原则
这是保证评估有效性的基础,一旦违反就会失去 ARC 测评通用智能的意义:
-
零样本 / 少样本泛化设定:所有测试任务的变换规则必须是模型从未见过的,严禁在测试任务集上做微调、预训练或任何形式的规则拟合。
-
纯视觉输入原则:标准设定下,模型仅能获取原始网格图像(或对应的二维数值数组),不能额外输入规则的文字描述、任务提示等外部先验。
-
全对即得分、错漏即失败:输出网格必须与正确答案在尺寸、每个像素颜色上完全一致才算通过,不存在部分得分(如像素准确率、IoU)------ 因为图像变换规则是确定性的,局部正确不代表掌握了规则。
二、标准评估流程(静态图像变换版本:ARC-1 / ARC-2)
- 数据集划分与选择
ARC 官方数据集按保密等级和用途分为三类,对应不同评估场景:
-
训练集(400 个任务,公开):仅用于算法调试、prompt 优化,不能计入最终性能结果。
-
验证集(400 个任务,公开):用于开发过程中的自助评估,可对比不同算法的相对性能,不作为正式排名依据。
-
私有测试集(不公开):官方保留的隐藏任务集,用于 ARC Prize、Kaggle 赛事等正式排名,彻底杜绝数据泄露和过拟合。
-
每个任务包含 2~6 组「输入网格 - 输出网格」的变换示例,以及 1~3 个待预测的测试输入;若单个任务包含多个测试输入,需全部输出正确才算该任务通过。
- 输入输出标准化
所有图像变换任务统一为结构化网格格式,保证评估一致性:
-
输入:二维整数数组,取值范围 0~9(对应 10 种颜色),网格尺寸在 1×1 到 30×30 之间。
-
输出:模型必须输出相同格式的二维数组,尺寸和每个像素取值都必须与标准答案完全匹配。
- 设定评估协议(尝试次数 k)
ARC 评估的核心参数是每个任务允许的输出尝试次数 k ,对应业界通用的pass@k指标:
-
k=1(最严格):每个任务只能输出 1 个答案,最能反映模型的确定性推理能力,是学术论文的核心对比指标。
-
k=3 / k=10:允许模型输出多个候选答案,只要有一个正确即判定通过,模拟人类的试错过程,难度相对宽松。
-
大 k 值(如 k=100):仅用于验证模型是否能生成正确答案,不反映真实推理效率,一般不用于正式对比。
三、细粒度能力拆解评估(按图像变换类型)
总通过率只能反映整体水平,要定位模型的能力短板,需要按图像变换的认知类型对任务分类,分别统计准确率。 ARC 的图像变换可分为 5 大类核心认知维度:
表格
| 变换类型 | 具体图像操作示例 | 对应测试的核心能力 |
|---|---|---|
| 几何变换类 | 旋转、翻转、平移、对称、缩放、形状延伸 | 空间认知、几何直觉 |
| 颜色逻辑类 | 颜色映射、替换、按规则填充、颜色计数 | 符号映射、逻辑匹配 |
| 物体操作类 | 物体分组、复制、移动、删除、合并、计数 | 客体感知、模式归纳 |
| 物理直觉类 | 重力下落、碰撞扩散、连通性、路径寻找 | 朴素物理、因果推理 |
| 抽象规则类 | 模式补全、规律延续、嵌套规则、多步推理 | 高阶抽象、复合推理 |
通过分类统计可以生成能力雷达图,清晰定位模型的优势与短板:例如传统大语言模型通常在颜色逻辑类表现较好,但在空间几何类任务上表现明显偏弱。
此外还可以按推理深度分层评估:
-
单步规则:一次变换即可得到输出
-
多步规则:需要连续执行多次变换操作
-
嵌套规则:变换规则本身包含子规则,需要二级抽象
四、交互式图像变换(ARC-AGI-3)的扩展评估
ARC-AGI-3 从静态图像升级为交互式环境,模型可以通过操作修改网格、获得环境反馈,评估维度更贴近真实通用智能:
-
任务成功率:最终是否正确完成目标变换,对应静态版本的通过率。
-
探索效率:完成任务需要的行动步数、试错次数,步数越少代表规划能力越强。
-
规则归纳速度:需要探索多少个样本才能总结出正确的变换规则。
-
目标理解能力:是否能理解无文字说明的隐含目标,自主规划操作路径。
三.官方评估工具 Python 代码示例
ARC-AGI 分为静态网格变换版本(ARC-1 / ARC-AGI-2)和交互式版本(ARC-AGI-3),两者的评估工具与代码范式完全不同。
- 静态版本(ARC-1 / ARC-AGI-2)原生评估脚本
这是最经典、使用最广的评估方式,直接基于官方 JSON 格式数据集,实现标准的 pass@k 全匹配评估,无需额外依赖官方包。
import json
import os
import numpy as np
from typing import List, Callable
def load_arc_task(task_path: str) -> dict:
"""加载单个ARC任务的JSON文件"""
with open(task_path, 'r', encoding='utf-8') as f:
return json.load(f)
def grid_equals(grid_a: List[List[int]], grid_b: List[List[int]]) -> bool:
"""判断两个网格是否完全一致(尺寸+所有像素)"""
if len(grid_a) != len(grid_b):
return False
if len(grid_a) > 0 and len(grid_a[0]) != len(grid_b[0]):
return False
for row_a, row_b in zip(grid_a, grid_b):
if row_a != row_b:
return False
return True
def evaluate_task(task: dict, solver: Callable, k: int = 1) -> bool:
"""
评估单个任务,返回是否通过
solver: 求解函数,输入为 (train_examples, test_input, k),输出为k个候选输出网格
"""
train_examples = task["train"]
test_cases = task["test"]
# 对每个测试用例生成k个候选答案
all_correct = True
for test_case in test_cases:
test_input = test_case["input"]
candidates = solver(train_examples, test_input, k)
# 只要有一个候选完全匹配就算正确
case_correct = any(
grid_equals(cand, test_case["output"])
for cand in candidates[:k]
)
if not case_correct:
all_correct = False
break
return all_correct
def evaluate_dataset(dataset_dir: str, solver: Callable, k: int = 1) -> float:
"""
评估整个数据集,返回 pass@k 通过率
dataset_dir: 数据集目录,包含多个json任务文件
"""
task_files = [f for f in os.listdir(dataset_dir) if f.endswith(".json")]
passed = 0
total = len(task_files)
for filename in task_files:
task_path = os.path.join(dataset_dir, filename)
task = load_arc_task(task_path)
if evaluate_task(task, solver, k):
passed += 1
return passed / total if total > 0 else 0.0
# ------------------- 使用示例 -------------------
def dummy_solver(train_examples, test_input, k):
"""示例求解器:直接返回输入作为预测(仅演示,无实际推理能力)"""
return [test_input for _ in range(k)]
if __name__ == "__main__":
# 替换为你的ARC数据集路径
DATASET_PATH = "./ARC-AGI/data/evaluation"
pass_at_1 = evaluate_dataset(DATASET_PATH, dummy_solver, k=1)
print(f"Pass@1: {pass_at_1:.2%}")
- ARC-AGI-3 官方工具包(arc-agi)使用示例
ARC-AGI-3 官方提供了 arc-agi Python 包,用于交互式环境的评估与成绩统计,需配合官方 API 使用ARC-AGI-3
pip install arc-agi
最小交互评估代码
import arc_agi
from arcengine import GameAction
# 初始化游戏客户端
arc = arc_agi.Arcade()
# 创建环境,terminal模式可在命令行渲染网格
env = arc.make("ls20", render_mode="terminal")
# 查看可用动作空间
print("可用动作:", env.action_space)
# 执行一步动作
observation = env.step(GameAction.ACTION1)
# 获取当前成绩卡(汇总所有游戏的表现)
scorecard = arc.get_scorecard()
if scorecard:
print(f"总得分: {scorecard.score}")
print(f"已完成游戏数: {len(scorecard.games)}")
四.主流模型 ARC-AGI 性能对比表
以下数据均基于 ARC-AGI-2 基准(目前业界主流的通用推理评测版本),按「纯模型零样本基线」和「增强方案 SOTA」两类区分,避免不同评测设定混比。
| 模型 | 厂商 | ARC-AGI-2 准确率 | 发布时间 | 备注 |
|---|---|---|---|---|
| GPT-5.5(高思考模式) | OpenAI | 85.0% | 2026-04 | 目前公开纯模型最高水平 |
| Gemini 3.1 Pro | Google DeepMind | 77.1% | 2026-02 | 官方基准验证,较前代提升 2.5 倍 |
| Claude Opus 4.5(思考模式) | Anthropic | 37.6% | 2026-03 | 同价位中性价比突出 |
| Gemini 3 Pro(基线) | Google DeepMind | 31.0% | 2025-12 | 未加推理增强的原生水平 |
| Kimi K2.5 | 月之暗面 | 12.0% | 2026-03 | 国产模型中表现最优 |
| GLM-5 | 智谱 AI | 5.0% | 2026-03 | 国产模型基线水平 |
| DeepSeek V3.2 | 深度求索 | 4.0% | 2026-03 | 成本最低但推理能力偏弱 |
| 普通成年人基线 | 人类 | ~80% | - | 通用智能参考标杆 |