ELBench-live / docs /ARCHITECTURE.zh-CN.md
adelevett's picture
Deploy ELBench-live dashboard
5db30ac verified
|
Raw History Blame Contribute Delete
7.62 kB

A newer version of the Gradio SDK is available: 6.32.0

Upgrade

ELBench 架构说明

本文档描述 ELBench 的工程设计:注册表、provider 抽象、执行模型,以及如何扩展框架。基准与排行榜的总览见顶层 README。

ELBench 不是临时脚本,而是按正式工程维护的评测系统。当前仓库在一个统一框架下承载四个模块:

  • 安全可信 / Safety & Trustworthiness
  • 高阶育人 / High-Level Educational Cultivation
  • 基本教育 / Basic Education
  • 通用模型 / General Capability

基本教育 已作为 ELBench 的正式模块接入。它的 benchmark 数据放在 data/benchmark_root/基本教育/,多轮执行由项目内部的 basic_education_runtime 模块负责,代码位于 src/elbench/basic_education_runtime/。这个内部运行时来源于 ELMES 项目,但现在已经按 ELBench 的内部模块方式接管和维护。

设计原则

  • 评测流程由注册表和配置驱动,不在主流程里写死文件逻辑
  • 模型调用统一走 provider adapter,不让厂商差异污染主 runner
  • 客观题优先规则判分
  • 主观和开放式任务采用 LLM-as-a-Judge
  • 稳定的机器可读输出、日志、检查点与汇总
  • 中断后支持续跑
  • 可配置并发,默认全局上限 100

当前实际接入的内容

已注册的 benchmark 文件

configs/file_registry.yaml 当前解析以下文件:

  • 安全拒答.jsonl
  • 安全引导.jsonl
  • 安全回答.jsonl
  • SATAs.xlsx
  • adversarial_prompts.xlsx
  • 高阶育人-edu.jsonl
  • 高阶育人-omni.jsonl
  • knowledge.yaml
  • question.yaml
  • cross.yaml
  • config_guided_task.yaml
  • mmlu_pro_sampled.jsonl
  • ceval_sampled.jsonl
  • ifeval_sampled.jsonl
  • math_500_sampled.jsonl
  • aime24_sampled.jsonl
  • aime25.jsonl
  • aime26.jsonl
  • gsm8k_sampled.jsonl

文件只有在注册之后才会被视为有效的 benchmark 输入。没有出现在 configs/file_registry.yaml 中的数据文件,不属于可运行基准的一部分。

当前判分策略

客观题用规则或参考答案匹配:

  • SATAs.xlsx
  • 高阶育人-omni.jsonl
  • mmlu_pro_sampled.jsonl
  • ceval_sampled.jsonl
  • ifeval_sampled.jsonl
  • math_500_sampled.jsonl
  • aime24_sampled.jsonl
  • aime25.jsonl
  • aime26.jsonl
  • gsm8k_sampled.jsonl

主观或开放式任务用 LLM-as-a-Judge:

  • 安全拒答.jsonl
  • 安全引导.jsonl
  • 安全回答.jsonl
  • adversarial_prompts.xlsx
  • 高阶育人-edu.jsonl

仓库把外部 provider 接入设计为可插拔。内置 mock.default 和 mock.judge,可在没有真实 API 的情况下本地验证完整流水线。

仓库结构

.
├── configs/
│   ├── app.yaml
│   ├── basic_education.yaml
│   ├── field_mappings.yaml
│   ├── file_registry.yaml
│   ├── judges.yaml
│   ├── models.yaml
│   ├── module_registry.yaml
│   └── providers.yaml
├── data/
│   └── benchmark_root/
│       ├── 安全可信/
│       ├── 高阶育人/
│       ├── 基本教育/
│       └── 通用/
├── docs/
│   └── TEAM_MAINTENANCE_GUIDE.zh-CN.md
├── results/
├── scripts/
│   └── run_benchmark.py
├── src/
│   └── elbench/
│       ├── basic_education_runtime/
│       ├── cli.py
│       ├── config/
│       ├── execution/
│       ├── judges/
│       ├── loaders/
│       ├── persistence/
│       ├── providers/
│       ├── registry/
│       ├── schemas/
│       ├── summary/
│       └── utils/
└── tests/

scripts/run_benchmark.py 刻意只是一个薄入口,真正的评测逻辑都在 src/elbench/ 下。

核心架构

注册表与 schema 适配

  • configs/file_registry.yaml 把文件映射到模块、子集、任务、loader 与规范名。
  • configs/field_mappings.yaml 把原始数据集字段映射进 ELBench 的统一内部 schema。
  • JSONL、XLSX、基本教育 YAML 输入都被规范化为同一个 Sample 结构。

统一的 sample/result schema

加载后的记录被规范化为稳定 schema,字段包括:

  • sample_id
  • source_file
  • module
  • subset
  • task
  • dimension
  • prompt
  • reference
  • metadata

执行输出包括:

  • provider_name
  • model_id
  • model_name
  • model_response
  • judge_result
  • score
  • judge_reason
  • judge_metadata
  • latency_ms
  • retry_count
  • timestamp

Provider 抽象

  • ModelClient 是模型执行的统一接口。
  • 厂商 API 差异都隔离在 src/elbench/providers/ 下。
  • 一旦 adapter 存在,主 runner 不关心模型来自 OpenAI、Anthropic、Gemini 还是其他厂商。

执行、并发与恢复

runner 支持:

  • 全局并发控制
  • provider/模型级并发上限
  • 指数退避重试
  • 失败日志
  • 基于检查点的续跑
  • 原始响应持久化
  • 判分结果持久化
  • 汇总生成

configs/app.yaml 中默认全局最大并发为 100。

基本教育运行时

基本教育 与其他模块的差别只在执行方式,不在数据治理:

  • benchmark 数据仍放在 data/benchmark_root/基本教育/
  • 文件发现仍走 configs/file_registry.yaml
  • 运行时执行由 src/elbench/execution/basic_education.py 负责
  • 内部运行时实现位于 src/elbench/basic_education_runtime/

输出结构

outputs/
├── raw_responses/
├── judged_results/
├── summaries/
└── logs/

这些目录是运行时产物,刻意被 Git 忽略。整理后的排行榜与审计汇总提交在 results/ 下。

配置面

configs/models.yaml

具体的被测模型与裁判模型实例,含超时、重试、限速与 provider 参数。

configs/providers.yaml

provider adapter 注册表与默认 provider 能力。当前内置 adapter:

  • mock
  • openai_compatible

configs/judges.yaml

任务到裁判的路由:

  • rule
  • llm

configs/basic_education.yaml

基本教育内部运行时的场景级设置。该文件不替代注册表,而是对其补充。

扩展 ELBench

新增 provider

  1. 在 src/elbench/providers/ 下实现 adapter。
  2. 在 configs/providers.yaml 中注册。
  3. 在 configs/models.yaml 中加入具体模型。

新增 benchmark 文件

  1. 把数据文件放到 data/benchmark_root/ 下。
  2. 在 configs/file_registry.yaml 中注册。
  3. 在 configs/field_mappings.yaml 中加字段映射。
  4. 在 configs/judges.yaml 中路由判分。
  5. 新增或复用测试。

新增未来模块

ELBench 已为更多模块预留空间,预期路径仍是:

  1. 加模块注册
  2. 加文件注册
  3. 加字段映射
  4. 加裁判路由
  5. 仅当配置无法表达行为时才加任务专属逻辑

不需要重写主 runner。

维护

权威的团队维护指南是 docs/TEAM_MAINTENANCE_GUIDE.zh-CN.md,它说明每个维护目录的用途、哪些路径仅运行时、以及哪些该提交哪些不该提交。

状态

已实现:

  • 配置系统
  • 文件注册表
  • JSONL/XLSX/YAML loader
  • 统一 sample/result schema
  • provider 抽象
  • 并发 runner
  • 重试与检查点续跑
  • 原始/判分/汇总/日志输出
  • 客观题规则裁判
  • 主观题 LLM-as-a-Judge 执行路径
  • 基于内部运行时模块的基本教育桥接

仍刻意未完成:

  • 面向每个外部厂商的生产级 adapter
  • 最终化的主观裁判 rubric 与 prompt
  • 超出当前已注册文件的完整未来模块接入