调校“马具”,而非模型:一份 Nemotron 3 Ultra 实战手册
英文标题:LangChain Tunes the Harness, Not the Model — Nemotron 3 Ultra Closes In on Opus 4.8 at 1/10 the Cost
通过调校智能体周围的“马具”(提示词、工具描述、中间件),而非模型本身,Nemotron 3 Ultra 在 Deep Agents 评测中几乎追平了前沿模型 Opus 4.8 的成绩,但成本降低了约 10 倍。
本文目录
关键要点
-
接近前沿水平的智能体质量,成本却低得多。 仅调校“马具”(harness),就让 Nemotron 3 Ultra 在 Deep Agents 评测套件上跑出了 0.86 的最佳成绩,几乎追平 Opus 4.8 的 0.87 最佳成绩,而每次运行的成本却低了大约 10 倍(完整套件上约 4.48 美元对比 43.48 美元),延迟也基本持平。
-
评测数据就是马具工作的训练数据。 每一次改动都经过一个“追踪-驱动”的循环:先用低成本的方式快速筛选,只有当这个改动在多次试验中都能稳定获胜,并且没有导致其他方面退步时,它才算真正有效。
-
匹配度决定了模型有多少能力能用在任务上。 一个匹配的马具能让模型把能力集中在工作上;一个不匹配的马具则会让模型与“脚手架”对抗,而两者之间的差距会直接体现在分数上,完全不需要改动模型权重。
-
马具调校有天花板。 它能修复由脚手架本身引起的故障,但无法添加模型权重里没有的能力。所以,如果一个结果在所有马具改动下都毫无变化,那就说明问题出在模型的后训练阶段,而不是需要再挂一个钩子。
马具是你能够控制的部分
一个智能体(agent)等于一个模型加上一个马具。模型负责思考,而马具(包括系统提示词、工具描述、中间件)是它工作的“脚手架”。我们以前也调校过围绕前沿模型的马具,但这次,我们想看看用一个开源模型能走多远。
开源模型让这件事变得有趣。它们已经足够好,可以认真用于实际的智能体工作,而且成本只有前沿 API 的零头。你能拿到模型权重,所以可以自己托管和微调模型,或者使用各种云服务商提供的接口,不用担心被锁定。但问题是,一个能力很强的模型,如果放在一个不是为它设计的马具里,表现也可能不佳,这正是我们要解决的问题。
作为 Nemotron 联盟的一员,我们认为 Nemotron 3 Ultra 是在 Deep Agents 内部进行调校的合适模型。NVIDIA 构建 Nemotron 就是为了让它能在智能体马具里工作,我们想看看能把它推到什么程度。
开箱即用的情况下,一个通用的马具并不是为特定模型调校过的。直接使用模型而不调校马具是一个合理的默认做法,但并不是你能做到的最好情况。
马具是模型周围的一切,而模型是内部的引擎。当两者匹配时,模型就能把能力用在任务上。当它们不匹配时,模型就会把能力浪费在与脚手架对抗上,比如反复询问它已经知道的细节、过早停止、或者陷入循环。
匹配度的重要性远超大多数人的预期,我们之前已经展示过这一点。在 Terminal-Bench 2.0 上,我们让 gpt-5.2-codex 的分数从 52.8 提升到了 66.5,当时大约是从前 30 名提升到了前 5 名,而且完全没有动模型。当我们发布针对不同模型的马具配置文件时,通过遵循提示指南,我们将 tau2-bench 的一个精选子集提升了 10 到 20 分。同样的权重,配上不同的脚手架,就会得到不同的分数。
我们使用数据驱动的方法完成了这些马具端的工作,通过挖掘追踪记录来寻找失败模式。这次的研究对象是 Nemotron 3 Ultra,一个本身就已经很出色的开源模型。这是因为 NVIDIA 专门对它进行了后训练,使其能在各种智能体马具中表现一致,而不仅仅是单轮对话,训练数据是一大套长时间运行、使用工具的复杂任务(NVIDIA 的发布文章详细介绍了这种智能体后训练及其背后的架构)。
我们保持模型不变,只改动马具:系统提示词、工具描述,以及模型和工具调用周围的中间件。生成设置保持厂商推荐的默认值,所以下面的所有改进都不是通过调整温度、top-p 或思考预算来实现的。
从评测开始
为模型调校马具总是从评测开始。没有学习信号,你就是在瞎猜,而靠瞎猜调校出来的马具只会过度拟合你最后看到的那几个案例。我们把评测视为马具工程的训练数据:每个案例都会提供一个信号,告诉我们智能体是否采取了正确的行动或产生了正确的结果,这个信号会指导下一步的改动。
智能体开发看起来不像普通的软件开发。对于普通软件,你通常知道输入、输出和预期的行为。但对于智能体,输入空间非常广阔,很多输出都是可以接受的,而且对提示词、工具或编排逻辑的一个小改动,可能修复一个案例,却破坏了另一个。所以,这项工作是一个迭代过程,以 LangSmith 的追踪记录作为事实来源,按照一个循环来运行:
- 评估。在多个模型上运行行为评测套件。
- 观察。阅读每个失败运行的追踪记录,看看它在哪、以及如何失败的。
- 诊断。将失败的轨迹聚类成行为模式。
- 工程。对马具的某个部分进行一次有针对性的改动。
- 重新评估。按照成本阶梯逐步推广这个改动,只有当它带来的胜利能持续下去时才保留它。
下面的图表是我们智能体开发生命周期循环的一个变体,专门针对使用基于上述循环的评测环境来调校马具进行了修改:
有两个原则保证了循环的诚实性。首先,一次看起来不错的结果说明不了什么,因为运行结果会因随机性而略有变化。考虑到这一点,一个改动只有在多次试验中都能重复成功,并且没有导致其他方面退步时,才算真正有效。其次,我们在不放弃信号的前提下,尽量降低了测试成本。我们不会在每次改动后都运行完整的评测套件,而是让候选改动先在一个小型、低成本的筛选中进行测试,只有证明了自己,才能获得更广泛、更昂贵的运行机会。
在子集上进行筛选的风险是,可能会遗漏子集未覆盖到的任务上的退步。我们通过保持筛选的代表性来防范这一点:一个改动如果能在涵盖不同行为的样本上成立,那么它在完整运行中通常也成立。通过选取有代表性的样本,我们的筛选在进入昂贵的完整测试之前,就为我们带来了真正的信心。
两个层面
提示词
在提示词方面,我们的第一反应是重写系统提示词。这是最容易改动的地方,所以每个人都会从这里开始,但根据我们的经验,这也是最被高估的。大范围的重写和泛泛的“做个更好的智能体”之类的指令往往没什么效果,因为一个能力强的模型真正的失败通常不是措辞问题。
真正有效的是重写的反面:简短、单一目的的代码块,专门针对你在追踪记录中观察到的某个失败行为。如果一个模型完成了任务,但从不陈述结果,你就只写这一条指令,别的什么都不加。
<final_answer_completeness>
在工具调用成功后,最终答案必须报告具体的结果,而不仅仅是说任务完成了。需要包含回答用户请求的关键实体、操作、标识符、标题、收件人、服务、状态或数值。如果用户问了多个问题,需要根据对应的工具输出逐一回答。
</final_answer_completeness>
然而,我们必须小心,因为这些代码块会相互作用。一个单独使用时毫无效果的指令,一旦与马具中其他地方的改动搭配起来,可能就开始发挥作用了。所以我们也测试了组合效果。
中间件
当一个行为必须每次都发生,而不是大多数时候发生时,提示词就做不到了。中间件,也就是在模型及其工具调用周围运行的钩子,承担着两个不同的工作,值得分开来看。
第一个是代码层面的强制执行。对模型和工具调用次数设置上限,可以在循环超时之前就结束它。一次性的重试可以吸收瞬时的工具故障。这两者都不需要模型做什么;它们改变的是循环本身的行为。
第二个工作,也是为 Nemotron 做出主要贡献的工作,是上下文工程:在模型需要的时候,把正确的信号放在它面前。我们不是把所有规则都塞进系统提示词里,指望模型能记住,而是观察追踪记录中的轨迹,在模型出错的地方注入指导。
最清晰的例子是我们希望遵循的一条规则:当读取文件返回的内容长达一整页时,要假设还有更多内容,并继续读取。把这个规则写在 read_file 工具的描述里,一点用都没有。模型读了第一页,就以为拿到了整个文件,然后回答了。我们把同样的文字,一字不改,放到了工具返回的内容里,然后它就开始生效了,因为现在这条规则就出现在模型正在读取的数据旁边。同样的文字,不同的位置,截然不同的结果。在那之后,我们不再只问规则应该说什么,而是开始问它必须出现在哪里才能被模型读到。
同样的模式也体现在信号搭载在哪个消息里,而不仅仅是它是在提示词里还是在工具结果里。Nemotron 对以对话消息形式、在需要时点传递的指导响应最可靠,而不是作为系统提示词中的一条固定规则。所以,我们添加了中间件,先告诉智能体在行动前做计划,然后,一旦计划写好了,再注入第二条消息,要求它在执行前审查计划。在追踪记录中,模型会接收这些注入的消息并据此行动:先做计划,然后回头检查自己的工作。而同样的指令放在系统提示词里,往往就没什么效果。
什么没起作用
我们尝试的大部分改动都没能存活下来,这一点值得大声说出来:一个只报告成功的调校循环,通常是在过度拟合。很多看似合理的改动毫无效果,有几个甚至让情况更糟,而且不止一个杠杆只有与其他改动结合时才有效,单独使用则不行。
我们坚持的原则是:保留针对行为类别的修复,而不是针对基准测试的技巧。一个好的杠杆应该像设计良好的工具一样,基于一个真实的条件(比如,任何返回一整页的文件读取)来触发,而无需知道它面前的具体测试用例是什么。我们放弃了一个改动,正是因为它依赖于某个单一评测中的特定短语:它会让分数更好看,但对我们下一个智能体毫无帮助。
调校给我们带来了什么
一个单一的分数只能告诉你智能体变好了还是变差了,但不知道具体在哪里。所以,在信任任何马具改动之前,我们让 Nemotron 在 LangChain 的 Deep Agents 评测套件上运行,这个套件会根据智能体实际花费时间的工作来分别打分:处理文件、调用工具、检索信息、进行多轮对话、总结长文本。这样打分,结果就能指向特定的能力,你就能区分出是马具的问题还是模型的问题。
调校让 Nemotron 3 Ultra 从没有配置文件的基线分数(大约 0.80)提升到了典型运行时的 0.84 左右,最佳运行达到了 0.86,几乎追平了 Opus 4.8 的最佳成绩 0.87(Opus 通常跑在 0.86 左右)。从大约 0.80 的基线开始,没有任何配置文件,这本身就是一个很强的开箱即用结果,也是 NVIDIA 智能体后训练的直接回报:这个模型一上来就非常擅长使用工具和多步骤工作,这为马具提供了一个很高的起点。
总结能力的提升空间最大,而调校完全解决了这个问题。没有配置文件时,马具没有提供任何压缩指导,所以模型要么在开始新的庞大任务时跳过压缩,要么从总结过的对话中回答,而不是去读取已卸载的历史文件。配置文件添加了明确的压缩指导,引导模型走向正确的压缩行为。工具使用也显著改善。检索和文件操作开箱即用就已经很强,这再次表明模型是为真正的智能体工作而进行过后训练的,而调校仍然将它们推向了更高水平。把这些改进加起来,你就得到了一个在智能体实际依赖的任务上表现良好的模型。
对话是个例外,这条平坦的线本身就很有信息量。这些不是马具能修复的低级故障。它们是长周期行为,比如在长时间的多轮任务中保持后端状态,这类问题更适合通过模型后训练来解决,而不是脚手架。为了它们去调校配置文件,意味着要迎合基准测试的形状,而不是构建一个能泛化的配置文件。一个在马具能触及的所有改动下都保持稳定的结果,说明问题超出了马具的范围,它清晰地指向了后训练与马具工作相结合可以继续发力的方向。
做这一切的价值在于成本。在达到相同的最佳运行质量时,调校后的开源模型每次运行的成本大约是 Opus 的十分之一,完整套件上约 4.48 美元对比 43.48 美元,根据精度和提示缓存的不同,这个优势在 3 倍到 10 倍之间。中位延迟也与 Opus 持平,大约每次测试 10 秒。在智能体实际执行的工作上达到接近前沿的水平,同时每次运行的成本更低,这改变了你能负担得起构建和评估的内容。
界限在哪里
马具调校有天花板,知道这个天花板在哪里,和知道取得了哪些胜利同样重要。当故障来自脚手架时,它是正确的工具:比如模型是如何被提示的,工具是如何被描述的,结果、重试和循环是如何处理的。生产环境中导致智能体不可靠的大部分原因都在这里,所以调校马具通常是让一个有能力的模型正常工作最快的方法。
它做不到的是添加模型本身没有的能力。当一个故障对你围绕模型所做的任何改动都没有反应时,这就是一个信号,表明问题存在于模型权重中,解决方案是后训练,而不是再挂一个钩子。知道你在面对哪种故障,才能告诉你应该继续调校还是开始训练。
还有第二条界限值得划出,它存在于马具工作内部。一个改动可以是核心马具改进,能帮助任何智能体;也可以是配置文件配置,编码了某个特定模型的需求。“继续读取”提示就是一个核心改进:它会在任何完整页面读取时触发,所以它应该属于所有人的马具。而将 Nemotron 的指导以带内消息而非系统提示词的形式传递,则是配置文件配置。在任何调校项目中,最有趣的问题是,一个给定的改动实际上处于哪个位置,而原则是尽可能诚实地将每个改动推向核心,因为只有这样的版本,才能在这个模型和这个任务消失后,继续带来回报。
延伸阅读
相关内容
看看你的智能体到底在做什么
LangSmith,我们的智能体工程平台,帮助开发者调试智能体的每一个决策、评估改动,并一键部署。
在页面中展开原始 Markdown
---
title: "调校“马具”,而非模型:一份 Nemotron 3 Ultra 实战手册"
title_en: "LangChain Tunes the Harness, Not the Model — Nemotron 3 Ultra Closes In on Opus 4.8 at 1/10 the Cost"
source: "langchain.com"
source_url: "https://www.langchain.com/blog/tuning-the-harness-not-the-model-a-nemotron-3-ultra-playbook"
published_at: "2026-07-09T00:00:00.000Z"
language: "zh-CN"
topics: ["claude"]
tags: ["研究解读","LangChain","Nemotron","harness","Deep Agents","开源模型"]
review_status: "unreviewed"
---
# 调校“马具”,而非模型:一份 Nemotron 3 Ultra 实战手册
> 通过调校智能体周围的“马具”(提示词、工具描述、中间件),而非模型本身,Nemotron 3 Ultra 在 Deep Agents 评测中几乎追平了前沿模型 Opus 4.8 的成绩,但成本降低了约 10 倍。
## 内容摘要
本文介绍了如何通过调校智能体系统的“马具”(包括系统提示词、工具描述和中间件)来提升开源模型 Nemotron 3 Ultra 的性能,而不改动模型权重。通过数据驱动的迭代循环(评估-观察-诊断-工程-重新评估),作者将 Nemotron 3 Ultra 在 Deep Agents 评测套件上的最佳成绩从 0.80 提升至 0.86,几乎追平 Opus 4.8 的 0.87,而每次运行成本仅为后者
## 为什么值得关注
对于 AI 初学者来说,这篇文章揭示了一个重要事实:智能体的性能不仅取决于模型本身,还取决于围绕模型的“马具”(即提示词、工具描述和中间件)。通过精心调校马具,可以用开源模型达到接近前沿模型的性能,同时大幅降低成本。这意味着即使没有顶级模型,也能构建高效的 AI 智能体,这对于预算有限的开发者和企业尤其有价值。
## 核心要点
- 调校马具(提示词、工具描述、中间件)而非模型,可将 Nemotron 3 Ultra 的 Deep Agents 评测成绩从 0.80 提升至 0.86,几乎追平 Opus 4.8 的 0.87。
- 每次运行成本降低约 10 倍(4.48 美元 vs 43.48 美元),延迟基本持平。
- 调校过程遵循数据驱动的循环:评估、观察、诊断、工程、重新评估,确保改动有效且不引入退化。
- 提示词层面,简短、单一目的的指令比大范围重写更有效;中间件层面,上下文工程(在正确位置注入指导)是关键。
- 马具调校有天花板:它能修复脚手架引起的故障,但无法添加模型本身没有的能力。
# 调校“马具”,而非模型:一份 Nemotron 3 Ultra 实战手册
## 关键要点
- **接近前沿水平的智能体质量,成本却低得多。** 仅调校“马具”(harness),就让 Nemotron 3 Ultra 在 Deep Agents 评测套件上跑出了 0.86 的最佳成绩,几乎追平 Opus 4.8 的 0.87 最佳成绩,而每次运行的成本却低了大约 10 倍(完整套件上约 4.48 美元对比 43.48 美元),延迟也基本持平。
- **评测数据就是马具工作的训练数据。** 每一次改动都经过一个“追踪-驱动”的循环:先用低成本的方式快速筛选,只有当这个改动在多次试验中都能稳定获胜,并且没有导致其他方面退步时,它才算真正有效。
- **匹配度决定了模型有多少能力能用在任务上。** 一个匹配的马具能让模型把能力集中在工作上;一个不匹配的马具则会让模型与“脚手架”对抗,而两者之间的差距会直接体现在分数上,完全不需要改动模型权重。
- **马具调校有天花板。** 它能修复由脚手架本身引起的故障,但无法添加模型权重里没有的能力。所以,如果一个结果在所有马具改动下都毫无变化,那就说明问题出在模型的后训练阶段,而不是需要再挂一个钩子。
## 马具是你能够控制的部分
一个智能体(agent)等于一个模型加上一个马具。模型负责思考,而马具(包括系统提示词、工具描述、中间件)是它工作的“脚手架”。我们以前也调校过围绕前沿模型的马具,但这次,我们想看看用一个开源模型能走多远。
开源模型让这件事变得有趣。它们已经足够好,可以认真用于实际的智能体工作,而且成本只有前沿 API 的零头。你能拿到模型权重,所以可以自己托管和微调模型,或者使用各种云服务商提供的接口,不用担心被锁定。但问题是,一个能力很强的模型,如果放在一个不是为它设计的马具里,表现也可能不佳,这正是我们要解决的问题。
作为 Nemotron 联盟的一员,我们认为 Nemotron 3 Ultra 是在 Deep Agents 内部进行调校的合适模型。NVIDIA 构建 Nemotron 就是为了让它能在智能体马具里工作,我们想看看能把它推到什么程度。
开箱即用的情况下,一个通用的马具并不是为特定模型调校过的。直接使用模型而不调校马具是一个合理的默认做法,但并不是你能做到的最好情况。
马具是模型周围的一切,而模型是内部的引擎。当两者匹配时,模型就能把能力用在任务上。当它们不匹配时,模型就会把能力浪费在与脚手架对抗上,比如反复询问它已经知道的细节、过早停止、或者陷入循环。
匹配度的重要性远超大多数人的预期,我们之前已经展示过这一点。在 Terminal-Bench 2.0 上,[我们让 gpt-5.2-codex 的分数从 52.8 提升到了 66.5](https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering),当时大约是从前 30 名提升到了前 5 名,而且完全没有动模型。当我们[发布针对不同模型的马具配置文件](https://www.langchain.com/blog/tuning-deep-agents-different-models)时,通过遵循提示指南,我们将 tau2-bench 的一个精选子集提升了 10 到 20 分。同样的权重,配上不同的脚手架,就会得到不同的分数。
我们使用数据驱动的方法完成了这些马具端的工作,通过挖掘追踪记录来寻找失败模式。这次的研究对象是 Nemotron 3 Ultra,一个本身就已经很出色的开源模型。这是因为 NVIDIA 专门对它进行了后训练,使其能在各种智能体马具中表现一致,而不仅仅是单轮对话,训练数据是一大套长时间运行、使用工具的复杂任务([NVIDIA 的发布文章](https://developer.nvidia.com/blog/nvidia-nemotron-3-ultra-powers-faster-more-efficient-reasoning-for-long-running-agents/)详细介绍了这种智能体后训练及其背后的架构)。
我们保持模型不变,只改动马具:系统提示词、工具描述,以及模型和工具调用周围的中间件。生成设置保持厂商推荐的默认值,所以下面的所有改进都不是通过调整温度、top-p 或思考预算来实现的。
## 从评测开始
为模型调校马具总是从评测开始。没有学习信号,你就是在瞎猜,而靠瞎猜调校出来的马具只会过度拟合你最后看到的那几个案例。我们把[评测视为马具工程的训练数据](https://www.langchain.com/blog/better-harness-a-recipe-for-harness-hill-climbing-with-evals):每个案例都会提供一个信号,告诉我们智能体是否采取了正确的行动或产生了正确的结果,这个信号会指导下一步的改动。
智能体开发看起来不像普通的软件开发。对于普通软件,你通常知道输入、输出和预期的行为。但对于智能体,输入空间非常广阔,很多输出都是可以接受的,而且对提示词、工具或编排逻辑的一个小改动,可能修复一个案例,却破坏了另一个。所以,这项工作是一个迭代过程,以 LangSmith 的追踪记录作为事实来源,按照一个[循环](https://www.langchain.com/blog/the-art-of-loop-engineering)来运行:
- **评估**。在多个模型上运行行为评测套件。
- **观察**。阅读每个失败运行的追踪记录,看看它在哪、以及如何失败的。
- **诊断**。将失败的轨迹聚类成行为模式。
- **工程**。对马具的某个部分进行一次有针对性的改动。
- **重新评估**。按照成本阶梯逐步推广这个改动,只有当它带来的胜利能持续下去时才保留它。
下面的图表是我们智能体开发生命周期循环的一个变体,专门针对使用基于上述循环的评测环境来调校马具进行了修改:
有两个原则保证了循环的诚实性。首先,一次看起来不错的结果说明不了什么,因为运行结果会因随机性而略有变化。考虑到这一点,一个改动只有在多次试验中都能重复成功,并且没有导致其他方面退步时,才算真正有效。其次,我们在不放弃信号的前提下,尽量降低了测试成本。我们不会在每次改动后都运行完整的评测套件,而是让候选改动先在一个小型、低成本的筛选中进行测试,只有证明了自己,才能获得更广泛、更昂贵的运行机会。
在子集上进行筛选的风险是,可能会遗漏子集未覆盖到的任务上的退步。我们通过保持筛选的代表性来防范这一点:一个改动如果能在涵盖不同行为的样本上成立,那么它在完整运行中通常也成立。通过选取有代表性的样本,我们的筛选在进入昂贵的完整测试之前,就为我们带来了真正的信心。
## 两个层面
### 提示词
在提示词方面,我们的第一反应是重写系统提示词。这是最容易改动的地方,所以每个人都会从这里开始,但根据我们的经验,这也是最被高估的。大范围的重写和泛泛的“做个更好的智能体”之类的指令往往没什么效果,因为一个能力强的模型真正的失败通常不是措辞问题。
真正有效的是重写的反面:简短、单一目的的代码块,专门针对你在追踪记录中观察到的某个失败行为。如果一个模型完成了任务,但从不陈述结果,你就只写这一条指令,别的什么都不加。
```
<final_answer_completeness>
在工具调用成功后,最终答案必须报告具体的结果,而不仅仅是说任务完成了。需要包含回答用户请求的关键实体、操作、标识符、标题、收件人、服务、状态或数值。如果用户问了多个问题,需要根据对应的工具输出逐一回答。
</final_answer_completeness>
```
然而,我们必须小心,因为这些代码块会相互作用。一个单独使用时毫无效果的指令,一旦与马具中其他地方的改动搭配起来,可能就开始发挥作用了。所以我们也测试了组合效果。
### 中间件
当一个行为必须**每次**都发生,而不是**大多数时候**发生时,提示词就做不到了。中间件,也就是在模型及其工具调用周围运行的钩子,承担着两个不同的工作,值得分开来看。
第一个是**代码层面的强制执行**。对模型和工具调用次数设置上限,可以在循环超时之前就结束它。一次性的重试可以吸收瞬时的工具故障。这两者都不需要模型做什么;它们改变的是循环本身的行为。
第二个工作,也是为 Nemotron 做出主要贡献的工作,是**上下文工程**:在模型需要的时候,把正确的信号放在它面前。我们不是把所有规则都塞进系统提示词里,指望模型能记住,而是观察追踪记录中的轨迹,在模型出错的地方注入指导。
最清晰的例子是我们希望遵循的一条规则:当读取文件返回的内容长达一整页时,要假设还有更多内容,并继续读取。把这个规则写在 `read_file` 工具的描述里,一点用都没有。模型读了第一页,就以为拿到了整个文件,然后回答了。我们把同样的文字,一字不改,放到了工具返回的内容里,然后它就开始生效了,因为现在这条规则就出现在模型正在读取的数据旁边。同样的文字,不同的位置,截然不同的结果。在那之后,我们不再只问规则应该说什么,而是开始问它必须出现在哪里才能被模型读到。
同样的模式也体现在信号搭载在哪个消息里,而不仅仅是它是在提示词里还是在工具结果里。Nemotron 对以对话消息形式、在需要时点传递的指导响应最可靠,而不是作为系统提示词中的一条固定规则。所以,我们添加了中间件,先告诉智能体在行动前做计划,然后,一旦计划写好了,再注入第二条消息,要求它在执行前审查计划。在追踪记录中,模型会接收这些注入的消息并据此行动:先做计划,然后回头检查自己的工作。而同样的指令放在系统提示词里,往往就没什么效果。
## 什么没起作用
我们尝试的大部分改动都没能存活下来,这一点值得大声说出来:一个只报告成功的调校循环,通常是在过度拟合。很多看似合理的改动毫无效果,有几个甚至让情况更糟,而且不止一个杠杆只有与其他改动结合时才有效,单独使用则不行。
我们坚持的原则是:保留针对**行为类别**的修复,而不是针对**基准测试**的技巧。一个好的杠杆应该像设计良好的工具一样,基于一个真实的条件(比如,任何返回一整页的文件读取)来触发,而无需知道它面前的具体测试用例是什么。我们放弃了一个改动,正是因为它依赖于某个单一评测中的特定短语:它会让分数更好看,但对我们下一个智能体毫无帮助。
## 调校给我们带来了什么
一个单一的分数只能告诉你智能体变好了还是变差了,但不知道具体在哪里。所以,在信任任何马具改动之前,我们让 Nemotron 在 LangChain 的 Deep Agents 评测套件上运行,这个套件会根据智能体实际花费时间的工作来分别打分:处理文件、调用工具、检索信息、进行多轮对话、总结长文本。这样打分,结果就能指向特定的能力,你就能区分出是马具的问题还是模型的问题。
调校让 Nemotron 3 Ultra 从没有配置文件的基线分数(大约 0.80)提升到了典型运行时的 0.84 左右,最佳运行达到了 0.86,几乎追平了 Opus 4.8 的最佳成绩 0.87(Opus 通常跑在 0.86 左右)。从大约 0.80 的基线开始,没有任何配置文件,这本身就是一个很强的开箱即用结果,也是 NVIDIA 智能体后训练的直接回报:这个模型一上来就非常擅长使用工具和多步骤工作,这为马具提供了一个很高的起点。
**总结能力**的提升空间最大,而调校完全解决了这个问题。没有配置文件时,马具没有提供任何压缩指导,所以模型要么在开始新的庞大任务时跳过压缩,要么从总结过的对话中回答,而不是去读取已卸载的历史文件。配置文件添加了明确的压缩指导,引导模型走向正确的压缩行为。**工具使用**也显著改善。**检索**和**文件操作**开箱即用就已经很强,这再次表明模型是为真正的智能体工作而进行过后训练的,而调校仍然将它们推向了更高水平。把这些改进加起来,你就得到了一个在智能体实际依赖的任务上表现良好的模型。
**对话**是个例外,这条平坦的线本身就很有信息量。这些不是马具能修复的低级故障。它们是长周期行为,比如在长时间的多轮任务中保持后端状态,这类问题更适合通过模型后训练来解决,而不是脚手架。为了它们去调校配置文件,意味着要迎合基准测试的形状,而不是构建一个能泛化的配置文件。一个在马具能触及的所有改动下都保持稳定的结果,说明问题超出了马具的范围,它清晰地指向了后训练与马具工作相结合可以继续发力的方向。
做这一切的价值在于**成本**。在达到相同的最佳运行质量时,调校后的开源模型每次运行的成本大约是 Opus 的十分之一,完整套件上约 4.48 美元对比 43.48 美元,根据精度和提示缓存的不同,这个优势在 3 倍到 10 倍之间。中位延迟也与 Opus 持平,大约每次测试 10 秒。在智能体实际执行的工作上达到接近前沿的水平,同时每次运行的成本更低,这改变了你能负担得起构建和评估的内容。
## 界限在哪里
马具调校有天花板,知道这个天花板在哪里,和知道取得了哪些胜利同样重要。当故障来自脚手架时,它是正确的工具:比如模型是如何被提示的,工具是如何被描述的,结果、重试和循环是如何处理的。生产环境中导致智能体不可靠的大部分原因都在这里,所以调校马具通常是让一个有能力的模型正常工作最快的方法。
它做不到的是添加模型本身没有的能力。当一个故障对你围绕模型所做的任何改动都没有反应时,这就是一个信号,表明问题存在于模型权重中,解决方案是后训练,而不是再挂一个钩子。知道你在面对哪种故障,才能告诉你应该继续调校还是开始训练。
还有第二条界限值得划出,它存在于马具工作内部。一个改动可以是**核心马具改进**,能帮助任何智能体;也可以是**配置文件配置**,编码了某个特定模型的需求。“继续读取”提示就是一个核心改进:它会在任何完整页面读取时触发,所以它应该属于所有人的马具。而将 Nemotron 的指导以带内消息而非系统提示词的形式传递,则是配置文件配置。在任何调校项目中,最有趣的问题是,一个给定的改动实际上处于哪个位置,而原则是尽可能诚实地将每个改动推向核心,因为只有这样的版本,才能在这个模型和这个任务消失后,继续带来回报。
## 延伸阅读
- [通过马具工程改进 Deep Agents](https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering)
- [更好的马具:一份使用评测进行马具爬山优化的配方](https://www.langchain.com/blog/better-harness-a-recipe-for-harness-hill-climbing-with-evals)
- [调校 Deep Agents 以适配不同模型](https://www.langchain.com/blog/tuning-deep-agents-different-models)
### 相关内容
### 看看你的智能体到底在做什么
LangSmith,我们的智能体工程平台,帮助开发者调试智能体的每一个决策、评估改动,并一键部署。
---
英文原文:[LangChain Tunes the Harness, Not the Model — Nemotron 3 Ultra Closes In on Opus 4.8 at 1/10 the Cost](https://www.langchain.com/blog/tuning-the-harness-not-the-model-a-nemotron-3-ultra-playbook)