篱笆资讯
AI Agent 的 harness 改动有效吗?先验证任务,再看 traces
如何判断 AI Agent 的 harness 改动真的有效
修改提示词、工具路由或重试逻辑后,Agent 少调用了两次模型,运行也更快。这值得记录,但还不能证明任务表现改善:它可能减少了重复探索,也可能提前停止,漏掉了必要步骤。
评估 harness 改动,需要分别回答两个问题:任务有没有完成,以及完成它付出了多少代价。 前者依靠任务验证,后者通过执行 traces 解释。对开发者和评估工程师来说,把两层证据分开,是判断候选版本是否值得保留的基础。

一、先定义任务成功,再讨论效率

一、先定义任务成功,再讨论效率
Harness 可以理解为模型外围的运行机制,包括提示词组织、工具调用、错误恢复和停止条件。改动这些机制,会影响模型如何行动,却不一定让最终结果更好。
因此,Agent 评估应先确定成功标准,再开始实验。能用确定性验证器检查的任务,优先采用固定规则。例如,代码修改任务可以检查预先确定的测试是否通过;文件处理任务可以核对输出内容和格式。这些是评估设计示例,不是某个工具已具备的功能。
验证规则需要覆盖实际目标。“生成了文件”不代表文件正确,“没有报错”也不代表完成任务。如果任务涉及主观质量,无法完全自动验证,可以预先确定评分标准,并记录人工判断的部分,避免把它包装成完全确定性的结论。
建议将指标分成两组:
- 任务结果: 验证通过次数、失败类型、超时或未完成情况。
- 执行代价: 模型与工具调用次数、重试、耗时、token 使用,以及按实际计费规则计算的费用。
两组指标不能相互替代。更快地失败不是质量改善;多调用几次却完成了原本失败的任务,也不能直接归为退步。比较效率时,还应区分所有运行与成功运行,避免大量提前失败拉低平均耗时。
二、用单因素对照,减少结论中的干扰
如果同时更换模型、修改提示词并增加重试次数,即使成功率提高,也很难判断是哪项变化起了作用。更可靠的起点,是定义一个基线版本和一个只包含明确改动的候选版本。
下面的流程可以直接用于项目评估:
| 步骤 | 具体动作 | 要保留的记录 |
|---|---|---|
| 1. 明确改动 | 每轮只改变一个因素,例如某条重试规则 | 基线与候选版本的差异 |
| 2. 固定条件 | 保持模型快照、提供方、任务输入、执行预算和超时一致 | 完整配置与版本标识 |
| 3. 固定验证 | 两组使用相同成功标准,不因结果调整规则 | 验证器版本或评分规则 |
| 4. 重复运行 | 对同一任务集,两组运行相同次数,并启用追踪 | 每次运行的任务与版本编号 |
| 5. 比较结果 | 先检查验证通过情况,再定位发生变化的任务 | 通过次数、失败及超时 |
| 6. 解释代价 | 结合 traces 比较调用、重试、延迟与 token 使用 | 汇总指标与关键轨迹 |
执行预算应写清楚,例如允许的调用上限或 token 上限,不能只写“默认配置”。工具依赖的数据和初始状态也应尽量一致,否则一次外部数据变化就可能影响结果。如果提供方无法锁定模型快照,应明确记录这一限制。
两组等次数重复运行,是为了减少单次运行偶然性的影响,并不自动意味着样本足够。交错运行基线与候选版本,也有助于减少服务时段变化带来的干扰,但不能消除所有波动。
统计时不要静默删掉超时、工具异常或未完成记录。它们本身就是运行表现的一部分。除整体结果外,还要按任务查看差异:新增的成功是否集中在某一类任务,其他任务是否出现退步?总体平均数很容易掩盖这种变化。
三、用 traces 解释过程,不把工具请求当作成功

三、用 traces 解释过程,不把工具请求当作成功
AI agent observability,也就是 Agent 可观测性,帮助你还原执行过程。但 trace 展示的是过程证据,不能代替任务验证器。
NVIDIA 的 NeMo Relay tracing 教程区分了两种视角:ATOF 保留有序的生命周期事件,ATIF 将执行过程呈现为可读轨迹。教程还展示了通过 OpenInference exporter,把 OpenTelemetry spans 经 OTLP 发送到 Arize Phoenix,以检查模型与工具调用、时间、token 使用、错误,以及可获取的输入输出。
其中一个重要边界是:ATIF 中出现工具请求,只说明模型提出了调用,不确认执行结果。
检查某次工具操作时,可以按这个顺序追踪:
- 在 ATIF 中确认模型请求了什么工具、传入了什么参数。
- 在 ATOF 中查找对应的工具开始和结束事件。
- 检查错误记录及返回结果,区分执行失败与返回内容不符合任务要求。
- 回到任务验证结果,确认这些操作是否真正推动了任务完成。
新增调用可能来自有效恢复,也可能来自反复探索。仅看总数无法区分。应重点检查两组结果不同的运行:候选版本是否根据错误反馈修正了参数,还是重复同一请求?调用减少是否省去了冗余步骤,还是绕过了必要检查?
即使工具正常返回,任务也可能失败。反过来,轨迹中出现错误并不必然意味着最终失败,Agent 可能随后完成恢复。需要将事件、输出和最终验证结果对应起来看。
四、Qwen 案例说明了什么,又不能说明什么
同一篇 NVIDIA 教程报告了一组 Hermes ToolPerf 对照试验:每个任务在每个模型、每个实验组重复三次,总计 108 次运行。任务验证器记录完成情况,ATOF traces 记录调用、错误、重试和时间等过程信息。
其中,教程报告的 Qwen Coder 结果如下:
| 指标 | 基线版本 | 候选版本 |
|---|---|---|
| 验证通过次数 | 19/27 | 22/27 |
| 平均模型调用次数 | 3.8 | 4.9 |
| 平均工具调用次数 | 2.8 | 3.9 |
| 平均运行时间 | 27 秒 | 42 秒 |
这组结果支持的描述是:在该次对照试验中,候选版本通过验证的次数增加,同时平均调用和耗时也增加。
它不是“全面提速”的案例,也不能证明额外调用本身导致了成功。要解释机制,仍需查看具体轨迹,判断新增调用是否用于有效恢复。这里的 108 次是整个试验的运行总数,不是 Qwen 单组的样本量。
每个任务重复三次,可以展示评估方法和初步差异,但不足以单独证明统计显著性,更不能推广为所有模型、框架或生产工作负载的普遍收益。单次运行的结论更窄:它只能说明那一次发生了什么。
回到自己的项目,是否保留候选版本,应按预先确定的目标判断:
- 完成情况改善,代价也增加: 查看新增成功是否值得相应的延迟和费用,并确认仍符合预算。
- 完成情况相近,代价下降: 可以作为效率改善的候选证据,但要继续检查关键任务是否退步。
- 运行更快,完成情况变差: 不能仅凭速度宣布优化成功,应明确是否接受这种取舍。
下一轮实验不必急着扩大改动范围。先在固定任务集上重复验证,查看新增调用集中在恢复路径还是无效探索,并记录仍未解决的失败。最终报告应让别人看清:改了什么、哪些任务表现变化、代价如何,以及结论在哪些条件下成立。
