CommonRouterBench
收藏CommonRouterBench 数据集概述
数据集简介
CommonRouterBench 为高消耗、多轮次场景(如多步智能体、长上下文 RAG、编码循环)提供逐步骤的大语言模型路由黄金标签。该数据集通过分析成功执行轨迹并进行顺序降级搜索来生成标签,旨在找到在满足严格任务检查前提下最经济的能力层级,而非依赖有缺陷的 LLM-as-judge 评分或单次提问。
核心用途
- 评估路由器:用于评估在高消耗、多轮次场景下构建的路由器的性能。
- 训练层级预测器:使用真实的对话前缀(对话内容、工具输出、差异对比)来训练层级预测模型。
数据内容与结构
数据文件
data/question_bank.jsonl:包含所有路由步骤记录的单文件。data/manifest.json:包含各数据源行数统计和模式元数据。
数据记录字段
每条记录至少包含以下字段:id、benchmark、scenario、instance_id、step_index、total_steps、messages、target_tier、target_tier_id。
能力层级定义
数据集的监督标签仅基于能力层级,使用英文标签和数字ID。
| 目标层级 (字符串) | 目标层级ID (整数) | 层级 (英文描述) |
|---|---|---|
low |
0 | Low |
mid |
1 | Medium |
mid_high |
2 | Medium-high |
high |
3 | High |
数据分布统计
数据集当前版本包含 970 条路由步骤记录。
按基准数据集 (benchmark) 分布
| 基准数据集 | 记录数 | 占比 |
|---|---|---|
swebench |
336 | 34.6% |
bfcl |
248 | 25.6% |
mtrag |
193 | 19.9% |
qmsum |
145 | 14.9% |
pinchbench |
48 | 4.9% |
| 总计 | 970 | 100% |
黄金层级 (target_tier) 整体分布
| 目标层级 | 目标层级ID | 记录数 | 占比 |
|---|---|---|---|
low |
0 | 689 | 71.0% |
mid |
1 | 62 | 6.4% |
mid_high |
2 | 49 | 5.1% |
high |
3 | 170 | 17.5% |
| 总计 | — | 970 | 100% |
各基准数据集内的黄金层级分布(记录数)
| 基准数据集 | 记录数 | low |
mid |
mid_high |
high |
|---|---|---|---|---|---|
bfcl |
248 | 239 | 8 | 1 | 0 |
mtrag |
193 | 183 | 8 | 1 | 1 |
pinchbench |
48 | 41 | 3 | 3 | 1 |
qmsum |
145 | 132 | 10 | 3 | 0 |
swebench |
336 | 94 | 33 | 41 | 168 |
名义定价(美元/每百万令牌)
定价常量定义在 main.pricing 模块中。
输出(补全)令牌
公开 target_tier |
美元 / 每百万输出令牌 |
|---|---|
low |
0.5 |
mid |
2.0 |
mid_high |
5.0 |
high |
25.0 |
输入、缓存读取和缓存写入(仅用于 router_accounting)
公开 target_tier |
美元 / 每百万输入 | 美元 / 每百万缓存读取 | 美元 / 每百万缓存写入 |
|---|---|---|---|
low |
0.26 | 0.13 | 0.26 |
mid |
0.30 | 0.059 | 0.30 |
mid_high |
0.50 | 0.05 | 0.08333 |
high |
5.0 | 0.50 | 6.25 |
评估指标与规则
评估由 main.eval 模块计算。
核心指标
tier_match_accuracy:在可评估行(无error)中,预测层级ID与黄金层级ID完全匹配的比例(步骤级别)。valid_response_rate:获得可用预测(无记录error)的行比例。- 通过 (
passed):当pred_tier_id >= gold_tier_id(预测层级能力不低于黄金层级)。有error的行不计为通过(步骤级别)。 pass_rate:所有行中通过的比例(步骤级别语义)。cost_savings_score(旧称section_11):与始终使用high层级(ID 3)的基线相比,在名义成本(仅输出令牌,固定补全长度)下的节省百分比。
路由器核算指标 (router_accounting)
在 compute_router_accounting_metrics 中计算,使用更丰富的每步骤成本模型(输入+缓存读取+缓存写入+输出)和轨迹级别的通过/失败判定。
total_trajectories:评分行列表中不同instance_id组的数量。passed_trajectories/exact_match_trajectories:轨迹级别通过 / 所有步骤完全匹配的数量。evaluable_step_count:无error且具有整数层级ID的步骤数(计入D_usd/N_usd)。skipped_step_count:带有error的行数。D_usd:在可评估步骤上Σ (baseline_cost − gold_cost)的总和。N_usd:根据轨迹通过或失败的规则计算(见数据集详情)。pass_rate_percent:100 × passed_trajectories / total_trajectories。exact_match_rate_percent:100 × exact_match_trajectories / total_trajectories。accounting_savings_score_percent:当D_usd > 0时,为100 × N_usd / D_usd。overall_score_percent:pass_rate_percent、exact_match_rate_percent、accounting_savings_score_percent的平均值。
使用方式
快速开始
-
安装包: bash pip install CommonRouterBench
(注意:PyPI 分发名为
CommonRouterBench,但在代码中应import main。) -
评估路由器: python from main.eval import FunctionPredictor, run_question_bank_eval oracle = FunctionPredictor(lambda row: row["target_tier_id"]) summary = run_question_bank_eval(oracle, n=20, seed=1) print(summary["router_accounting"])
数据访问 API
python from main import iter_question_bank, iter_routing_supervision
遍历整个问题库
for row in iter_question_bank(): ...
仅遍历特定基准数据集(如 "swebench")的行
for row in iter_routing_supervision("swebench"): messages = row["messages"] tier = row["target_tier"] tier_id = row["target_tier_id"]
预测器类型
FunctionPredictor:包装任何callable(row: dict) -> int函数(启发式方法、sklearnpredict等)。LlmDigitClassifierPredictor:围绕OpenAICompatRouterClassifier和question_bank_messages_to_classifier_prompt的可选 OpenAI 兼容聊天包装器。OpenAICompatRouterClassifier:用于通过 OpenAI 兼容 HTTP API 调用聊天模型的参考集成。模型回复必须是单个字符0–3。




