评估框架
utu/eval/ 模块提供了一个标准化且可扩展的智能体基准测试框架。它被设计为模块化,便于添加新的数据集和评估方法。整个工作流程由 BaseBenchmark 编排,它将数据管理、基准特定逻辑和被测试的智能体联系在一起。
以下是框架的三个核心组件:
1. 数据管理 (DBDataManager)
DBDataManager 是评估框架的持久层。它负责加载数据集并跟踪评估过程中每个样本的状态。
- 数据库后端:它使用数据库(默认为 SQLite)来存储所有评估数据。每个样本都存储为
EvaluationSample记录。 - 实验跟踪:所有样本都与一个
exp_id(实验 ID)相关联。这允许轻松跟踪和恢复实验。如果你使用现有的exp_id运行评估,系统将从上次停止的地方继续。 - 有状态跟踪:每个
EvaluationSample都有一个stage字段(init、rollout、judged),用于跟踪其在流水线中的进度。这确保评估的每个步骤只处理相关的样本。
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计算和记录最终指标(例如,准确率)。
这个结构化的流水线确保每个评估都是一致的、自动化的和有弹性的,因为它可以在任何阶段停止和恢复。