“这个编码 Agent 很强”是开发者社区里常见的结论,但很多文章没有写清楚:用了什么版本,运行在哪台机器,仓库是什么状态,任务提示词是什么,失败有没有重试,最后的代码有没有经过人工修改。
如果这些条件没有记录,所谓测评往往只是一次体验。它可以帮助作者形成印象,却不足以支持读者复现,更不能直接推出跨工具、跨模型和跨环境的排名。
本文不宣布哪个工具更强,而是提供一套可执行的测评方法。目标是让你在同一份仓库、同一套任务卡和同一套验收标准下,比较 Codex、WorkBuddy 的开发模式或其他 AI 编码工具,并把模型能力、工具集成、提示词和环境差异分开记录。
1. 测评先回答四个问题
开始之前先明确:
测什么:理解项目、修复 Bug、生成页面还是写脚本?
给谁测:新手、熟悉项目的开发者,还是团队日常流程?
用什么证据判断:测试、diff、截图、日志还是人工返工?
结论想服务什么决策:个人选型、团队试点还是流程改造?
不同决策需要不同测试。
如果你只是想知道哪个工具适合自己修小 Bug,一组受控任务就够了;如果要为团队选择工具,就需要覆盖不同类型的任务,并记录权限、协作和返工成本。不要为了让文章看起来“全面”而堆一大组互不相关的任务。
2. 先冻结测试环境
至少记录下面这些字段:
| 字段 | 示例写法 | 为什么重要 |
|---|---|---|
| 测试日期 | 2026-08-04 | 模型和工具会变化 |
| 工具名称与版本 | 工具名、桌面版或 CLI 版本 | 区分产品版本差异 |
| 模型或模式 | 当前实际使用的模型、推理档位或模式 | 避免把模式差异归因于工具 |
| 操作系统 | Windows、macOS 或 Linux 及版本 | 影响命令和依赖 |
| 仓库提交 | Git commit 或压缩包校验值 | 保证输入一致 |
| 依赖状态 | 锁文件、运行时和包管理器版本 | 避免环境漂移 |
| 权限 | 只读、工作区写入、联网和审批 | 影响 Agent 可执行动作 |
| 网络 | 可联网、受限网络或离线 | 影响下载和检索 |
| 任务提示词 | 完整保存,不只写摘要 | 影响任务边界 |
| 重试规则 | 是否允许重试、最多几次 | 防止人为放大结果 |
可以用一份 Markdown 文件记录:
# Evaluation Run
## Subject
- Tool:
- Version:
- Model or mode:
- Date:
## Environment
- OS:
- Runtime:
- Package manager:
- Repository commit:
- Network:
- Permissions:
## Task
- Prompt file:
- Input files:
- Acceptance checks:
- Retry rule:
## Evidence
- Execution log:
- Diff:
- Test output:
- Screenshots:
- Human rework:
这份记录本身也是测评产物。没有它,后面很难解释为什么同一工具这次和下次表现不同。
3. 任务一:陌生项目理解
第一类任务测试 Agent 能否在不修改代码的前提下建立项目模型。
输入
选择一个规模适中的真实仓库,固定提交版本。仓库应包含启动文件、测试、配置和至少一个不熟悉的模块。不要在任务前替工具写一份完整项目说明,否则测到的主要是人工准备质量。
任务卡
请只读分析当前仓库,不要修改文件。
请输出:
1. 项目的启动入口和主要模块;
2. 开发、测试和构建命令;
3. [指定模块] 的调用路径;
4. 可能影响本任务的配置和环境变量;
5. 当前能确认的风险;
6. 仍然缺少证据的问题。
要求:
- 每个具体结论附文件路径或命令来源;
- 不要猜测仓库中没有出现的配置;
- 不要修改、生成或删除文件。
验收
检查六项:
是否找到了真实启动入口?
命令是否来自项目配置或实际执行?
调用路径是否遗漏关键中间层?
是否把推断写成了事实?
是否读取了与问题无关的大量文件?
是否遵守了只读范围?
这个任务的结果不是“回答写得长不长”,而是证据路径是否可靠。一个篇幅很长但无法回到文件的总结,不能算理解任务成功。
4. 任务二:受控 Bug 修复
第二类任务测试 Agent 能否从复现到修复,再到回归验证。
输入准备
选择一个可以稳定复现的 Bug,最好已经有失败测试或明确的复现步骤。提前准备正确答案的验收条件,但不要把修复方案写进提示词。
例如:
问题:登录表单连续点击会创建重复请求。
现象:同一用户操作会触发两次提交。
范围:登录表单和直属测试。
禁止:升级依赖、修改接口协议、顺手重构其他表单。
验收:连续点击测试通过,现有登录测试通过,类型检查通过。
任务卡
目标:修复登录表单的重复提交问题。
请按顺序执行:
1. 先定位并复现问题,或说明为什么可以从代码路径确认问题;
2. 提出最小修复方案;
3. 只修改登录表单及其直接测试;
4. 补充覆盖连续点击的测试;
5. 运行相关测试和类型检查;
6. 最后说明修改文件、验证命令、结果和剩余风险。
如果环境无法运行测试,请明确说明,不要把未执行写成通过。
验收
先看功能是否正确,再看工程质量:
原始复现是否消失?
新增测试是否真的覆盖问题?
现有测试是否出现回归?
类型检查和构建是否有结果?
修改是否越过任务范围?
Agent 是否隐藏了失败或跳过的检查?
一个工具可能修复了 Bug,但删除了测试或扩大了 diff;也可能测试通过了,但修改了不允许碰的接口。任务完成不能只用“测试通过”一个字段判断。
5. 任务三:前端或脚本交付
第三类任务用于观察 Agent 能否把代码改动变成可用产物。
前端任务
目标:在不修改路由和接口的前提下,调整首页的错误状态。
范围:首页及其直属组件。
约束:保留现有组件库和品牌色,桌面端与 390px 宽度都要可用。
验收:启动开发服务,检查正常、加载、失败三种状态,查看控制台,并保存桌面和移动端截图。
交付:修改文件、启动命令、检查结果、未覆盖的交互。
记录的不只是截图,还要记录:页面是否实际启动、截图对应哪个提交、是否有控制台错误、移动端是否出现溢出,以及人工修改了多少内容。
脚本任务
目标:写一个脚本,把输入目录中的日志按日期提取成 CSV。
输入:提供一组正常日志、空文件、格式错误和重复记录。
约束:不修改原始日志;输出字段和时间格式固定;错误输入要有说明。
验收:对固定样本运行,逐行对照预期 CSV,并记录错误处理结果。
脚本任务适合测试确定性,因为输入和预期输出可以固定。前端任务更依赖浏览器、视口、图片和人工视觉判断,结论要单独记录,不要把两者合并成一个“代码能力分数”。
6. 设计指标,但不要急着加总分
建议把指标分成硬指标和观察指标。
硬指标
这些指标可以直接判定:
| 指标 | 记录方式 |
|---|---|
| 任务是否完成 | 通过、部分完成、失败 |
| 功能是否正确 | 验收测试或固定样本结果 |
| 测试结果 | 命令、退出码和失败列表 |
| 约束是否遵守 | diff 和文件范围 |
| 产物是否存在 | 文件路径、截图或运行地址 |
观察指标
这些指标更适合写日志和复盘:
人工返工了哪些内容?
Agent 进行了多少次无效尝试?
失败后是否改变了策略?
是否主动请求了缺失信息?
最终总结是否准确反映验证结果?
可以用 通过 / 部分 / 失败 / 未测 记录每项,不必先设计一个看似精确的总分。因为“能否修复 Bug”和“是否方便办公用户上手”很难用同一权重公平合并。
7. 保存每次执行的证据
一次测评至少保存以下文件或信息:
run.md:环境、任务、规则和结论。
prompt.txt:实际发送的完整提示词。
transcript.txt:关键执行记录和工具输出。
diff.patch:实际代码差异。
test.log:测试、类型检查和构建结果。
screenshots/:前端任务的桌面和移动端截图。
rework.md:人工修改了什么,以及为什么修改。
如果工具不方便导出全部对话,可以至少记录每个关键阶段:开始前的任务、实际调用的工具、失败原因、修改文件和验证输出。不要只保存 Agent 的最终总结,因为总结可能遗漏失败尝试。
8. 控制变量的方法
一次只改变一个因素
比较两个工具时,尽量固定:
同一仓库提交。
同一输入数据。
同一验收标准。
尽量相同的任务描述。
相同的网络和依赖状态。
相同的权限边界。
如果 A 用只读模式,B 用全自动写入模式,最后差异不能归因于模型或产品本身。
任务顺序随机化
同一仓库被第一个工具改过后,第二个工具再测试就不公平。更稳的做法是:
为每个工具准备独立副本。
每次从同一基线提交开始。
不同工具交替测试任务顺序。
每个任务结束后保存完整 diff 和日志。
重试规则固定
一次成功、一次失败都可能是随机波动。你可以规定:每项任务最多执行固定次数,或者连续多次测试直到证据足够。无论采用哪种方法,都要提前写进测试方案,不能看到不满意的结果才偷偷重试。
9. 如何解释失败
失败记录不要只写“模型不行”。可以按下面的类别归因:
| 失败类别 | 例子 | 下一步 |
|---|---|---|
| 目标误解 | 把修复 Bug 做成重构 | 改任务范围和验收 |
| 上下文缺失 | 没找到配置或调用方 | 补文件索引或搜索路径 |
| 工具限制 | 无法运行测试或打开页面 | 调整环境或权限 |
| 实现错误 | 修改逻辑本身不正确 | 复现、补测试、重新执行 |
| 验收缺失 | 产物看似完成但没有证据 | 加测试、截图或来源 |
| 环境故障 | 依赖、网络或端口问题 | 修复环境后重跑 |
| 人工标准不清 | 不知道什么算“好看” | 提供样例、反例或规格 |
分类的价值在于让下一轮测试知道该改变什么。如果所有失败都被归为“模型能力不够”,你就无法知道是换工具、补上下文还是修环境。
10. 结果怎么写才不夸大
一份合格的测评结论至少包含四层:
条件:在哪个版本、环境、仓库和权限下测试。
证据:完成了什么,哪些测试通过,改了哪些文件。
判断:在这组任务上,哪个工作流更适合当前目标。
限制:样本、版本、任务难度和人工返工对结论有什么影响。
例如:
在 Windows、某次固定提交、工作区可写且保留人工审批的条件下,工具 A 完成了 3 个受控 Bug 修复中的 2 个;工具 B 完成了 3 个中的 2 个。A 在项目探索阶段提供的文件证据更完整,B 在报告整理阶段的格式返工较少。样本只有 3 个任务,且未覆盖远程协作和大型仓库,因此不能据此推出普遍排名。
这种写法可能没有一句“谁赢了”抓眼球,但它更接近可复核的工程结论。
11. 发布前检查清单
[ ] 工具名称、版本、模型或模式已记录。
[ ] 操作系统、依赖、仓库提交和网络状态已记录。
[ ] 每项任务都有输入、范围、约束和验收条件。
[ ] 失败和重试规则在执行前已经确定。
[ ] 代码任务保存了 diff 和测试结果。
[ ] 前端任务保存了视口、截图和控制台结果。
[ ] 人工返工内容被单独记录。
[ ] 没有把单次体验写成普遍性能结论。
[ ] 结论明确写出条件和限制。
Anthropic 的 Demystifying evals for AI agents 讨论了 Agent 评估需要结合任务、环境和可观察结果。这里不要求个人用户搭建复杂评测平台,但应保留足够证据,让别人知道你到底测了什么。
12. 结论与限制
AI 编码工具的测评,核心不是让一个 Agent 完成一次炫技任务,而是建立一个可以重复执行、可以解释失败、可以回看证据的验收流程。
陌生项目理解关注证据路径,Bug 修复关注复现、最小改动和回归测试,前端或脚本交付关注真实运行结果。任务卡、环境记录、diff、日志和人工返工记录组合起来,才能把“感觉好用”变成“在这些条件下适合这个任务”。
这套方法不能消除模型随机性,也不能让三项任务代表所有项目。它的边界正是它的价值:结论只对已经记录的环境、版本、任务和验收条件负责。需要更可靠的团队决策时,应增加任务样本、重复执行和独立审阅,而不是把一次演示的分数写得更精确。
资料与说明
- Anthropic:Demystifying evals for AI agents:用于支撑以任务环境和可观察结果设计 Agent 评估。
- OpenAI Codex App、Codex CLI 和 Agent approvals and security:用于说明编码 Agent 的入口、执行环境和权限边界需要单独记录。
- 本文不把任何单次测试结果外推成模型或工具的普遍排名;具体版本和环境应在发布时重新核对。