SnapBench LLM 空间推理基准测试技术分析
一、概述
1. 项目背景
A. 项目简介
SnapBench 是一个受 1999 年《宝可梦快照》游戏启发的空间推理基准测试项目。该项目构建了一个 3D 体素世界,让视觉语言模型(VLM)控制无人机在其中飞行,寻找并识别生物。
B. 核心特点
- 程序化生成的 3D 地形
- 真实的物理模拟和碰撞检测
- 多语言混合架构(Zig + Rust + Python)
- 自动化基准测试框架
2. 技术栈
A. 编程语言
- Zig 64.3%:3D 模拟引擎
- Rust 22.4%:无人机控制器
- Python 11.1%:基准测试脚本
B. 核心依赖
- raylib:3D 图形渲染
- OpenRouter:VLM API 接入
二、系统架构
1. 整体设计
系统采用三层架构设计:
graph TB
subgraph Simulation
A[地形生成]
B[生物生成]
C[物理引擎]
end
subgraph Controller
D[Rust控制器]
E[画面捕获]
F[Prompt构建]
end
subgraph VLM
G[OpenRouter API]
end
Simulation -->|UDP:9999| Controller
Controller -->|screenshot+state| VLM
VLM -->|commands| Controller
Controller -->|movement+identify| Simulation2. 组件说明
A. 模拟层(Simulation)
- 职责:生成 3D 世界,处理物理模拟
- 技术实现:Zig + raylib
功能特性:
- 程序化地形生成
- 生物生成(猫、狗、猪、羊)
- 碰撞检测
- 无人机物理模拟
B. 控制层(Controller)
- 职责:协调 VLM 与模拟交互
- 技术实现:Rust
功能特性:
- 画面捕获
- 状态数据收集
- Prompt 构建
- 响应解析
C. VLM 层
- 职责:理解场景并决策
- 技术实现:OpenRouter API
- 支持模型:7 种前沿 LLM
3. 通信协议
系统通过 UDP 协议进行组件间通信:
sequenceDiagram
participant Sim as 模拟器(Zig)
participant Ctrl as 控制器(Rust)
participant VLM as 视觉模型
Sim->>Ctrl: UDP:9999 状态推送
Ctrl->>Ctrl: 画面捕获
Ctrl->>Ctrl: 构建Prompt
Ctrl->>VLM: API请求
VLM->>Ctrl: 返回指令
Ctrl->>Sim: 移动+识别命令
Sim->>Sim: 物理更新三、基准测试设计
1. 测试任务
A. 目标
控制无人机在 3D 体素世界中寻找并成功识别 3 个生物
B. 成功条件
无人机距离目标生物 5 个单位以内时执行 identify 命令
C. 约束条件
- 最大迭代次数:50 次
- 可用命令:8 个移动命令 + identify + screenshot
- 生物位置:随机生成
2. 参与模型
测试了 7 种前沿 LLM:
| 模型 | 定位 | 成本 |
|---|---|---|
| Gemini 3 Flash | 轻量级 | 最低 |
| Gemini 3 Pro | 标准版 | 中等 |
| GPT-5.2-chat | 主流 | 较高 |
| Claude Opus 4.5 | 旗舰 | 最高 |
| 其他 3 个 | 多样化 | 各异 |
3. 测试结果
A. 核心发现
只有 Gemini 3 Flash 成功完成任务
B. 关键数据
- Flash:唯一成功找到生物的模型
- GPT-5.2:能靠近但从不下降高度
- Claude Opus:尝试识别 160+ 次,从未成功
- 其他模型:随机游走或陷入停滞
C. 性能对比
graph LR
A[模型成本] --> B[实际表现]
C[Claude Opus<br/>最高成本] --> D[失败]
E[Gemini Pro<br/>中等成本] --> F[失败]
G[GPT-5.2<br/>较高成本] --> H[失败]
I[Gemini Flash<br/>最低成本] --> J[成功]
style J fill:#90EE90
style D fill:#FFB6C1
style F fill:#FFB6C1
style H fill:#FFB6C1四、技术分析
1. 核心差异因素
A. 高度控制能力
测试表明,关键差异点并非智能程度,而是高度控制能力:
- Gemini Flash:主动调整高度,下降到生物层面
- GPT-5.2:水平方向接近,但不降低高度
- Claude Opus:尝试识别 160+ 次,因接近角度错误而失败
B. 问题根因
生物位于地面,要成功识别必须下降。Claude Opus 虽然是最强的模型,知道需要识别生物,并积极尝试,但从不调整接近角度。
2. 异常发现
A. 双生物异常
第 13 次运行(种子 72)是唯一找到 2 个生物的测试。原因是它们生成位置靠近,Flash 找到一个后转身发现了第二个。
B. 搜索空间限制
大多数运行中,Flash 快速找到一个生物后,用尽迭代次数寻找其他生物。世界很大,50 次迭代不足以完成全面搜索。
3. 模型规模悖论
A. 预期 vs 实际
预期结果:
- Claude Opus 4.5(最贵)应占主导
- Gemini 3 Pro 应优于 Gemini 3 Flash
实际结果:最便宜的模型击败了成本高 10 倍的模型
B. 可能解释
- 空间推理不随模型规模扩展
- Flash 训练方式不同(更多机器人学数据)
- 小模型更按字面意思执行指令
五、技术实现细节
1. 模拟器设计
A. 地形生成
程序化生成算法创建体素地形
B. 生物系统
- 类型:猫、狗、猪、羊
- 生成:随机位置
- 可见性:部分生物(灰色羊、粉色猪)因对比度更易发现
C. 物理引擎
- 无人机物理模拟
- 碰撞检测
- 移动命令处理
2. 控制器实现
A. 状态收集
- 位置信息
- 画面截图
- 最近命令历史
B. Prompt 构建
将状态信息结构化为 VLM 可理解的提示词
C. 响应解析
将 VLM 输出转换为可执行命令序列
3. 通信机制
A. UDP 协议
端口 9999 用于模拟器与控制器通信
B. 数据格式
- 请求:screenshot + state
- 响应:commands + state
六、使用指南
1. 环境要求
| 工具 | 版本要求 | 安装来源 |
|---|---|---|
| Zig | ≥0.15.2 | ziglang.org/download |
| Rust | stable (2024 edition) | rust-lang.org/tools/install |
| Python | ≥3.11 | python.org |
| uv | latest | docs.astral.sh/uv |
2. 安装步骤
# 克隆仓库
gh repo clone kxzk/snapbench
cd snapbench
# 设置 API 密钥
export OPENROUTER_API_KEY="sk-or-..."3. 运行方式
A. 手动运行模拟
# 终端 1:启动模拟器(可选种子)
zig build run -Doptimize=ReleaseFast -- 42
# 或
make sim
# 终端 2:启动控制器
cargo run --release --manifest-path llm_drone/Cargo.toml -- --model google/gemini-3-flash-preview
# 或
make droneB. 运行基准测试
# 运行所有定义在 bench/models.toml 的模型
uv run bench/bench_runner.py
# 或
make bench结果保存到 data/run_
七、项目局限
1. 已知问题
A. 模拟器粗糙边缘
作为副业项目,并非完善的基准测试套件
B. Prompt 设计
对所有模型使用统一提示,未针对特定模型优化
C. 反馈循环简单
仅传递位置、截图、最近命令,信息有限
D. 迭代限制
50 次迭代可能限制慢速模型的潜力
八、未来方向
1. 改进计划
A. 模型特定优化
针对各模型优势调整指令
B. 丰富反馈信息
传递更多空间上下文(距离读数、指南针、小地图)
C. 多智能体测试
为每个模型分配无人机进行竞争
D. 扩展迭代
让慢速模型运行更长时间,分离推理速度与能力
E. 真实无人机测试
Gemini Flash vs. BetaFPV 真实飞行
F. 宝可梦资产
使用低多边形宝可梦模型,强化游戏灵感
G. 世界优化
更大地形、更好视觉效果、性能优化
九、技术价值
1. 研究意义
A. 空间推理评估
为 LLM 空间推理能力提供实际测试场景
B. 成本效益分析
揭示模型规模与任务表现的非线性关系
C. 具身智能
为机器人学中的 LLM 应用提供参考
2. 实践启示
A. 模型选择
构建需要导航物理或虚拟空间的 LLM 智能体时,最昂贵的模型未必是最佳选择
B. 任务适配
不同模型在不同任务上表现差异显著,需针对性选择
C. 评估方法
真实场景测试比理论性能更重要
十、相关资源
1. 项目信息
- 仓库地址:github.com/kxzk/snapbench
- Star 数:115
- 最后更新:2026 年 1 月 26 日
2. 素材来源
- 无人机模型:NateGazzard (CC-BY)
- 体素世界包:Quaternius
- 平台:Poly Pizza
3. 相关项目
- Tello Bench:真实 DJI Tello 无人机控制测试