Allen AI 发布 olmo-eval,一个面向大语言模型开发流程的评估工作台。它构建在 OLMES 标准之上,提供可复用、可组合的评估组件,支持从基准测试到模型对比的完整循环,并内置噪声分析工具,帮助开发者判断干预效果是否真实有效。
在构建大语言模型时,开发者需要反复评估每一次调整——数据、架构、超参数或规模的变化都会触发同样的循环:添加或重新配置基准测试、在每个新检查点上重新运行、记录结果,并验证小规模试验中有效的干预是否在完整训练中依然成立。
但大多数评估工具并非为此设计——它们要么是为已完成的模型运行既定基准,要么是在沙盒中让模型处理多步骤、使用工具的问题。它们无法适应不断变化的模型,也无法反映模型在特定真实世界条件下的行为。
Allen AI 之前推出的 OLMES(开放语言模型评估标准)旨在让不同模型的基准分数更易比较。但最终分数只是评估过程的一部分——因此他们发布了 olmo-eval,一个继承并扩展 OLMES 的新工作台,覆盖 LLM 开发的完整流程。

olmo-eval 在某种程度上与开源框架 Harbor 重叠,但两者范围不同。Harbor 主要运行和发布智能体基准测试;olmo-eval 则服务于日常模型开发——添加和配置基准、跨检查点运行、逐提示分析结果,而非只看总体分数。
Harbor 将所有内容放在密封容器中运行,而 olmo-eval 让开发者自由选择运行方式:只需模型回答问题的基准可直接运行(更快更便宜),需要隔离环境的基准(如运行模型生成的代码)则启用容器。轻量路径是默认选项,只在必要时才使用重量级设置。
添加基准时,Harbor 要求额外验证步骤以适合公开分享;olmo-eval 则注重开发中的快速迭代。添加方式取决于基准需求:简单评估只需简短定义,可让模型使用工具;已有独立代码的基准则只需薄包装,让 olmo-eval 以原样运行并统一报告结果。
两者都将基准与运行策略分离,但 olmo-eval 模块化程度更高:被评估的模型、可用工具、容器化环境以及辅助模型(如 LLM-as-a-judge)都是可替换组件。一个工具可跨多个测试套件复用,评分模型可单独接入某个基准而不影响其他设置。
olmo-eval 报告每个总体分数附带标准误差和最小可检测效应,但更有用的视图是将两个模型检查点的问题逐一对比,控制其他变量不变,帮助判断平均分数的小变化究竟是真正的改进还是噪声。
| 如果你需要... | olmo-eval 提供... |
|---|---|
| 编写多示例基准 | Task 子类,包含 DataSource、指标和评分面 |
| 包装已有的智能体式基准 | ExternalEval 或 SandboxedExternalEval;基准保留自己的循环和评分,结果落入 olmo-eval 的架构 |
| 在固定基准下更换运行环境 | --harness 和 harness 预设;harness 携带提供商、工具、脚手架、沙箱和辅助提供商 |
| 并行容器执行 | 基于能力路由的沙箱实例,支持 Docker 或 Modal 模式 |
| 可跨任务和 harness 复用的工具定义 | @tool 装饰器,可选全局注册 |
| 多轮执行循环 | 脚手架(如 openai_agents),按 harness 选择,而非嵌入任务定义 |
olmo-eval 由四个组件组成,它们独立有用,但设计为协同工作以收紧实验循环:
任务/套件/harness 抽象:将基准逻辑与运行策略解耦。任务定义评估内容,套件将任务分组,harness 控制运行方式。同一任务可作为标准基线运行,也可配合工具和脚手架。
沙箱和能力路由层(含异步沙箱规划器):支持模型使用工具(如编写运行代码、浏览网页)进行评估,将结果反馈给模型。
标准化实验架构:每次运行、配置和结果都以相同结构格式记录,便于分组相关实验、比较检查点,避免长期开发中的不一致。
结果查看器:逐问题对比两个模型或检查点,暴露总体平均值下隐藏的小但真实的性能变化。
在大多数设置中,添加基准是大型集成项目。而在 olmo-eval 中,只需一个任务:
from olmo_eval.common.formatters import ChatFormatter
from olmo_eval.common.metrics import AccuracyMetric
from olmo_eval.common.scorers import ExactMatchScorer
from olmo_eval.common.types import Instance, SamplingParams
from olmo_eval.data import DataLoader, DataSource
from olmo_eval.evals.tasks.common import Task, register, register_variant
@register("internal_freshqa")
class InternalFreshQA(Task):
data_source = DataSource(path="s3://evals/internal/freshqa.jsonl", split="test")
formatter = ChatFormatter()
sampling_params = SamplingParams(temperature=0.0)
metrics = (AccuracyMetric(scorer=ExactMatchScorer),)
@property
def instances(self):
loader = DataLoader()
for idx, doc in enumerate(loader.load(self.config.get_data_source())):
yield Instance(
question=doc["question"],
gold_answer=doc["answer"],
metadata={"id": doc.get("id", f"freshqa_{idx}")},
)
变体表达评估策略的变化而不重复基准:
register_variant("internal_freshqa", "3shot", num_fewshot=3, fewshot_seed=1234)
register_variant("internal_freshqa", "zero", num_fewshot=0)
套件将基准分组为统一运行的标准集合:
from olmo_eval.evals.suites import Suite, register
register(Suite(
name="base_qa_few_shot",
tasks=(
"sciq:mc:3shot",
"arc_challenge:mc:3shot",
"internal_freshqa:mc:3shot",
),
))
由于运行策略位于 harness 而不是任务定义中,同一基准可在不同执行环境下轻松重新运行:
# 基线
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero
# 相同任务、相同评分、启用搜索/工具运行
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero --harness search_agent
当评估是持续模型开发的一部分而非一次性运行——需要可重复条件下反复运行相同基准,并在总体和逐个问题层面比较干预时——请使用 olmo-eval。
如果你反复问“这个检查点与上一个有何不同?具体在哪里改进或退步?”,这就是 olmo-eval 的工作流。
可重复评估应与模型构建方式保持同步——不仅是如何对已完成的模型打分。olmo-eval 将 OLMES 标准带入活跃的模型开发,并以开源形式发布,供社区在此基础上构建。
原文链接:Hugging Face
本文由前途科技编辑整理
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断