资讯动态

使用 AutoGenBench(agbench) 复现并扩展 HumanEval 基准测试:让多智能体在 pass/fail 反馈中反复求解代码任务

发布时间:2026/9/8 21:32:16 来源:尧图企业网站定制
使用 AutoGenBench(agbench) 复现并扩展 HumanEval 基准测试让多智能体在 pass/fail 反馈中反复求解代码任务【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen导读本文讲解如何基于当前仓库中 AutoGenBench(agbench) 提供的 HumanEval 基准场景对一个由编码智能体 代码执行智能体组成的 AutoGen AgentChat 团队进行自动化评估。与原始 HumanEval面向补全模型、一次生成即判定不同本场景使用对话式模型驱动智能体并通过执行器给出pass/fail 反馈让智能体持续重试直至通过或耗尽轮次/Token。读完本文你将掌握场景目录结构与原理、模型与环境的配置方法、任务文件的生成逻辑、agbench run/agbench tabulate两条核心命令的完整用法以及底层测试注入与终止判定机制的源码级实现。HumanEval 场景的两个关键改动仓库中的 HumanEval 场景 README 明确指出该场景是原始 HumanEval论文Evaluating Large Language Models Trained on Code的修改版本与原始基准相比存在两点本质差异使用对话模型chat model而非补全模型completion model。这要求智能体能理解多轮对话上下文而不是一次性的续写。智能体收到 pass/fail 反馈并可反复尝试。当生成代码测试失败时执行智能体把失败信息回传给编码智能体编码智能体据此修正实现循环往复直到成功通过、耗尽最大轮次或耗尽 Token。因此该场景衡量的是具备执行–反馈–修订闭环能力的智能体团队的编程能力而非单次采样生成能力。这种评测目标对应真实工程中智能体自主写代码并自我修正的应用形态。场景目录结构HumanEval 基准位于仓库的 python/packages/agbench/benchmarks/HumanEval 目录主要组成如下HumanEval/ ├── ENV.yaml # 传给任务环境Docker的临时环境变量如 OPENAI_API_KEY ├── config.yaml # 被测模型配置会被复制进每个扩展后的 Task ├── README.md # 场景说明本文主体依据 ├── Scripts/ │ ├── init_tasks.py # 下载 HumanEval 原始数据集并生成 Tasks/*.jsonl │ └── custom_tabulate.py # 面向本场景的聚合汇总入口 ├── Templates/ │ └── AgentChat/ # 智能体模板一套编码器 执行器的组队方案 │ ├── custom_code_executor.py # 定制执行器把候选代码包进单测骨架 │ ├── reasoning_model_context.py # 针对 R1 等推理模型的上下文剥离 thought │ ├── prompt.txt # 题目占位模板__PROMPT__ 将被替换 │ ├── requirements.txt # 场景运行依赖pyyaml autogen 各包 │ ├── scenario.py # 场景主脚本构建团队并运行 │ └── test.txt # 单测占位模板__TEST__ 将被替换一句话概括运行模型Scripts/init_tasks.py把原始 HumanEval 题目按 Templates/AgentChat 的占位模板展开为可独立运行的 TaskJSONL 记录agbench run在受控环境默认 Docker中逐一执行这些 Taskagbench tabulate汇总运行结果。环境准备安装 agbench 与 Dockeragbench 是 Autogen 仓库内自带的评测工具。根据 python/packages/agbench/README.md 与 benchmarks 总 README推荐从源码以可编辑模式安装git clone autogen 仓库地址 pip install -e autogen/python/packages/agbench同时在仓库根目录执行git clone后把AUTOGEN_REPO_BASE导出为指向 autogen 仓库的路径使 Docker 容器使用正确版本的 agent 代码export AUTOGEN_REPO_BASEpath_to_autogenbenchmark 强烈依赖 Docker默认每个 Task 都在全新初始化的 Docker 容器中运行镜像默认名为agbench:default不存在时自动创建以保证起始状态一致并隔离不安全代码。在 WSL 环境需要先安装 Docker Desktop并在 Settings → Resources → WSL Integration 中开启对目标发行版如 Ubuntu的集成。API Key 注入HumanEval 场景通过 ENV.yaml 声明传入任务环境的环境变量OPENAI_API_KEY: ${OPENAI_API_KEY}即把宿主机上的OPENAI_API_KEY环境变量拷贝到任务环境中。这些变量是临时的Task 结束后即被丢弃不会写入日志或输出文件从而避免 API Key 泄露。复杂值会被序列化为 JSON 字符串后传入如MODEL_CONFIG之类的字典结构会自动转成 JSON 文本。配置被测模型config.yaml进入场景目录后首先更新 config.yaml使其指向你的模型服务。默认配置指向gpt-4omodel_config: provider: autogen_ext.models.openai.OpenAIChatCompletionClient config: model: gpt-4o该文件中的model_config会在每个 Task 展开时被复制进该 Task 的config.yaml随后由 scenario.py 在运行前加载见下文源码解析。若使用本地推理模型如通过 Ollama 托管 deepseek-r1:7bconfig.yaml 中给出了注释示例#model_config: # provider: autogen_ext.models.openai.OpenAIChatCompletionClient # config: # model: deepseek-r1:7b # base_url: http://localhost:11434/v1/ # api_key: ollama # model_info: # function_calling: false # json_output: false # vision: false # family: r1注意这里通过model_info.family: r1声明模型属于 DeepSeek R1 推理系列。该字段不是摆设它直接决定场景运行时选用哪种对话上下文管理策略详见下文 reasoning_model_context.py 的解析。由于通过 OpenAI 兼容端点访问需要同时给出base_url与api_keyOllama 下通常填ollama并用model_info明确声明该后端不支持函数调用与 JSON 输出避免框架侧做错误的请求假设。初始化任务生成 Tasks/*.jsonl配置好模型后执行任务初始化脚本脚本位于 Scripts/init_tasks.pycd python/packages/agbench/benchmarks/HumanEval python Scripts/init_tasks.py从 init_tasks.py 源码可以看到它会联网下载原始 HumanEval 数据集HumanEval.jsonl.gz解压后逐行解析为 JSON 任务对象。因此该步骤需要可访问数据集托管源的网络环境若因网络原因首次下载失败或中断再次运行python Scripts/init_tasks.py即可补齐。随后脚本扫描 Templates 下的每个子目录作为模板并为模板 × 全量题目的每个组合生成一个 JSONL 文件写入场景根目录下新创建的Tasks/文件夹init_tasks.py。当前 HumanEval 场景只有一个模板AgentChat故只会生成Tasks/human_eval_AgentChat.jsonl。每条 JSONL 记录的结构如下{ id: HumanEval_2, template: .../Templates/AgentChat, substitutions: { prompt.txt: {__PROMPT__: ……题目与函数签名……}, test.txt: {__TEST__: ……单元测试代码……}, custom_code_executor.py: {__ENTRY_POINT__: ……被测函数名……} } }其中id由task_id中的/替换为_生成如HumanEval/2→HumanEval_2substitutions把三道占位符注入模板文件prompt.txt中的__PROMPT__、test.txt中的__TEST__、以及custom_code_executor.py中的__ENTRY_POINT__。整个基准全部 164 道题都将被展开为独立 Task。运行基准agbench run运行 HumanEval 的全部任务agbench run Tasks/human_eval_AgentChat.jsonl运行期间命令行会实时打印原始日志可以看到编码智能体 → 执行智能体之间的完整对话与代码执行过程。agbench run是 AutoGenBench 的核心执行命令详见 agbench README 的命令帮助常用参数如下参数含义与取值scenario位置参数要运行的 JSONL 场景文件若传目录则运行目录内全部 JSONL默认./scenarios-r/--repeat N每个任务重复运行 N 次以获得统计稳定性默认 1如--repeat 10-s/--subsample X任务子采样传小数按比例采样0.7 70%传整数则每个文件随机选取该数量个任务默认1.0-m/--model MODEL过滤 config 列表只运行匹配指定模型名的任务-c/--config CONFIG指定 OAI_CONFIG_LIST 的环境变量名或文件路径默认OAI_CONFIG_LIST--requirements FILE运行场景前额外 pip install 的依赖文件-d/--docker-image IMAGE使用的 Docker 镜像默认agbench:default不存在则创建与--native互斥--native在宿主机本地运行而非 Docker强烈不推荐需自行承担安全与一致性风险requirements.txt模板Templates/AgentChat/requirements.txt声明了场景运行依赖pyyaml以及 autogen 的autogen-core、autogen-ext[openai]、autogen-agentchat三个包按容器内路径引用其中[openai]表示安装 openai 模型的扩展组件。子采样功能尤其适合开发期调试先用--subsample 3快速验证链路再全量跑正式评测。每个命令都可用内联帮助查看完整选项agbench --help、agbench run --help、agbench tabulate --help、agbench remove_missing --help。查看结果agbench tabulate 与结果目录在另一个终端中汇总刚才的运行结果agbench tabulate Results/human_eval_AgentChat该命令输出任务完成率等摘要指标。若需要为场景定制指标口径HumanEval 还提供了 Scripts/custom_tabulate.py其内部委托 agbench 的default_tabulate完成统计可作为自定义聚合的接入点。按 agbench README 的说明运行结果默认按以下层级存放./results/[场景名]/[task_id]/[instance_id]例如./results/human_eval_AgentChat/HumanEval_2/0、/1…… 每个instance_id对应一次运行尝试--repeat 10会产生 10 个子目录。每个实例目录内包含timestamp.txt运行时间戳及所用 autogen-agentchat 库版本console_log.txt任务运行的全部控制台输出[agent]_messages.json每个智能体的消息字典日志./coding/智能体编写出的全部代码及这些代码产生的产物。深入内部场景是如何运行的展开后的每个 Task 会执行 Templates/AgentChat/scenario.py 主脚本。其运行逻辑可归纳为四步第一步按配置创建模型客户端scenario.py读取 Task 目录下的config.yaml通过ChatCompletionClient.load_component依据providerconfig实例化模型客户端。第二步依据模型家族选择对话上下文scenario.py若model_client.model_info[family] ModelFamily.R1使用ReasoningModelContext否则使用UnboundedChatCompletionContext并覆盖到 coder 智能体上。之所以要区分是因为 DeepSeek R1 等推理模型可能把thought思考字段写进 AssistantMessage。查看 reasoning_model_context.py 源码可知该类在get_messages()返回前会把每条AssistantMessage的thought置为None防止推理内容污染上下文、消耗 Token。第三步组建编码 执行智能体团队scenario.pycoder基于MagenticOneCoderAgent的编码智能体executor基于定制的 CustomCodeExecutorAgent把本地代码执行器LocalCommandLineCodeExecutor()包在其上并声明只接收来自coder的代码两者组成RoundRobinGroupChat最大轮次max_turns12——这正是 README 所说耗尽轮次即停止的落地位置终止条件TextMentionTermination(textTERMINATE, sources[executor])只有执行智能体明确说出TERMINATE才会结束对话。第四步构造任务提示并流式运行scenario.py读取替换了__PROMPT__的prompt.txt把函数签名包装进 Markdown Python 代码块的任务描述中然后通过agent_team.run_stream(tasktask)Console(stream)驱动对话并实时输出。测试注入机制CustomCodeExecutorAgent 的改造场景最关键的自定义逻辑在 custom_code_executor.py 中。其构造函数会把替换了__TEST__的test.txt读入内存作为测试代码custom_code_executor.py。随后它重写_extract_markdown_code_blocks每当解析出 Python 代码块就把测试代码 一段run_tests驱动 候选实现拼接成一个带单测骨架的完整可运行脚本custom_code_executor.pydef run_tests(candidate): try: check(candidate) # 可以在输出中搜索该字符串 print(ALL TESTS PASSED !#!#) print(TERMINATE) except AssertionError: print(SOME TESTS FAILED - TRY AGAIN !#!#)拼接末尾会调用run_tests(__ENTRY_POINT__)其中__ENTRY_POINT__已被替换为被测函数名。这一设计实现了 HumanEval 场景的两个关键目标机器可读的 pass/fail 反馈输出中的ALL TESTS PASSED !#!#与SOME TESTS FAILED - TRY AGAIN !#!#标记让外部评估脚本能精确判断每次尝试的结果自我修正闭环TERMINATE作为终止词触发TextMentionTermination仅当全部断言通过时执行器才输出它——通过即结束对话失败则编码智能体带着失败信息继续修改重试直至max_turns12轮次耗尽。文件中还保留了一段注释掉的think块剥离逻辑用于处理可能输出思考块包裹代码的模型说明该场景对推理模型的输出格式做了兼容性考量。整体而言这套把官方单测作为不可变裁判、把执行器输出作为结构化反馈的模式是 HumanEval 基准区别于一次性采样的核心设计也是 Templates/AgentChat 中最值得迁移复用的部分。运行要点与注意事项任务初始化会联网下载原始 HumanEval 数据若下载中断可重跑python Scripts/init_tasks.py。每个 Task 默认在全新 Docker 容器中执行起始环境完全一致本地/原生执行需显式--native并自负风险。重复运行多次以获得可靠结论例如agbench run --repeat 5 Tasks/human_eval_AgentChat.jsonl开发调试阶段优先用--subsample。若模型来自 Azure 或第三方服务除修改 config.yaml 外可能还需在 ENV.yaml或 ENV.json中补充相应配置与密钥agbench 的总体密钥读取规则OAI_CONFIG_LIST 文件/环境变量、回退到OPENAI_API_KEY见 agbench README。复用该场景编写新基准时可参照 Templates/{模板名}/ Scripts/init_tasks.py agbench run 三段式组织把题目、测试与执行脚本作为占位模板分离详见 benchmarks 目录 与 GAIA 场景后者包含 MagenticOne、ParallelAgents、SelectorGroupChat 等多模板示例。参考出处场景与运行方法的核心依据为 HumanEval 场景 README完整命令参数与结果目录约定见 agbench README团队组建、测试注入与模型上下文逻辑的源码依据见 Templates/AgentChat 下对应文件。HumanEval 基准本身源自 OpenAI 的论文Evaluating Large Language Models Trained on Code该文献引用信息已记录于场景 README.md 的 References 一节中可供查证。【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价