Hermes Agent性能基准测试框架:设计与实现
Hermes Agent性能基准测试框架设计与实现Hermes Agent性能基准测试框架是一个强大的评估工具专为测试和评估智能代理在终端环境中的性能而设计。该框架基于Terminal-Bench 2.0评估环境能够对代理在各种挑战性终端任务上的表现进行全面评估。框架概述核心功能与设计理念Hermes Agent性能基准测试框架的核心目标是提供一个标准化、可重复的评估流程用于衡量智能代理在终端环境中的任务完成能力。该框架采用了模块化设计主要包含以下关键组件评估环境配置通过TerminalBench2EvalConfig类管理评估过程中的各种参数包括数据集名称、测试超时时间、任务过滤条件等。任务执行引擎负责加载任务数据集、解析任务定义、执行代理交互过程并验证任务完成情况。结果收集与分析记录每个任务的执行结果计算通过率等关键指标并生成详细的评估报告。该框架的设计遵循了以下原则隔离性每个任务在独立的Docker容器中执行确保任务之间互不干扰。可重复性通过标准化的环境配置和任务定义确保评估结果的一致性和可重复性。可扩展性支持添加新的任务类型和评估指标便于框架的持续扩展。快速上手环境搭建与基础配置要开始使用Hermes Agent性能基准测试框架首先需要搭建相应的环境并进行基础配置。环境要求Python 3.8Docker必要的Python依赖包详见项目根目录下的requirements.txt安装步骤克隆项目仓库git clone https://gitcode.com/GitHub_Trending/he/hermes-agent cd hermes-agent安装依赖pip install -r requirements.txt配置环境变量 创建.env文件添加必要的API密钥和配置信息例如OPENROUTER_API_KEYyour_api_key_here基础配置框架的核心配置文件位于environments/benchmarks/terminalbench_2/default.yaml可以根据需要调整以下关键参数dataset_name指定要使用的评估数据集默认为NousResearch/terminal-bench-2test_timeout测试执行的超时时间秒默认为180秒task_timeout每个任务的总超时时间秒默认为1800秒30分钟max_agent_turns代理最大交互轮次默认为60轮核心组件详解评估流程与实现原理数据集加载与任务过滤框架使用HuggingFace Datasets库加载Terminal-Bench 2.0数据集。在setup方法中数据集被加载并应用任务过滤async def setup(self): Load the Terminal-Bench 2.0 dataset from HuggingFace. from datasets import load_dataset # Auto-set terminal_lifetime to task_timeout 120s lifetime self.config.task_timeout 120 self.config.terminal_lifetime lifetime os.environ[TERMINAL_LIFETIME_SECONDS] str(lifetime) print(f Terminal lifetime auto-set to {lifetime}s (task_timeout 120s)) print(fLoading TB2 dataset from: {self.config.dataset_name}) ds load_dataset(self.config.dataset_name, splittrain) # Apply task filters (comma-separated strings from CLI) tasks list(ds) if self.config.task_filter: allowed {name.strip() for name in self.config.task_filter.split(,)} tasks [t for t in tasks if t[task_name] in allowed] print(f Filtered to {len(tasks)} tasks: {sorted(allowed)})任务执行与评估流程框架的核心评估逻辑在evaluate方法中实现主要流程包括初始化任务列表和进度跟踪为每个任务创建异步评估任务执行评估并收集结果计算和展示评估指标关键代码实现如下async def evaluate(self, *args, **kwargs) - None: Run Terminal-Bench 2.0 evaluation over all tasks. start_time time.time() # 日志和进度条配置... print(f\n{*60}) print(Starting Terminal-Bench 2.0 Evaluation) print(f{*60}) print(f Dataset: {self.config.dataset_name}) print(f Total tasks: {len(self.all_eval_items)}) # 打印其他配置信息... # 创建评估任务 total_tasks len(self.all_eval_items) eval_tasks [ asyncio.ensure_future(self._eval_with_timeout(item)) for item in self.all_eval_items ] results [] passed_count 0 pbar tqdm(totaltotal_tasks, descEvaluating TB2, dynamic_ncolsTrue) try: for coro in asyncio.as_completed(eval_tasks): result await coro results.append(result) if result and result.get(passed): passed_count 1 done len(results) pct (passed_count / done * 100) if done else 0 pbar.set_postfix_str(fpass{passed_count}/{done} ({pct:.1f}%)) pbar.update(1) # 异常处理和清理...任务沙箱与环境隔离为确保评估的公平性和可重复性框架为每个任务创建独立的Docker容器环境。_resolve_task_image方法负责解析任务所需的Docker镜像def _resolve_task_image( self, item: Dict[str, Any], task_name: str ) - Tuple[str, Optional[Path]]: Resolve the Docker image for a task, with fallback to Dockerfile. docker_image item.get(docker_image, ) environment_tar item.get(environment_tar, ) # Fast path: use pre-built Docker Hub image if docker_image and not self.config.force_build: logger.info(Task %s: using pre-built image %s, task_name, docker_image) return docker_image, None # Slow path: extract Dockerfile from environment_tar and build if environment_tar: task_dir Path(tempfile.mkdtemp(prefixftb2-{task_name}-)) _extract_base64_tar(environment_tar, task_dir) dockerfile_path task_dir / Dockerfile if dockerfile_path.exists(): logger.info( Task %s: building from Dockerfile (force_build%s, docker_image%s), task_name, self.config.force_build, bool(docker_image), ) return str(dockerfile_path), task_dir # Fallback logic...测试验证机制任务完成后框架通过执行测试脚本来验证任务是否成功完成。_run_tests方法实现了这一验证过程def _run_tests( self, item: Dict[str, Any], ctx: ToolContext, task_name: str ) - float: Upload and execute the test suite in the agents sandbox, then download the verifier output locally to read the reward. tests_tar item.get(tests_tar, ) test_sh item.get(test_sh, ) if not test_sh: logger.warning(Task %s: no test_sh content, reward0, task_name) return 0.0 # 创建必要目录 ctx.terminal(mkdir -p /tests /logs/verifier) # 上传测试文件 if tests_tar: tests_temp Path(tempfile.mkdtemp(prefixftb2-tests-{task_name}-)) try: _extract_base64_tar(tests_tar, tests_temp) ctx.upload_dir(str(tests_temp), /tests) except Exception as e: logger.warning(Task %s: failed to upload test files: %s, task_name, e) finally: shutil.rmtree(tests_temp, ignore_errorsTrue) # 执行测试脚本并获取结果...高级功能并行评估与结果分析并发评估机制为提高评估效率框架支持多任务并行执行。通过asyncio和信号量控制并发数量# 在config_init方法中设置工具池大小 tool_pool_size128,结果收集与可视化评估完成后框架会生成详细的结果报告包括总体通过率、各分类任务通过率以及每个任务的具体执行情况# 计算指标 total len(valid_results) passed sum(1 for r in valid_results if r.get(passed)) overall_pass_rate passed / total if total 0 else 0.0 # 分类统计 cat_results: Dict[str, List[Dict]] defaultdict(list) for r in valid_results: cat_results[r.get(category, unknown)].append(r) # 打印总结报告 print(f\n{*60}) print(Terminal-Bench 2.0 Evaluation Results) print(f{*60}) print(fOverall Pass Rate: {overall_pass_rate:.4f} ({passed}/{total})) print(fEvaluation Time: {end_time - start_time:.1f} seconds) print(\nCategory Breakdown:) for category, cat_items in sorted(cat_results.items()): cat_passed sum(1 for r in cat_items if r.get(passed)) cat_total len(cat_items) cat_rate cat_passed / cat_total if cat_total 0 else 0.0 print(f {category}: {cat_rate:.1%} ({cat_passed}/{cat_total}))与Wandb集成框架还支持与Weights Biases (Wandb)集成实现评估结果的可视化和跟踪async def wandb_log(self, wandb_metrics: Optional[Dict] None): Log TB2-specific metrics to wandb. if wandb_metrics is None: wandb_metrics {} # Add stored eval metrics for metric_name, metric_value in self.eval_metrics: wandb_metrics[metric_name] metric_value self.eval_metrics [] await super().wandb_log(wandb_metrics)实际应用自定义任务与扩展方法创建自定义评估任务要添加自定义评估任务需要创建符合Terminal-Bench 2.0格式的任务定义。每个任务定义应包含以下关键信息task_name任务名称category任务分类instruction任务描述和要求docker_image任务所需的Docker镜像test_sh用于验证任务完成情况的测试脚本扩展评估指标框架支持扩展自定义评估指标。可以通过修改evaluate方法中的指标计算部分添加新的评估维度# 在evaluate方法中添加自定义指标计算 eval_metrics { eval/pass_rate: overall_pass_rate, eval/total_tasks: total, eval/passed_tasks: passed, eval/evaluation_time_seconds: end_time - start_time, # 添加自定义指标 eval/average_turns: average_turns, eval/success_rate_by_category: category_success_rates, }最佳实践性能优化与常见问题解决性能优化建议合理设置并发数根据系统资源情况调整tool_pool_size参数避免资源竞争。使用预构建镜像优先使用预构建的Docker镜像减少任务启动时间。优化测试脚本确保测试脚本高效执行避免不必要的延迟。常见问题解决任务超时如果多个任务出现超时可能需要增加task_timeout参数值或检查任务是否过于复杂。资源占用过高可通过减少并发任务数量或增加系统资源来解决。测试脚本失败检查测试脚本是否与任务环境兼容确保所有依赖都已正确安装。总结与展望Hermes Agent性能基准测试框架提供了一个全面、灵活的评估解决方案帮助开发者客观衡量智能代理在终端环境中的性能表现。通过标准化的评估流程和丰富的分析功能框架能够为代理的改进提供有价值的 insights。未来框架可以在以下方面进一步完善支持更多类型的评估任务和环境提供更详细的性能分析和瓶颈识别增强与其他评估工具和平台的集成通过持续优化和扩展Hermes Agent性能基准测试框架将成为智能代理开发和评估的重要工具推动代理技术的不断进步。要了解更多关于Hermes Agent的信息请参考项目文档docs/agents.md 和 docs/tools.md。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考