跳到正文
This is Oscar
返回

我们如何为 Deep Agents 构建评估

原文标题:How we build evals for Deep Agents
原文链接:https://blog.langchain.com/how-we-build-evals-for-deep-agents/

我们如何为 Deep Agents 构建评估

8 分钟阅读 | 2026 年 3 月 26 日

💡 要点

最好的 agent 评估直接衡量我们关心的 agent 行为。以下是我们如何获取数据、创建指标,以及如何随时间推移运行范围明确、有针对性的实验,使 agent 更准确、更可靠。

How we build evals for Deep Agents


评估塑造 agent 行为

我们的团队一直在整理评估体系,用于衡量和改进 Deep Agents——一个开源、模型无关的 agent harness,驱动着 FleetOpen SWE 等产品。

每个评估都是一个改变你的 agentic 系统行为的向量。例如,如果一个关于高效文件读取的评估失败了,你很可能会调整系统 prompt 或 read_file 工具描述来引导行为,直到它通过为止。

关键在于添加评估时要深思熟虑,不要盲目添加成百上千的测试。这种做法可能制造出改进的假象,却不能反映生产环境中的行为。

核心原则:更多评估 ≠ 更好的 agent。相反,要构建能反映生产环境期望行为的有针对性的评估。

Deep Agents 的方法

在构建 Deep Agents 时,团队会梳理在生产环境中重要的行为,例如跨多个文件检索内容或准确地按顺序组合多次工具调用。他们的三步方法:

  1. 确定 agent 应遵循哪些行为,然后研究并整理能以可验证方式衡量这些行为的有针对性的评估
  2. 为每个评估添加 docstring,解释它如何衡量 agent 能力以实现自文档化;用 tool_use 等类别标签标记每个评估,以支持分组运行
  3. 审查输出 trace 以理解失败模式,并更新评估覆盖范围

因为我们将每次评估运行都 trace 到一个共享的 LangSmith 项目中,团队中的任何人都可以随时介入分析问题、做出修复,并重新评估给定评估的价值。


我们如何获取评估数据

获取评估数据有几种方式:

  1. 使用 dogfooding agent 的反馈
  2. 从外部基准测试(如 Terminal Bench 2.0BFCL)中筛选评估并进行适配
  3. 为重要行为编写自定义评估和单元测试

Dogfooding agent 与阅读 trace

我们每天都在 dogfood 自己的 agent。每一个错误都会成为编写评估、更新 agent 定义和上下文工程实践的机会。

关于测试的重要说明

我们将 SDK 的单元测试和集成测试(系统 prompt 透传、中断配置、子 agent 路由)与模型能力评估分开。任何模型都能通过这些测试,因此将它们纳入评分不会增加任何信号。

评估数据来源

评估数据来源截图

Trace 提供了关键数据。 使用 PollyInsights 等内置工具,团队可以大规模分析 trace。目标是理解每种失败模式、提出修复方案、重新运行 agent,并追踪进展和回归。

例如,现在大部分 bug 修复 PR 都是通过 Open SWE 驱动的——我们的开源后台编码 agent。

其他评估来自现有基准测试,如用于函数调用的 BFCL,或来自 Terminal Bench 2.0 的 Harbor 沙盒编码任务。还有许多是从零编写的、针对孤立行为的专注测试。

按类别分组评估

建立评估分类法有助于获得 agent 表现的中间视图(不是单一数字,也不是单次运行结果)。

重要提示:按照评估测试的内容来创建分类法,而不是按照它们的来源。

评估类别

类别测试内容
file_operations文件工具(read、write、edit、ls、grep、glob)、并行调用、分页
retrieval跨文件查找信息、搜索策略、多跳文档综合
tool_use选择正确的工具、链接多步调用、跨轮次追踪状态
memory召回预设上下文、提取隐式偏好、持久化持久信息
conversation对模糊请求提出澄清问题、在多轮对话中保持正确操作
summarization处理上下文溢出、触发摘要、在压缩后恢复信息
unit_testsSDK 管道——系统 prompt 透传、中断配置、子 agent 路由、skill 路径解析等是否正常工作?

目前,所有评估都是 agent 在任务上的端到端运行。我们有意鼓励评估结构的多样性。


我们如何定义指标

选择 agent 的模型时,我们从正确性开始。如果一个模型无法可靠地完成我们关心的任务,其他一切都不重要。

衡量正确性

正确性的衡量取决于测试对象:

效率指标

一旦多个模型都达到了正确性门槛,我们就转向效率。两个解决同一任务的模型在实践中可能表现截然不同。一个可能需要更多轮次、进行不必要的工具调用,或者因为模型规模更大而执行得更慢。

完整指标表

指标定义
正确性(Correctness)模型是否正确完成了任务
步骤比率(Step ratio)观测到的 agent 步骤数 / 理想 agent 步骤数
工具调用比率(Tool call ratio)观测到的工具调用数 / 理想工具调用数
延迟比率(Latency ratio)观测到的延迟 / 理想延迟
求解率(Solve rate)预期步骤数 / 观测到的延迟,如果任务未正确完成则为 0

求解率衡量的是 agent 解决任务的速度,按预期步骤数归一化。

模型选择流程

  1. 首先检查正确性:哪些模型在真正重要的任务上足够准确?
  2. 然后比较效率:在准确的模型中,哪个在正确性、延迟和成本之间提供了最佳权衡?

通过理想轨迹理解成功与失败

为了使模型比较具有可操作性,我们检查模型是如何成功和失败的。这需要一个具体的参考点,来说明”好的”执行在准确性之外是什么样的。

理想轨迹是指以最少的不必要操作产生正确结果的步骤序列。

示例:“我所在位置的当前时间和天气是什么?”

理想轨迹图

理想轨迹:4 步,4 次工具调用,约 8 秒

低效轨迹图

低效但正确的轨迹:6 步,5 次工具调用,约 14 秒

低效运行的指标

指标解释
正确性1运行成功
步骤比率6 / 4 = 1.5比理想多 50% 的 agent 步骤;越低越好
工具调用比率5 / 4 = 1.25比理想多 25% 的工具调用;越低越好
延迟比率14 / 8 = 1.75比理想慢 75%;越低越好
求解率4 / 14 = 0.29 预期步骤/秒在预期轨迹中的更快进展;越高越好

我们如何运行评估

团队使用 pytest 配合 GitHub Actions 在 CI 中以干净、可复现的环境运行评估。每个评估创建一个带有给定模型的 Deep Agent 实例,向其输入一个任务,并计算正确性和效率指标。

评估可以使用标签运行,以节省成本并衡量有针对性的实验:

export LANGSMITH_API_KEY="lsv2_..."

uv run pytest tests/evals --eval-category file_operations --eval-category tool_use --model baseten:nvidia/zai-org/GLM-5

我们的评估架构和实现已在 Deep Agents 仓库 中开源。


下一步

团队正在围绕开源 LLM 扩展评估套件。即将推出:

Deep Agents 是完全开源的。试试看并告诉我们你的想法!


引用


分享到:

上一篇
齐达内:优雅是一种控制力
下一篇
罗纳尔多:外星人降临与凡人的代价