news 2026/10/3 12:23:09

爆火的腾讯WorkBuddy发了篇论文,公开了自家底牌:Agent Harness与Benchmark拆解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
爆火的腾讯WorkBuddy发了篇论文,公开了自家底牌:Agent Harness与Benchmark拆解

1. WorkBuddy Bench 到底在测什么:Agent Harness 与 Benchmark 的真实工程拆解

腾讯 WorkBuddy 团队最近放出的这篇论文,核心不是又刷了个榜,而是把内部用来做模型选型的那把尺子直接开源了。你如果正在做 Agent 项目,大概率遇到过这种困惑:同一个模型,在 A 框架里跑得挺好,换到 B 框架就拉胯;榜单上排名第一的模型,接到自己业务里效果却一般。WorkBuddy Bench 想回答的就是这个问题——它把 Agent Harness(智能体运行框架)和 Benchmark(评测基准)当成一个整体来设计,而不是分开看。

先说清楚三个概念,不然后面没法聊。Agent Harness 指的是包裹在模型外面的那层工程框架,负责工具调用、上下文管理、多轮循环、错误重试这些脏活累活。Benchmark 是评测任务集和评分体系。模型是发动机,Harness 是底盘和传动系统,Benchmark 是测试跑道。WorkBuddy 论文最有价值的地方在于:它用数据证明了换 Harness 会直接导致排名洗牌,而且洗牌幅度大到不能忽略。

这套 Benchmark 包含四个子集:Code、Web、Office、Security。每个子集有独立的评分仪器,分数跨赛道不可比,套件刻意不报总平均分。这个设计决策很关键——它承认了不同任务类型的评分逻辑本质不同,强行平均只会掩盖问题。Code 子集 80 个任务里只有 10 个是修 Bug,其余覆盖五种角色(开发者、算法工程师、产品经理、QA、运维)和 18 个细分类目。Web 子集采用 artifact-not-chat 契约:Agent 必须在声明路径产出可运行工件,聊天里说得再好,路径下没东西就是零分。Office 子集评的是最终工作区状态,不是答案文本——你写了一份看似合理的总结却没更新它描述的那张工作簿,照样丢分。Security 子集 60 个任务全程无 LLM 裁判,五层反作弊,覆盖红蓝队全景。

为什么这套东西值得你花时间研究?因为它解决的是 Agent 工程里最实际的选型问题。你不需要腾讯的内部数据,但你可以用同样的方法论搭建自己的评测流程。接下来我会拆解 Harness 配置模板、Benchmark 跑分验证步骤,以及怎么在自己的项目里复现关键评测逻辑。

2. 接入前的环境准备:TaoToken 作为模型调用层

在复现 WorkBuddy Bench 的评测流程之前,你需要一个稳定的模型调用层。WorkBuddy 论文里测试了包括 GLM-5.2、GPT-5.5、Claude Opus 4.8、DeepSeek-V4-Flash、MiniMax-M3 在内的多个模型,这些模型通过不同渠道调用时,接口格式、认证方式、计费逻辑都不一样。如果你要跑多模型对比,逐个对接会浪费大量时间在适配层上。

TaoToken 在这里的角色是统一模型调用入口。它提供 OpenAI 兼容的 API 格式,你只需要改 Base URL 和 API Key,就能在同一个 Harness 里切换不同模型。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api(注意 API 地址不加 UTM 参数)。

具体操作步骤:先注册账号,然后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 管理页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建好 Key 之后,你需要在 Harness 配置里填三个东西:Base URL、API Key、Model ID。这三个要素缺一不可,后面配置模板里会具体写。

如果你只是想先验证模型对话效果,可以直接用模型对话页面测试:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。但要做 Benchmark 跑分,必须走 API 方式,因为需要程序化调用和结果收集。

这里有个坑要注意:不同模型对 API 参数的兼容性不一样。比如 GLM-5.2 对 temperature 的敏感度比 GPT-5.5 高,Claude Opus 对 system prompt 的处理方式也有差异。WorkBuddy 论文里提到 HY-3 开启跨轮 reasoning passback 后 Code 分数有提升,这说明 Harness 层面的参数配置会直接影响模型表现。所以你在做多模型对比时,要么统一参数,要么把参数差异作为变量记录下来。

另外,WorkBuddy Bench 的 Security 子集涉及漏洞发现和 PoC 验证,这类任务对模型的推理深度要求很高。GLM-5.2 在 Security 双榜上拿下第一,说明开源权重模型在特定领域可以超过闭源模型。但你在自己项目里复现时,要注意 Security 任务的评分是确定性的,不依赖 LLM 裁判,所以结果更可复现。

3. 可复制的 Harness 配置模板与 Benchmark 跑分步骤

这一节是核心操作部分。我会给出一个可复制的 Harness 配置模板,然后说明怎么跑 Benchmark 验证。

3.1 Harness 配置模板(JSON 格式)

WorkBuddy 论文里提到双 Harness 评分:cbc 和 cc。cbc 应该是内部 Harness 的代号,cc 很可能指 Claude Code 风格的 Harness。你在自己项目里不需要完全复现这两个,但需要理解 Harness 的核心配置项。下面是一个通用的 Agent Harness 配置模板,你可以直接复制修改:

{ "harness_name": "my-agent-harness", "model_config": { "base_url": "https://taotoken.net/api", "api_key": "sk-your-key-here", "model_id": "glm-5.2", "temperature": 0.2, "max_tokens": 8192, "timeout_seconds": 120 }, "agent_loop": { "max_turns": 50, "enable_reasoning_passback": true, "tool_call_retry": 3, "context_window_management": "sliding_window", "max_context_tokens": 128000 }, "tools": [ { "name": "read_file", "description": "读取工作区文件内容", "parameters": { "path": "string" } }, { "name": "write_file", "description": "写入文件到指定路径", "parameters": { "path": "string", "content": "string" } }, { "name": "run_command", "description": "在沙箱中执行 shell 命令", "parameters": { "command": "string", "timeout": "integer" } } ], "evaluation": { "artifact_contract": "path_based", "output_dir": "./workspace/output", "rule_checks_weight": 0.85, "llm_judge_enabled": false } }

这个模板里几个关键参数需要解释。enable_reasoning_passback对应论文里提到的跨轮 reasoning passback,开启后模型在每一轮可以把上一轮的推理摘要带过来,Code 分数有提升。max_turns控制 Agent 最多跑多少轮,Security 子集平均 30-89 轮,所以如果你要跑 Security 任务,这个值要设大一些。artifact_contract设为path_based对应 Web 子集的 artifact-not-chat 契约,Agent 必须在指定路径产出文件。

3.2 用 TaoToken 跑多模型对比

要复现 WorkBuddy 论文里的多模型排名,你需要至少准备三个模型:GLM-5.2、GPT-5.5、Claude Opus 4.8。通过 TaoToken 调用时,只需要改model_id字段。比如:

{ "model_config": { "base_url": "https://taotoken.net/api", "api_key": "sk-your-key-here", "model_id": "claude-opus-4.8", "temperature": 0.2, "max_tokens": 8192 } }

如果你要做长期编码任务或 Agent 开发,可以考虑 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。这个计划适合需要频繁调用模型的场景。

3.3 Benchmark 跑分验证步骤

跑分流程分四步:

第一步,准备任务集。WorkBuddy Bench 的任务是开源的,你可以从论文配套仓库获取。每个任务包含:任务描述(刻意欠规格)、工作区初始状态、隐藏测试、评分规则。注意隐藏测试是解题时不可见的,但发布后全部公开。

第二步,配置 Harness。用上面的 JSON 模板,把model_id设成你要测的模型。如果你要对比 cbc 和 cc 两种 Harness 风格,需要准备两份配置,主要差异在agent_loop和tools的定义上。

第三步,运行评测。每个任务独立运行,Agent 在沙箱里操作,评分资产在 Agent 行动期间完全不可见,结束后才注入。你需要记录每个任务的:轮次、输出 token 数、含缓存输入 token 数、最终得分。

第四步,汇总结果。按子集分别统计,不要算总平均分。Code 子集看 bug_fix 和 api_contract 类目的得分,这两个是最难的,均值只有 0.47。Web 子集看 artifact 是否在声明路径产出。Office 子集看最终工作区状态是否匹配预期。Security 子集看 PoC 是否能在沙箱里稳定触发 ASAN crash。

3.4 关键参数对照表

参数作用推荐值注意事项
max_turnsAgent 最大轮次Code: 30, Security: 90Security 任务轮次多
temperature采样温度0.2太高会导致工具调用不稳定
enable_reasoning_passback跨轮推理回传true开启后 Code 分数有提升
rule_checks_weight规则检查权重0.70-0.95每个任务预配不同
artifact_contract交付物契约path_basedWeb 子集必须开启

4. 验证请求与成功结果:怎么确认你的 Harness 跑通了

配置好之后,你需要一个最小验证流程来确认 Harness 能正常工作。不要一上来就跑完整 Benchmark,先用一个简单任务验证链路。

4.1 最小验证请求

用 curl 发一个请求到 TaoToken API,确认模型能正常响应:

curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-your-key-here" \ -d '{ "model": "glm-5.2", "messages": [ {"role": "system", "content": "你是一个代码助手,只输出代码,不要解释。"}, {"role": "user", "content": "写一个 Python 函数,读取 JSON 文件并返回字典。"} ], "temperature": 0.2, "max_tokens": 1024 }'

如果返回 200 并且 choices 里有内容,说明 API 链路通了。如果返回 401,检查 API Key 是否正确。如果返回 model not found,检查 model_id 是否拼写正确。

4.2 Harness 端到端验证

API 通了之后,跑一个完整的 Agent 任务。选一个 Code 子集的简单任务,比如 feature_pipeline 类目(均值 0.94,最容易)。任务描述可能是:“在工作区里添加一个数据预处理管道,读取 CSV 文件,过滤空值,输出到新文件。”

你的 Harness 应该执行以下流程:模型收到任务描述后,先调用read_file查看工作区结构,然后调用write_file创建管道代码,最后调用run_command执行测试。如果隐藏测试通过,得分 1.0;如果失败,得分 0.0。

成功的结果长这样:

{ "task_id": "code_feature_pipeline_001", "model_id": "glm-5.2", "harness": "my-agent-harness", "turns": 8, "output_tokens": 3200, "input_tokens_with_cache": 45000, "score": 1.0, "rule_checks": { "file_exists": true, "schema_valid": true, "test_passed": true } }

4.3 多模型对比结果记录

跑完三个模型后,你会得到类似 WorkBuddy 论文表6的数据。注意几个关键观察点:Code 排名在双 Harness 间可能换位,Security 洗牌最狠,Office 最稳。如果你发现某个模型在你的 Harness 下表现和论文差异很大,先检查 Harness 配置是否一致,特别是enable_reasoning_passback和max_turns。

论文里提到 GPT-5.5 是全场最省高分者,cbc 下 Code 只用 6.9k 输出 token。如果你测出来某个模型 token 消耗特别高但分数不高,比如 DeepSeek-V4-Flash 在 cc 下输出是 GPT-5.5 的 3.3 倍但分数低 14.74 分,那说明这个模型在你的任务分布下效率不高。

5. 本篇常见错误排查:401、local proxy failed、reading choices、OAuth

跑 Benchmark 过程中最容易遇到四类报错,我逐个拆解。

5.1 401 Unauthorized

这是最常见的错误。原因通常是 API Key 无效或过期。检查步骤:确认 Key 是从 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 创建的,确认请求头里Authorization: Bearer sk-xxx格式正确,确认 Key 没有多余空格。如果 Key 没问题但还是 401,检查 Base URL 是否写成了https://taotoken.net/api而不是https://taotoken.net/api/v1。有些 Harness 会自动拼接/v1,有些不会,需要看具体框架的文档。

5.2 local proxy failed

这个报错通常出现在 Harness 配置了本地代理但代理没启动的情况下。如果你没有用代理,检查 Harness 配置里是否有proxy字段,把它删掉或设为空。如果你确实需要代理,确认代理地址和端口正确。注意:TaoToken API 本身不需要代理,直接访问即可。

5.3 reading choices 报错

这个错误说明 API 返回了响应,但 Harness 在解析choices字段时失败了。常见原因:模型返回了非标准格式,或者 Harness 期望的响应结构和实际返回不一致。排查方法:先用 curl 直接调 API,看返回的 JSON 结构。如果choices[0].message.content存在,说明 API 正常,问题在 Harness 的解析逻辑。检查 Harness 是否处理了finish_reason为length的情况——如果max_tokens设太小,模型输出被截断,choices可能不完整。

5.4 OAuth 相关报错

如果你用的是 Claude Code 或类似工具,可能会遇到 OAuth 认证问题。Claude Code 的接入文档在 https://taotoken.net/doc/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。关键配置三件套:Base URL 设为https://taotoken.net/api,API Key 用 TaoToken 创建的 Key,Model ID 填你要用的模型。如果你在 Claude Code 里遇到 OAuth 报错,检查是否误用了 Anthropic 官方的 OAuth 流程——TaoToken 走的是 API Key 认证,不需要 OAuth。

5.5 Codex auth.json 配置

如果你用 Codex 风格的 Harness,需要配置auth.json。文件路径通常在~/.codex/auth.json。内容格式:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-your-key-here", "model": "glm-5.2" }

注意model字段填 Model ID,不是显示名称。如果你要切换模型,改这个字段即可。

5.6 Cline MCP 配置

Cline 通过 MCP 协议接入时,需要在 MCP 配置文件里填三件套。Base URL、API Key、Model ID 缺一不可。如果你遇到 MCP 连接失败,先确认 MCP 服务是否启动,再确认配置文件路径是否正确。

6. 把 WorkBuddy 的方法论用到你自己的 Agent 项目里

WorkBuddy 论文最值得借鉴的不是具体排名,而是它的评测设计思路。你在自己项目里可以这样做:

第一,任务分布对齐真实工作。不要用网上随便找的测试集,从你的业务日志里提取真实请求模式,然后改写成刻意欠规格的任务描述。WorkBuddy 的做法是锚定真实上游工件(开源仓库 commit、CVE)或具体业务场景,匹配内部使用分布,但原始用户 prompt 不进入任务。

第二,双 Harness 评分。同一个模型至少在两种 Harness 配置下跑一遍,观察排名是否稳定。如果换 Harness 后排名洗牌,说明你的评测结果对 Harness 敏感,选型时要同时考虑模型和 Harness 的匹配度。

第三,分赛道评分,不报总平均。Code、Web、Office、Security 的评分逻辑不同,强行平均会掩盖问题。你的项目可能只有一两个赛道,那就把这一两个赛道做深。

第四,记录 token 开销。花钱多不等于分数高。GPT-5.5 用 8.7k 输出 token 拿到 76.63 分,GLM-5.2 用 22.0k 拿到 77.06 分,差距很小但成本差很多。你的选型要综合考虑分数和成本。

第五,反作弊设计。WorkBuddy 的 Security 子集全程无 LLM 裁判,五层反作弊。你的评测如果涉及敏感操作,也要考虑怎么防止 Agent 绕过测试。

如果你要长期做 Agent 开发和评测,Coding Plan 可能适合你:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各框架的详细配置说明。

最后说一个实际经验:我试过用同一套 Harness 配置跑 GLM-5.2 和 GPT-5.5,在 Code 任务上两者分数接近,但 GLM-5.2 在 Security 任务上明显更强。这跟 WorkBuddy 论文的结论一致——开源和闭源的差距是分板块的,不是均匀碾压。所以选型时不要只看一个总分,要看你最关心的那个赛道谁更强。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 12:22:40

声呐非接触测振全解析:LabVIEW相位解调实现1mm振幅测量

最近在搭一套基于LabVIEW的声呐非接触测振装置,目标是稳定测出1mm级别的振幅振动。这类需求在工业现场还挺常见的,比如大型旋转机械的壳体振动、管道表面振动、高温或带电设备的结构振动,这些场合接触式传感器要么装不上,要么贴上…

作者头像 李华
网站建设 2026/10/3 12:20:01

Ruby Symbol 完全使用指南

Symbol(符号)是 Ruby 最具辨识度的特色特性之一,它是全局唯一、不可变的标识符对象,核心用来表达「名称、标签、状态」这类语义,而非处理文本内容。合理使用 Symbol 能让代码更简洁、性能更高、语义更清晰。一、Symbol…

作者头像 李华
网站建设 2026/10/3 12:19:19

eDMFT安装教程:在Linux上基于Intel oneAPI与WIEN2k的完整配置流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 12:18:03

FreeRTOS静态与动态内存分配:从PC思维到MCU实战的全面解析

做嵌入式开发的人,十有八九都纠结过一个问题:任务栈到底该用静态还是动态?尤其是当你从 PC 端的开发思维切到 FreeRTOS 上,会发现两边对"内存"这两个字的理解完全不是一回事。我最初在 PC 上用惯了 malloc,转…

作者头像 李华
网站建设 2026/10/3 12:17:53

Codex CLI 配置 Azure OpenAI GPT-5-codex 指南:config.toml 与 AGENTS.md 实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 12:17:34

T527解锁玄铁RISC-V核心:从U-Boot启动到裸机固件实战

如果你手里有一块Allwinner T527的开发板,又恰好对RISC-V架构感兴趣,那你大概率会盯着芯片手册里那个“XuanTie”核心发呆——明明硬件就在那儿,Linux跑起来却完全看不到它的影子,确实让人心痒。这篇文章就是针对这个问题的第一次…

作者头像 李华