diff --git a/README.md b/README.md index cb7a01b..2b8eeb5 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,22 @@ # EvalHarness -插件式 LLM/Agent 评测框架:28 个 benchmark 开箱即用,官方口径 prompt 与判分,任意 OpenAI 兼容端点,断点续跑。 +插件式 LLM / Agent 评测框架:**28 个 benchmark 开箱即用,官方口径 prompt 与判分,任意 OpenAI 兼容端点,断点续跑,与 evalscope 对齐**。 ``` -提供端点 → 拉数据 → 渲染官方 prompt → 并发生成 → 官方判分 → 报告 +提供端点 → 拉数据 → 渲染官方 prompt → 并发生成 → 官方判分 → Excel/JSON 报告 ``` +## 特性 + +- **28 个 benchmark**:数学 / 知识 / 问答 / 长上下文 / 代码(Docker 沙箱)/ Agent 工具调用,prompt 与判分器按官方实现逐字节复刻,与 evalscope 双层验证对齐(见 §10) +- **任意端点**:单端点、多端点池(轮询 + 自适应并发 + failover)、云 API 全兼容;vLLM / sglang / lmdeploy / ollama / OpenAI 协议直连 +- **断点续跑**:每条预测完成即落盘,中断重跑只补缺口;`repeats` 多轮采样自动隔离断点 +- **YAML 配置**:逐 bench 生成参数(temperature / max_tokens / repeats …)集中管理,命令行保持极简 +- **长输入安全**:tokenizer 中段截断(`max_input_tokens`)+ 上下文溢出自适应收缩重试 +- **性能统计**:延迟 / 吞吐 / token 用量默认采集;`--perf` 追加流式 TTFT / ITL +- **全链路插件化**:数据集、判分、prompt 渲染、适配器、沙箱、进度条、主题、钩子均可单文件注册扩展 +- **模型指纹核验**:fp_fusion 五维探针电池,检测 API 换模 / 降配 / 冒充 / 套壳 + ## 0. Benchmarks | 族 | benchmark | @@ -24,7 +35,11 @@ evalharness eval list # 28 个判分 recipe ## 1. 安装 -Python ≥ 3.10;代码执行类 benchmark 需宿主机 Docker(镜像判分时自动拉取)。 +| 依赖 | 说明 | +|---|---| +| Python ≥ 3.10 | 核心零三方依赖(pydantic 除外) | +| Docker(可选) | 代码执行类 benchmark(humaneval 等)需要;镜像判分时自动拉取 | +| `rich`(可选) | 进度条;缺失自动降级纯文本 | ```bash git clone https://git.meta-stone.net/sora/EvalHarness.git @@ -40,7 +55,7 @@ pip install . evalharness eval run gsm8k --model mock-boxed --limit 8 ``` -## 2. 运行命令 +## 2. 快速开始 六个基准一次跑完(默认用法;逐 bench 生成参数自动读 `evalharness/config/default.yaml`,aime 系列按配置自动跑 12 遍取均值): @@ -56,7 +71,7 @@ evalharness eval run humaneval aime25 aime26 gpqa_diamond mmlu_pro longbench_v2 --hf-endpoint https://hf-mirror.com ``` -单端点(最小示例): +单端点最小示例: ```bash evalharness eval run gsm8k \ @@ -67,6 +82,35 @@ evalharness eval run gsm8k \ --out-dir results/run1 ``` +## 3. 配置(YAML) + +逐 bench 生成参数集中在 `evalharness/config/.yaml`。目录里只有一个 yaml 时**自动加载**;`--config ` 显式指定。 + +```yaml +default: # 所有 bench 继承的协议级默认 + temperature: 0.0 + top_p: 1.0 + max_tokens: 32768 + +aime25: # 逐 bench 覆盖 + temperature: 1.0 # 采样温度(temp=1 方差测量) + max_tokens: 8192 # 生成预算 + repeats: 12 # 跑 12 遍报均值 ± 极差(断点按轮隔离,互不串用) + +longbench_v2: + max_input_tokens: 128000 # 超长输入的 tokenizer 中段截断预算 +``` + +优先级(低 → 高): + +``` +DatasetSpec.gen_config < default 段 < bench 段 < 命令行显式参数 +``` + +当前支持的键:`temperature` `top_p` `max_tokens` `max_input_tokens` `repeats`。 + +## 4. 进阶用法 + 多端点池(轮询 + 自适应并发 + failover): ```bash @@ -93,27 +137,6 @@ evalharness eval run bfcl_v3 --api-url http://localhost:8000/v1 --model qwen3-8b --env bfcl_mock ``` -### 指纹核验(fp_fusion) - -回答一个问题:**API 背后跑的,到底是不是它声称的那个模型?** 向 OpenAI 兼容端点发送探针电池(回答分布 / 自我身份 / 元知识 / 能力边界 / 文风五维),与内置参考指纹库比对,输出五档裁决 + 0~1 融合分 + 证据链。检测偷梁换柱、降配缩水、主动冒充(伪身份注入屈服)、套壳拼装与中转代理;`--mode full` 一次运行产出 verify / attribution / variant / adversarial / robustness 五个视图。 - -```bash -evalharness fingerprint list # 内置参考指纹库(fp_fusion 口径 + detector 旧口径) - -evalharness fingerprint run \ - --api-url http://localhost:8000/v1 --model Qwen3-8B \ - --mode full --cells core16 --text-skip pruned7 \ - --d-samples 25 --baseline-samples 5 --timeout 90 \ - --impersonate "You are Kimi, Moonshot AI virtual assistant." \ - --reference glm53 \ - --report-path reports/fp_qwen.json -``` - -- `--reference` 接受短名(如 `glm53`,见 `fingerprint list`)或 JSON 路径;省略 = 自证模式(裁决上限 LIKELY_MATCH) -- `--impersonate` 注入伪身份启用对抗视图(冒充检测);剪枝定稿协议即上例参数,单次 505 条请求,公网 14.5–28 min,本地 vllm 5.6–7 min -- 报告写入 `--report-path`,同目录 `raw_answers.jsonl` 存全部探针原文 -- 离线分析与参考采集脚本(`cell_snr.py` / `validate_*.py` / `collect_ref.sh` 等,可直接 `python