跳转至

评估框架

utu/eval/ 模块提供了一个标准化且可扩展的智能体基准测试框架。它被设计为模块化,便于添加新的数据集和评估方法。整个工作流程由 BaseBenchmark 编排,它将数据管理、基准特定逻辑和被测试的智能体联系在一起。

以下是框架的三个核心组件:

1. 数据管理 (DBDataManager)

DBDataManager 是评估框架的持久层。它负责加载数据集并跟踪评估过程中每个样本的状态。

  • 数据库后端:它使用数据库(默认为 SQLite)来存储所有评估数据。每个样本都存储为 EvaluationSample 记录。
  • 实验跟踪:所有样本都与一个 exp_id(实验 ID)相关联。这允许轻松跟踪和恢复实验。如果你使用现有的 exp_id 运行评估,系统将从上次停止的地方继续。
  • 有状态跟踪:每个 EvaluationSample 都有一个 stage 字段(initrolloutjudged),用于跟踪其在流水线中的进度。这确保评估的每个步骤只处理相关的样本。

2. 数据集标准化 (Processer)

Processer 处理特定于某个基准(例如 GAIA、BrowseComp)的所有逻辑。这种设计将通用评估流程与每个数据集的细节清晰地分开。

  • BaseProcesser 接口:这个抽象类定义了所有处理器的契约,它们必须实现:
    • preprocess_one():为智能体准备原始数据样本。这可能涉及重新格式化问题、添加特定指令或附加文件路径。
    • judge_one():评估智能体对单个样本的响应。
    • calculate_metrics():计算基准的最终汇总统计数据。
  • 评判策略:框架提供了不同的基础实现来进行评判:
    • BaseLLMJudgeProcesser:使用强大的 LLM 作为评判者,由专门的提示模板指导。这适用于复杂、开放性的问题。
    • BaseMatchProcesser:使用基于规则的方法(例如,精确的字符串或数字匹配)进行评判。这更快,更适合有单一精确答案的问题。
  • PROCESSER_FACTORY:一个自动发现并注册所有可用处理器的工厂。BaseBenchmark 使用这个工厂根据样本的 source 字段动态选择正确的处理器。

3. 标准化测试流程 (BaseBenchmark)

BaseBenchmark 是驱动整个评估流水线从开始到结束的主要编排者。它提供了一个标准化的四阶段流程。

  • preprocess:从 DBDataManager 加载所有初始样本,并使用适当的 Processer 为智能体准备它们。
  • rollout:在所有预处理的样本上运行配置的智能体。智能体的响应、轨迹和其他元数据会保存回数据库中的每个样本。
  • judge:从 rollout 阶段获取已完成的样本,并使用 Processer 评估智能体的响应是否正确。
  • stat:收集所有已评判的样本,按基准分组,并使用 Processer 计算和记录最终指标(例如,准确率)。

这个结构化的流水线确保每个评估都是一致的、自动化的和有弹性的,因为它可以在任何阶段停止和恢复。