KCORES Agent 基准测试项目,旨在评估单模态/多模态模型作为智能体的能力。
Silicon Rider Bench 模拟外卖骑手的工作流程,AI 智能体通过调用工具做出决策,最终评价基于固定时间内赚取的利润。该基准测试提供了一个虚拟沙箱环境,智能体在模拟城市中导航、接单、取餐、送餐,并管理电池电量等资源。
- 🎯 真实场景模拟:模拟外卖配送的完整工作流程,包括接单、取餐、送餐、换电等
- 🗺️ 动态环境:基于种子生成的确定性地图,支持动态拥堵和订单潮汐
- 🔋 资源管理:智能体需要管理电量、承载能力、时间等多种资源
- 📊 多维度评估:从利润、准时率、路径效率、API 违规率等多个角度评估性能
- 🧪 可重现性:使用种子确保每次运行的地图和订单生成完全一致
- 🛠️ 工具调用:提供 10 个标准工具 API,支持 OpenAI SDK 兼容的模型
- Node.js ≥ 18.0.0
- TypeScript ≥ 5.0.0
- OpenRouter API Key(或兼容 OpenAI SDK 的 API,或本地 llama.cpp 服务)
# 克隆仓库
git clone https://github.com/kcores/silicon-rider-bench.git
cd silicon-rider-bench
# 安装依赖
npm install
# 配置 API
cp .env.example .env
# 编辑 .env 文件,填入你的 API_KEY编辑 .env 文件:
使用 OpenRouter / OpenAI:
# API Key(必需)- 支持 OpenRouter、OpenAI 等兼容服务
API_KEY=your_api_key_here
# 模型名称(可选,默认:anthropic/claude-3.5-sonnet)
MODEL_NAME=anthropic/claude-3.5-sonnet
# API Base URL(可选,默认:https://openrouter.ai/api/v1)
BASE_URL=https://openrouter.ai/api/v1
# 最大迭代次数(可选,默认:300)
# AI 模型的最大对话轮数,Level 1 可能需要 100-300 次迭代
MAX_ITERATIONS=300使用 llama.cpp 或其他无需 API Key 的服务:
# API Key 是可选的,留空即可
API_KEY=
# API Base URL - 支持本地或远程服务
BASE_URL=http://localhost:8080/v1
# 或远程地址,例如:
# BASE_URL=http://10.0.6.26:9999/api/v1
# 模型名称(可以任意填写)
MODEL_NAME=llama-local
# 最大迭代次数
MAX_ITERATIONS=300注意:API_KEY 现在是可选的。如果留空,系统会使用占位符,由上游 API 决定是否需要认证。 详细配置说明请参考 DOCUMENTS/llamacpp-configuration.md
SITE_URL=
APP_NAME=Silicon Rider Bench
## 使用指南
### 快速开始
```bash
# 运行 Level 0.1(教程场景,单订单完成)
npm run level0.1
# 运行 Level 1(完整基准测试,24 小时模拟)
npm run level1
# 运行测试套件
npm test
# 运行测试(带覆盖率报告)
npm run test:coverage
# 使用自定义种子运行
npm run dev -- --level 1 --seed 12345
# 禁用实时可视化(提高性能)
npm run dev -- --level 1 --no-viz
# 指定输出报告文件
npm run dev -- --level 1 --output my-report.md
# 使用不同的 AI 模型
npm run dev -- --level 1 --model anthropic/claude-3-opus
# 组合多个选项
npm run dev -- --level 1 --seed 42 --model openai/gpt-4 --output gpt4-result.md
# 查看所有命令行选项
npm run dev -- --helpSilicon Rider Bench 支持基于浏览器的实时可视化界面,提供更直观的模拟过程展示。
# 使用默认配置启动 Web 模式(localhost:3000)
npm run dev -- --level 1 --mode web
# 指定自定义主机和端口
npm run dev -- --level 1 --mode web --host 0.0.0.0 --port 8080
# Web 模式下运行 Level 0.1
npm run dev -- --level 0.1 --mode web启动后,终端会显示访问 URL:
🌐 Web server started at http://localhost:3000
📊 Open this URL in your browser to view the simulation
Web 界面分为三个主要区域:
1. 地图区域(左侧/中央)
- 🗺️ 显示完整的模拟世界地图
- 📍 使用 emoji 图标表示不同类型的位置:
- 🍔 餐厅
- 🏠 住宅
- 🏢 办公室
- 🛒 超市
- 💊 药店
- 🔋 换电站
- 🚴 实时显示骑手当前位置
- 📐 网格背景显示空间结构
2. 统计面板(右侧)
- ⏰ 当前游戏时间
- 🔋 骑手电量百分比
- 💰 当前利润金额
- 📦 携带订单数量和重量
- ✅ 已完成订单数量
- 📋 背包中的订单详细列表(ID、类型、重量、截止时间)
3. 对话面板(底部)
- 💭 AI 的思考过程和推理文本
- 🔧 工具调用信息(工具名称和参数)
- 📥 工具调用返回结果
- 🔄 自动滚动到最新消息
- 实时更新:通过 WebSocket 实现毫秒级的状态同步
- 连接状态指示:界面右上角显示连接状态(🟢 已连接 / 🔴 已断开)
- 自动重连:WebSocket 断开时自动尝试重新连接
- 响应式布局:适配不同屏幕尺寸
- 终端日志保留:Web 模式下终端仍然输出关键事件和最终报告
| 特性 | 终端模式 | Web 模式 |
|---|---|---|
| 可视化方式 | 终端字符界面 | 浏览器图形界面 |
| 实时更新 | 逐行刷新 | WebSocket 推送 |
| 地图显示 | ASCII 字符 | Emoji 图标 + 网格 |
| 对话展示 | 滚动文本 | 结构化气泡 |
| 多设备查看 | ❌ | ✅(同一网络) |
| 性能影响 | 低 | 低(异步推送) |
| 模拟结果 | 完全一致 | 完全一致 |
- 服务器:基于 Node.js 内置
http模块和ws库 - 客户端:原生 HTML5 + CSS3 + JavaScript(无框架依赖)
- 通信协议:WebSocket(双向实时通信)
- 静态资源:位于
src/web/public/目录 - 浏览器兼容性:支持所有现代浏览器(Chrome 16+, Firefox 11+, Safari 7+, Edge)
端口已被占用
# 使用其他端口
npm run dev -- --level 1 --mode web --port 3001无法访问 Web 界面
- 检查防火墙设置
- 确认浏览器支持 WebSocket
- 查看终端输出的访问 URL 是否正确
连接断开
- Web 界面会自动尝试重连
- 检查网络连接
- 刷新浏览器页面
| 选项 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--level |
-l |
指定关卡(0.1 或 1) | 1 |
--seed |
-s |
指定地图种子 | Level 配置默认值 |
--model |
-m |
指定 AI 模型名称 | .env 中的 MODEL_NAME |
--mode |
- | 可视化模式(terminal 或 web) | terminal |
--host |
- | Web 服务器主机地址(仅 Web 模式) | localhost |
--port |
- | Web 服务器端口号(仅 Web 模式) | 3000 |
--no-viz |
- | 禁用实时可视化 | false |
--output |
-o |
指定报告输出文件 | report.md |
--help |
-h |
显示帮助信息 | - |
- 目标:完成单个订单配送
- 时长:60 分钟
- 地图:小型地图(约 10 个节点)
- 订单:1 个预设订单
- 用途:验证 Agent 基本功能,测试工具调用序列
- 目标:在 24 小时内最大化利润
- 时长:1440 分钟(24 小时)
- 地图:大型地图(50+ 节点)
- 订单:动态生成,支持订单潮汐
- 特性:
- 动态拥堵(早晚高峰)
- 订单潮汐(不同时段不同类型订单频率变化)
- 多种订单类型(餐饮、超市、药店)
- 资源管理(电量、承载能力)
- 超时惩罚机制
模拟结束后,系统会生成包含以下指标的评测报告:
- 总利润:订单支付总和 - 换电成本
- 准时率:准时配送订单数 / 总配送订单数
- 路径效率:实际行驶距离 / 理论最优距离
- API 违规率:无效工具调用数 / 总工具调用数
- 完成订单数
- 总行驶距离
- 换电次数
- 平均每单利润
- 超时订单数
- 平均超时时长
- 订单类型分布
# Silicon Rider Bench - 评测报告
## 基本信息
- Level: 1
- Seed: 67890
- Duration: 24:00:00
- Model: anthropic/claude-3.5-sonnet
## 核心指标
- **总利润**: ¥1,234.50
- **完成订单数**: 87
- **准时率**: 82.8% (72/87)
- **路径效率**: 1.15
- **API 违规率**: 2.3% (12/520)
## 详细统计
- 总行驶距离: 145.6 km
- 换电次数: 4
- 平均每单利润: ¥14.19
- 超时订单数: 15
- 平均超时时长: 8.3 分钟silicon-rider-bench/
├── src/
│ ├── core/ # 核心模块
│ │ ├── agent-state.ts # 智能体状态管理
│ │ ├── game-clock.ts # 游戏时钟
│ │ ├── simulator.ts # 模拟器核心
│ │ ├── order-generator.ts # 订单生成器
│ │ ├── fee-calculator.ts # 配送费计算
│ │ ├── penalty-calculator.ts # 惩罚计算
│ │ └── movement-calculator.ts # 移动计算
│ ├── world/ # 地图和世界管理
│ │ ├── map-generator.ts # 地图生成器
│ │ ├── congestion-manager.ts # 拥堵管理
│ │ └── pathfinder.ts # 路径查找
│ ├── tools/ # 工具调用模块
│ │ ├── tool-registry.ts # 工具注册
│ │ ├── tool-executor.ts # 工具执行器
│ │ ├── query-tools.ts # 查询工具
│ │ └── action-tools.ts # 行动工具
│ ├── client/ # AI 客户端
│ │ └── ai-client.ts # OpenAI SDK 集成
│ ├── cli/ # 命令行参数解析
│ │ └── args-parser.ts # 参数解析器
│ ├── visualization/ # 终端可视化模块
│ │ └── terminal-display.ts # 终端显示
│ ├── web/ # Web 可视化模块
│ │ ├── web-server.ts # Web 服务器
│ │ ├── web-visualization.ts # Web 可视化适配器
│ │ ├── types.ts # WebSocket 消息类型
│ │ └── public/ # 静态资源
│ │ ├── index.html # 主页面
│ │ ├── css/
│ │ │ └── style.css # 样式表
│ │ └── js/
│ │ ├── main.js # 主逻辑
│ │ ├── map-renderer.js # 地图渲染
│ │ ├── stats-panel.js # 统计面板
│ │ └── chat-panel.js # 对话面板
│ ├── scoring/ # 评分模块
│ │ ├── score-calculator.ts # 评分计算
│ │ └── report-generator.ts # 报告生成
│ ├── levels/ # 关卡配置
│ │ └── level-config.ts # Level 配置
│ ├── types/ # TypeScript 类型定义
│ │ └── index.ts # 类型定义
│ ├── utils/ # 工具函数
│ │ └── seeded-rng.ts # 种子随机数生成器
│ └── index.ts # 主程序入口
├── tests/ # 测试文件
│ └── integration/ # 集成测试
│ ├── level0.1.test.ts
│ └── level1.test.ts
├── .env.example # 环境变量示例
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
└── vitest.config.ts # 测试配置
# 运行所有测试
npm test
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:coverage# 编译 TypeScript
npm run build
# 运行编译后的代码
node dist/index.js --level 1欢迎提交 Issue 和 Pull Request!
MIT
感谢所有为这个项目做出贡献的开发者。