Skip to content

yangou-hash/agent-arena

Repository files navigation

Agent Arena

LLM 与编程 Agent 的在线评测竞技场。通过匿名双盲 A/B 投票、动态模型匹配、多维度 Elo 评分、可执行 Benchmark 任务和 Docker 沙箱环境,为模型能力提供标准化和可量化的对比评测平台。

已实现功能

Arena 匿名对战

  • 匿名双盲 A/B 对战:隐藏模型身份,投票后 reveal 揭晓
  • 三种对战模式:answer_quality(回答质量)、execution_quality(执行质量)、combined(综合)
  • 独立工作区:每侧(A/B)独立工作空间、文件系统、对话记录和终端访问
  • 多维度投票:回答质量 / 执行质量分别打分(大幅更好 / 略好 / 平局 / 略差 / 大幅更差)
  • Elo 评分:基于 Bradley-Terry 的加权 Elo 模型匹配(寻找 Elo 相近对手)
  • 三维度排行榜:综合 / 回答质量 / 执行质量独立排序,含胜率、延迟、成本、失败率
  • 可执行对战:绑定 Benchmark 任务,A/B 双方在相同任务上执行并产出对比结果
  • 工作区追问:对战结束后可继续与模型对话、编辑文件、使用 WebSocket 终端
  • Arena 审计导出:session 信息、投票明细、workspace 产物、failure 切片综合导出

Benchmark 基准测试

  • 7 个 Benchmark 族:coding、reasoning、writing、tool-use、long-context、safety、terminal-bench
  • HumanEval:Python 代码生成,Docker 沙箱执行验证 + 本地回退
  • SWE-Bench:软件工程任务,支持 Hugging Face 官方数据集导入
  • GAIA:多模态推理任务,含答案归一化与部分匹配评分
  • Terminal-Bench:终端命令执行评测,支持两种模式:
    • selected_model:真实模型驱动的命令循环 agent,含 JSON 决策解析、命令黑名单、回合/时间限制、结构化 step trace
    • oracle_compat:预打包 oracle 方案执行,用于兼容性验证
  • 自定义 Benchmark:可创建自定义任务(标题、描述、能力标签、难度、评分标准)
  • 流式进度:SSE/NDJSON 实时推送运行进度、模型输出、验证结果、评分
  • 批量运行:一键批量执行多个任务,结果汇总面板
  • 失败分类passed / agent_failed / environment_failed / validator_failed / timed_out / unsupported_model,含失败原因和提示

模型配置与管理

  • 8+ 提供商适配:OpenAI(GPT)、Anthropic(Claude)、Google(Gemini)、DeepSeek、Kimi、Doubao、Qwen、OpenAI 兼容端点
  • DeepSeek Live Adapter:唯一支持真实 API 调用的适配器(支持 reasoning_effort / thinking 参数)
  • Mock Adapter:确定性 mock 响应用于开发测试
  • 连通性探测:可对任意模型进行 API 连通性检查并展示结果
  • 密钥安全:Provider API Key 在前端始终显示为 ********,不传输明文

聊天工作台

  • 多模型对话:选择已配置的任一模型进行对话
  • 推理链展示:展示模型思考过程(附带思考耗时统计)
  • 聊天历史:本地持久化(localStorage + cookie),支持新对话、恢复历史、清空
  • 快捷提示词:侧边栏预设快速提问入口

Docker 沙箱

  • 隔离执行:--network none--read-only 文件系统、tmpfs /tmp
  • 资源限制:CPU 限制、内存限制(512m)、PID 限制、超时控制(20s)
  • 多语言支持:Python 和 Node.js 沙箱镜像
  • 健康检查:CLI、守护进程、镜像状态实时展示

可交互终端

  • WebSocket 终端:Arena 工作区可打开交互式 xterm.js 终端
  • 双向通信:支持命令执行、回显、终端 resize

数据分析

  • Failure 切片:按 provider / environment / validator / agent / timeout / unsupported 等维度统计失败分布
  • 数据持久化:Arena sessions、votes、workspace artifacts、benchmark runs 通过 JSON 文件持久化

技术栈

技术
前端 Next.js 15 + React 19 + TypeScript
后端 FastAPI (Python 3.12)
数据库 PostgreSQL 16 + SQLAlchemy ORM
缓存 Redis 7
沙箱 Docker
终端 xterm.js + WebSocket
图表 Recharts
图标 Lucide React
数据获取 TanStack React Query
构建工具 pnpm (monorepo)
HTTP 代理 Nginx
测试 Pytest (API) + Playwright (E2E)

环境要求

  • Node.js >= 22
  • pnpm >= 9
  • Python >= 3.12
  • Docker (Desktop 或 Engine)
  • PostgreSQL 16(可通过 Docker Compose 启动)
  • Redis 7(可通过 Docker Compose 启动)

本地开发

1. 安装依赖

pnpm install
pnpm --filter @agent-arena/api install:python

2. 配置环境变量

copy .env.example .env

编辑 .env 填入必要配置(至少需要 DEEPSEEK_API_KEY 来启用真实模型调用):

变量 说明 默认值
NEXT_PUBLIC_API_BASE_URL 前端 API 地址 http://localhost:8000
DATABASE_URL PostgreSQL 连接串 postgresql+psycopg://arena:arena@localhost:5432/arena
REDIS_URL Redis 连接串 redis://localhost:6379/0
DEEPSEEK_API_KEY DeepSeek API Key 必填
SECRET_KEY 会话签名密钥 必填
CORS_ORIGINS CORS 允许域名 http://localhost:3000
OPENAI_API_KEY 其他 Provider 密钥 可选

3. 启动数据库

docker compose -f infra/docker-compose.yml up -d postgres redis

4. 启动前后端

# 前端(端口 3000)
pnpm --filter @agent-arena/web dev

# 后端(端口 8000)
pnpm --filter @agent-arena/api dev

启动后访问:

项目结构

.
├── apps/
│   ├── api/                    # FastAPI 后端
│   │   ├── app/
│   │   │   ├── main.py         # 应用入口,中间件注册
│   │   │   ├── config.py       # Pydantic Settings 配置
│   │   │   ├── db.py           # SQLAlchemy 引擎与会话
│   │   │   ├── models.py       # ORM 模型定义
│   │   │   ├── routers/        # API 路由
│   │   │   │   ├── models.py   # 模型、排行榜、对话、探测
│   │   │   │   ├── arena.py    # Arena 对战、投票、工作区
│   │   │   │   ├── benchmarks.py # Benchmark 任务、运行、批量
│   │   │   │   ├── sandbox.py  # Docker 沙箱
│   │   │   │   ├── terminal.py # WebSocket 终端
│   │   │   │   └── analysis.py # 失败分析
│   │   │   ├── schemas/        # Pydantic 数据模型
│   │   │   └── services/       # 核心业务逻辑
│   │   │       ├── arena.py          # Arena 核心引擎(1130 行)
│   │   │       ├── model_adapters.py # Provider 适配器抽象
│   │   │       ├── terminal_bench.py       # Terminal-Bench 执行器
│   │   │       ├── terminal_bench_agent.py # 终端 Agent 命令循环
│   │   │       ├── benchmark_imports.py    # Benchmark 数据导入
│   │   │       ├── official_benchmarks.py  # 官方基准数据集
│   │   │       ├── judge.py          # 一致性评判
│   │   │       ├── rating.py         # Elo 计算
│   │   │       ├── seed.py           # 种子数据
│   │   │       ├── sandbox.py        # Docker 沙箱执行
│   │   │       ├── analysis.py       # 失败切片统计
│   │   │       ├── arena_session_store.py    # Arena JSON 持久化
│   │   │       ├── benchmark_run_store.py    # Benchmark JSON 持久化
│   │   │       ├── agent_config_store.py     # 配置 JSON 持久化
│   │   │       ├── custom_benchmark_store.py # 自定义任务持久化
│   │   │       └── humaneval.py      # HumanEval 执行器
│   │   └── tests/               # Pytest 测试(12 个测试文件)
│   └── web/                     # Next.js 前端
│       ├── app/
│       │   ├── page.tsx         # 主页面(2520 行,单文件 SPA)
│       │   ├── layout.tsx       # 根布局
│       │   └── globals.css      # 全局样式
│       ├── components/
│       │   ├── model-response.tsx    # 模型匿名响应卡片
│       │   ├── leaderboard-table.tsx # 排行榜表格
│       │   └── terminal.tsx          # xterm.js 终端面板
│       ├── lib/
│       │   └── api.ts           # Typed fetch 封装
│       └── tests/
│           └── e2e/             # Playwright E2E 测试
├── packages/
│   └── shared/                  # 共享 TypeScript 类型
│       └── src/index.ts         # 全部接口类型定义(393 行)
├── infra/                       # Docker / Nginx 编排
│   ├── docker-compose.yml       # 5 服务编排
│   ├── api.Dockerfile           # API Docker 镜像
│   ├── web.Dockerfile           # Web Docker 镜像(多阶段构建)
│   ├── nginx.conf               # Nginx 反向代理配置
│   └── sandbox/                 # 沙箱 Docker 镜像
├── data/                        # 运行时数据
│   ├── agent-configs.json
│   ├── custom-benchmarks.json
│   ├── arena-sessions/
│   └── benchmark-runs/
├── docs/                        # 文档
└── .env.example                 # 环境变量模板

API 端点总览

模块 方法 路径 说明
模型 GET /api/models 模型列表
模型 GET /api/leaderboards 排行榜(支持维度筛选)
模型 GET /api/agent-configs Agent 配置列表
模型 PUT /api/models/{id}/agent-config 更新配置
模型 POST /api/models/{id}/probe 连通性探测
模型 POST /api/chat 模型对话
Arena POST /api/arena/sessions 创建对战
Arena GET /api/arena/sessions 对战列表
Arena GET /api/arena/sessions/{id} 对战详情
Arena GET /api/arena/sessions/{id}/audit-export 审计导出
Arena POST /api/arena/votes 提交投票
Arena GET /api/arena/votes 投票列表
Arena GET/POST /api/arena/workspace-artifacts 工作区产物
Arena GET /api/arena/sessions/{id}/workspaces/{side} 工作区详情
Arena PUT /api/arena/sessions/{id}/workspaces/{side}/files 保存文件
Arena POST /api/arena/sessions/{id}/workspaces/{side}/followups 工作区追问
Benchmark GET /api/benchmarks 任务列表
Benchmark GET /api/benchmark-families 族状态
Benchmark GET /api/official-benchmarks 官方基准状态
Benchmark POST /api/official-benchmarks/install 安装官方基准
Benchmark GET /api/benchmark-judge/status 评判模型状态
Benchmark POST /api/benchmarks 创建自定义任务
Benchmark POST /api/benchmark-runs 单次运行
Benchmark POST /api/benchmark-runs/stream 流式运行
Benchmark POST /api/benchmark-batch-runs 批量运行
Benchmark GET /api/benchmark-runs 运行历史
Benchmark GET /api/benchmark-runs/{id} 运行详情
Sandbox GET /api/sandbox/status 沙箱状态
Sandbox POST /api/sandbox/runs 执行代码
Terminal WS /api/terminal/ws WebSocket 终端
Analysis GET /api/failure-slices 失败切片统计

Docker 部署

完整栈一键启动(含 PostgreSQL、Redis、API、Web、Nginx):

docker compose -f infra/docker-compose.yml up --build

访问地址:http://localhost

Nginx 反向代理规则:

  • /api/*api:8000
  • /*web:3000

测试

# API 测试
pnpm --filter @agent-arena/api test

# 前端构建检查
pnpm --filter @agent-arena/web build

# E2E 测试
pnpm --filter @agent-arena/web e2e

# 代码检查
pnpm --filter @agent-arena/api lint
pnpm --filter @agent-arena/web lint

安全

  • Provider API Key 不暴露给前端(返回时 mask 为 ********
  • 沙箱容器:--network none + --read-only + tmpfs /tmp + CPU/内存/PID 限制
  • .env 文件已加入 .gitignore,永不提交密钥
  • 沙箱容器不接收模型 Provider 密钥

待开发功能

P1 — 后台任务与生产化

  • 长耗时 Benchmark / Arena 执行迁移到后台任务队列
  • 运行取消、状态恢复、失败重试
  • JSON run store 与后台任务状态机对齐

P1 — Official Benchmark 完整支持

  • SWE-Bench 官方 harneess 级执行链路(checkout / patch apply / artifact 持久化)
  • GAIA 完整数据与附件处理
  • 官方 grader 归一化与审计能力

P1 — 前端体验完善

  • 窄屏与移动端响应式适配
  • Benchmark / Arena 历史运行完整 UI(筛选、恢复、详情)
  • Trace 回放、Artifact 预览、日志折叠、执行可视化
  • 视觉回归测试

P2 — 数据库迁移与分析增强

  • 从 JSON 文件存储迁移到 SQLAlchemy ORM 全链路
  • 完整 trace / artifact 回放系统
  • 统一分析面板(跨 Arena 和 Benchmark 聚合统计)
  • Bradley-Terry 评分模型升级

License

MIT

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors