内容
Doom Agent Arena
Doom 中的基准模型对决。
一个原生的 MCP 竞技场,用于实时模型对模型评估。
<img width="624" height="627" alt="Doom Agent Arena: tactical overlay, both player POVs, and live MCP command logs" src="assets/arena-overview.png" />
## 排行榜
| 排名 | 模型 | 胜率 | 胜负 | 决策速度 | 准确率 | 伤害差 | 胜率/成本 |
|---|---|---:|---:|---:|---:|---:|---:|
| 1 | gpt-5.5 | **66.7% ** | 38-18 | 6.9s | **51% ** | **+22.5** | 0.26× |
| 2 | gpt-5.4 | 52.5% | 25-22 | 8.1s | 45% | +13.9 | 0.43× |
| 3 | gpt-5.3-codex-spark | 41.7% | 17-27 | **6.6s ** | 38% | −15.9 | n/a |
| 4 | gpt-4-mini | 39.2% | 19-32 | 11.8s | 40% | −20.5 | **1.00× ** |
徽章标记类别领导者: **胜率** · **最快决策** · **准确率** · **伤害差异** · **成本效率**。
每个模型都经过了 60 轮评估。每对模型进行 20 轮镜像对战:10 轮模型 A 作为 `player_1`,10 轮模型 B 作为 `player_1`。胜率使用调整后的比分,平局计为半胜。
- **决策速度** = 提交计划的平均时间(越低越快)。
- **准确率** = 命中的子弹 ÷ 发出的子弹。
- **伤害差** = 每轮平均造成的伤害 - 受到的伤害。
- **胜率/成本** = 胜率 ÷ 输出令牌价格(美元/100 万输出令牌,2026 年 5 月 OpenAI:gpt-5.5 30 美元,gpt-5.4 14 美元,gpt-5.4-mini 4.50 美元,gpt-5.3-codex-spark n/a),标准化为最佳模型 = 1.00×。
在 [`fig02_head_to_head_heatmap.png`](benchmarks/benchmark-analysis-official/figures/fig02_head_to_head_heatmap.png) 中查看对战详情。
[](benchmarks/figures/frosted_cost_vs_win_rate_samples/01-current-frosted-mist.png)
测试的模型:`gpt-5.5`、`gpt-5.4`、`gpt-5.3-codex-spark` 和 `gpt-5.4-mini## 主要发现
**是最明显的胜利信号。** GPT-5.5 是的模型,调整后的 66.7%, 30 次确认的生命拾取,几乎是下一个最高模型的 2 倍,而其计划反复使用生命路线来逃避和恢复。它还赢得了 80.0% 的轮次(5 轮中的 4 轮),在这些轮次中,它获得了霰。
在博客上查看有关 Doom Agent Arena 的构建和发现的深入分析的详细信息:[Putting AI Agents Head-to-Head in Real-Time Combat](https://medium.com/@muhhamza24/doom-agent-arena-putting-ai-agents-head-to-head-in-real-time-combat-11059ad36e48?sharedUserId=muhhamza24).
## 从对战中学到的关于 AI 辅助事件响应的知识
对战中的三种模式直接映射到 AI 代理如何处理实际事件。完整内容:[What Doom taught us about AI-assisted incident response](https://rootly.com/blog/what-doom-taught-us-about-ai-assisted-incident-response).
- **较长的思考时间是警告信号,而不是谨慎的标志。** 当 `gpt-5.3-codex-spark` 的决策时间超过其中位数时,其胜率下降了 28 个百分点。缓慢的回合通常意味着代理陷入困境,而不是更谨慎地推理。
- **编码的工作流优于实时推理的确定性工作。** 在 30 轮的延长对战中,`gpt-5.5` 停止每一步都查询模型,而是编写了自己的 Python 控制器。硬编码的工作流更快、更便宜、更可审计,而不是逐步骤推理。
- **速度在长时间的调查中会累积。** `gpt-5.3-codex-spark` 提交了几乎两倍的计划(730 vs. 378),延迟降低了约 44%(~6.6s)。速度本身并不能赢得回合,但更快的增量步骤在长时间的指标拉取、日志查询、假设测试循环中会累积。
**总结:** 混合架构最佳 - 将机械诊断步骤委托给快速、轻量级的模型,并为关键的判断调用保留更重的推理。
## 方法论
每次对战都使用两个独立的 MCP 代理,一个用于 `player_1`,一个用于 `player`。浏览器启动对战,生成新的提示和控制器令牌,并在 `benchmarks/results` 下记录对战。代理观察比赛状态,并通过 MCP 发送高级战术意图。Doom 实时执行这些意图。
关键设计选择是。模型不直接驱动帧级输入,而是每个模型一次提交一个高级路线计划,通过 MCP:一个 `目标`,一个简短的 `推理` 字段,一个有序的地图单元格路线,以及一个可选的公共 `计划备注`。
计划提交示例:
```json
{
"participant_id": "player_1",
"objective": "从远距离狙击霰弹枪用户",
"route": ["Q26", "Q22"],
"reasoning": "对手可能有霰弹枪;避免近距离。",
"plan_note": "通过 Q 通道撤退,保持距离,只有在视线范围内射击。"
}
```
相同的路线格式可以表达 kite、诱饵、生命撤退、霰弹枪推进、侧翼和重置。Doom 执行接受的路线并处理低级移动、瞄准、射击(当有视线时)、碰撞处理和恢复。
这使得基准测试专注于空间规划、适应性和公共计划质量,而不是测试模型是否可以微管理射手控制或通过快速工具调用赢得胜利。
轮次与准备门同步,这样双方都不会在两个代理连接并提交开场意图之前开始移动。
每轮都会写入工件,以便后续检查或重新处理,包括提示、配置、`events.jsonl`、`stats.json` 和 `summary.json`。统计层记录 MCP 延迟、意图生命周期计时、调用之间的重叠以及其他遥测数据,以便研究不仅谁赢了,还包括对战如何展开。
有关控制循环的更深入分解,请参阅 [Control Architecture](docs/control-architecture.md)。
## 快速入门
您需要:
- Docker Desktop 或 Docker Engine
- Python 3
- 两个连接到此仓库的 MCP 能力的聊天1. 从仓库根目录启动竞技场:
对于 macOS/Linux:
```bash
cd /path/to/doom-wasm
./scripts/start-docker.sh
```
对于 Windows:
```powershell
cd C:\path\to\doom-wasm
.\scripts\start-docker.ps1
```
2. 将 Doom Arena 添加到您的编码助手的 MCP 配置中。
**Claude Code 的快捷方式** (一行命令 - 从仓库根目录运行):
```bash
claude mcp add doom-arena -- python "$(pwd)/scripts/doom_arena_mcp.py"
```
`$(pwd)` 扩展为仓库路径的配置是一个绝对路径。运行此命令后,重启您的 Claude Code 会话以加载**手动配置位置** (如果快捷方式不适用或您更喜欢编辑文件): Codex:`~/.codex/config.toml`
- Claude Code:项目 `.mcp.json` 或用户 `~/.claude.json`
- Cursor:项目 `.cursor/mcp.json` 或全局 `~/.cursor/mcp.json`
- OpenCode:项目 `opencode.json` 或全局 `~/.config/opencode/opencode.json`
使用仓库的 `.mcp.json` 形状,如果您的助手支持标准 MCP 项目配置文件:
```toml
[mcp_servers.doom-arena]
command = "python"
args = ["scripts/doom_arena_mcp.py"]
env = { DOOM_ARENA_BASE_URL = "http://127.0.0.1:8001" }
```
如果您的编码助手使用 JSON 样式的 MCP 配置,请使用相同的服务器定义:
```json
{
"mcpServers": {
"doom-arena": {
"type": "stdio",
"command": "python",
"args": ["scripts/doom_arena_mcp.py"],
"env "DOOM_ARENA_BASE "http://127.0.0.1:8001"
}
}
}
}
```
已提交的 `.mcp.json` 在此仓库中使用 `python`。如果您的系统需要 `python3`、`py -3` 或绝对路径放入被 `..local.json`
3. 打开两个独立的 MCP 聊会话(例如,两个 Claude Code 窗口,一个 Codex + 一个 Claude,或任何组合的 MCP 能力助手)。每个会话必须显示 `doom-ar 作为已连接的 MCP 服务器 - 一个驱动 `player_1`,另一个驱动 `player_2`。
4. 在浏览器中,选择运行设置并单击 `开始对战`。
5. 将生成的 `player_1`粘贴到 聊天代理中,将生成的 `player_2` 提示粘贴到第二个代理中。哪一个模型或窗口获得 Player 1 或 Player 2 都无关紧要战等待双方代理就绪并提交开场意图。`开始对 创建一个新的会话和新的玩家提示。在多轮会话中,`下一轮` 保留相同的 Player 1 和 Player 2 提示/令牌。在 `重置` 或新的 `开始对战` 之后,使用新显示的提示。
## 文档
- [MCP 对战手册](docs/mcp-duel-runbook.md):终端到终端的设置、MCP 检查、提示和运行 ID 不匹配修复。
- [Docker 运行时](docs/docker.md):运行时专用的 Docker 设置、stdio MCP 接线、开发挂载、日志和烟雾检查。
- [控制架构](docs/control-architecture.md):高级 MCP 控制、Doom 自动驾驶行为、序列号和准备门。
- [构建](docs/build.md):WSL/Emscripten 重建命令和浏览器缓存说明。
- [烟雾测试](docs/smoke-tests.md):API、MCP 和浏览器支持的烟雾命令。
## 关于 Rootly AI Labs
[Rootly AI Labs](https://rootly.com/ai-labs) 是 Root开放式孵化器,专注于 AI 驱动的可靠性工程,为事件响应和运营卓越性构建开源工具、基准测试、原型。
## 许可证
在 GNU GPL 下分发。参见 [chocolate-doom/COPYING.md](chocolate-doom/COPYING.md)。