模型性能评估
为什么要评估?
评估使路由变得数据驱动。通过测量 MMLU-Pro 上的每类别准确率(并使用 ARC 进行快速健全性检查),您可以:
- 为每个决策选择正确的模型并在 decisions.modelRefs 中配置它们
- 根据整体性能选择合理的 default_model
- 决定 CoT 提示是否值得延迟/成本权衡
- 在模型、提示词或参数更改时捕获回归
- 保持更改可复现和可审计,用于 CI 和发布
简而言之,评估将轶事转化为可测量的信号,从而提高路由器的质量、成本效率和可靠性。
本指南记录了通过 vLLM 兼容的 OpenAI 端点评估模型(MMLU-Pro 和 ARC Challenge)、生成基于性能的路由配置以及更新配置中 categories.model_scores 的自动化工作流程。
端到端运行内容
1) 评估模型
- 每类别准确率
- ARC Challenge:整体准确率
2) 可视化结果
- 每类别准确率的柱状图/热力图

3) 生成更新的 config.yaml
- 为每个类别创建带有 modelRefs 的决策
- 将 default_model 设置为最佳平均表现者
- 保留或应用决策级推理设置
1.前置条件
-
运行中的 vLLM 兼容 OpenAI 端点,服务您的模型
- 端点 URL 如 http://localhost:8000/v1
- 如果端点需要,可选提供 API 密钥
# 终端 1
vllm serve microsoft/phi-4 --port 11434 --served_model_name phi4
# 终端 2
vllm serve Qwen/Qwen3-0.6B --port 11435 --served_model_name qwen3-0.6B -
评估脚本的 Python 包:
- 从仓库根目录:requirements.txt 中的 matplotlib
- 从
/src/training/model_eval:requirements.txt
# 本指南中我们将在此目录工作
cd /src/training/model_eval
pip install -r requirements.txt
⚠️ 关键配置要求:
vLLM 命令中的 --served-model-name 参数必须与 config/config.yaml 中的模型名称完全匹配:
# config/config.yaml 必须匹配上面的 --served-model-name 值
vllm_endpoints:
- name: "endpoint1"
address: "127.0.0.1"
port: 11434
- name: "endpoint2"
address: "127.0.0.1"
port: 11435
model_config:
"phi4": # ✅ 匹配 --served_model_name phi4
# ... 配置
"qwen3-0.6B": # ✅ 匹配 --served_model_name qwen3-0.6B
# ... 配置
可选提示:
- 确保您的
config/config.yaml包含vllm_endpoints[].models下的部署模型名称,以及model_config下的任何定价/策略,如果您计划直接使用生成的配置。
2.在 MMLU-Pro 上评估
示例使用模式
# 评估几个模型,每个类别少量样本,直接提示
python mmlu_pro_vllm_eval.py \
--endpoint http://localhost:11434/v1 \
--models phi4 \
--samples-per-category 10
python mmlu_pro_vllm_eval.py \
--endpoint http://localhost:11435/v1 \
--models qwen3-0.6B \
--samples-per-category 10
# 使用 CoT 评估(结果保存在 *_cot 下)
python mmlu_pro_vllm_eval.py \
--endpoint http://localhost:11435/v1 \
--models qwen3-0.6B \
--samples-per-category 10
--use-cot
# 如果您已正确设置Semantic Router ,可以一次性运行
python mmlu_pro_vllm_eval.py \
--endpoint http://localhost:8801/v1 \
--models qwen3-0.6B, phi4 \
--samples-per-category
# --use-cot # 如果使用 CoT 取消此行注释
关键参数
- --endpoint:vLLM OpenAI URL(默认 http://localhost:8000/v1)
- --models:空格分隔的列表或单个逗号分隔的字符串;如果省略,脚本从端点查询 /models
- --categories:将评估限制在特定类别;如果省略,使用数据集中的所有类别
- --samples-per-category:限制每个类别的问题数(对快速运行有用)
- --use-cot:启用思维链提示变体;结果保存在单独的后缀子文件夹中(_cot vs_direct)
- --concurrent-requests:吞吐量并发数
- --output-dir:结果保存位置(默认 results)
- --max-tokens、--temperature、--seed:生成和可重复性参数
每个模型的输出
- results/Model_Name_(direct|cot)/
- detailed_results.csv:每个问题一行,包含 is_correct 和 category
- analysis.json:overall_accuracy、category_accuracy 映射、avg_response_time、counts
- summary.json:精简指标
- mmlu_pro_vllm_eval.txt:提示词和答案日志(调试/检查)
注意
- 模型命名:斜杠被替换为下划线作为文件夹名称;例如,gemma3:27b -> gemma3:27b_direct 目录。
- 类别准确率仅在成功查询上计算;失败请求被排除。
3.在 ARC Challenge 上评估(可选,整体健全性检查)
参见脚本:arc_challenge_vllm_eval.py
示例使用模式
python arc_challenge_vllm_eval.py \
--endpoint http://localhost:8801/v1\
--models qwen3-0.6B,phi4
--output-dir arc_results
关键参数
- --samples:要采样的总问题数(默认 20);在我们的脚本中 ARC 不按类别分类
- 其他参数与 MMLU-Pro 脚本一致