LangChain:只调 harness 不换模型,让 Nemotron 3 Ultra 跑分逼近 Opus 4.8,成本约 1/10,证明企业无需花重金购买闭源 API

系统提示、工具描述、中间件三处动刀;Deep Agents 套件典型约 0.80→0.84,最佳 0.86 对 Opus 0.87。
作者:LangChain Blog07-09 · 9 分钟⚑ 研究论文
🎧 听播客版0:00 / --:--
0:00 / --:--
研究解读 · 小互解读
五句话看完
  • LangChain 固定 Nemotron 3 Ultra 权重,只改 harness(系统提示、工具描述、中间件),不改模型、不改温度等生成参数。
  • 方法是评测驱动闭环:评测 → 读失败轨迹 → 聚类行为 → 改一处外壳 → 再评测;先小样本筛,再上全套。
  • 提示词用短的单目标指令块;中间件做强制执行 + 在出错点塞信号。
  • 关键机制:同一句规则写在工具描述里无效,塞进工具返回结果就有效;对话中途注入比系统提示常驻更稳。
  • 典型 ~0.80→0.84,最佳 0.86 对 Opus 4.8 最佳 0.87;整套约 $4.48 vs $43.48,中位延迟都约 10 秒/题。
⚑ 立场提示:本文是 LangChain 官方博客的方法论案例,数据来自其 Deep Agents 内部评测与自家 trace 分析,非第三方复现。
1WHAT

他们做了一件什么事

LangChain 发了一份 Nemotron 3 Ultra 的 harness 调优手册:模型不动,只改它外面那层脚手架,看开源模型在 agent 任务上能被抬到多高。

一句话:同一个开源模型,换一套合身的外壳,最佳跑分逼近 Claude Opus 4.8,全套评测成本大约低一个数量级。

◆

为什么值得看:同一套权重、不同脚手架,分数可以差一截。他们此前把 gpt-5.2-codex 在 Terminal-Bench 2.0 从 52.8 提到 66.5,没动模型。这次把同一思路用在开源模型上,并给出接近 Opus 的成本对照。

AGENT = 模型 + HARNESS HARNESS · 这次动刀的部分 系统提示 工具描述 中间件 模型内核 Nemotron 3 Ultra 权重固定 · 不换模型 · 不改温度 / top-p
架构:agent 不是裸模型。外壳(harness)包着内核(模型)。LangChain 这次只拧外壳三块:系统提示、工具描述、中间件;内核权重原封不动。

生成参数保持厂商推荐默认。文中的提升,不是靠把 temperature 拧一下「碰运气」得来的。

模型与 harness 关系示意
官方图:模型在内、harness 在外。合得上,能力花在任务上;合不上,能力花在和脚手架较劲上。图源:LangChain Blog
站内相关解读
AI 自我进化的关键,藏在模型外面那层叫 harness 的外壳里
Lilian Weng 的 harness 工程长文;本篇是 LangChain 在开源模型上的实操手册。
2MISMATCH

外壳不合身时,马力去哪了

开源模型已经能扛真实 agent 活,价格是前沿 API 的零头。但再能干的模型,丢进不是为它建的 harness,也会发挥失常。

打个比方

模型像发动机,harness 像底盘和挡位。发动机再好,挡位和传动对不上,马力也会浪费在空转和打滑上。调 harness,是在改挡位和传动,不是换发动机。

合身 · 能力进任务 模型 读文件 · 调工具 · 交答案 大部分 token 干正事 不合身 · 能力在空转 模型 重复追问 · 提前收工 · 打转 token 和脚手架较劲
同一台发动机,外壳合不合身,决定马力进任务还是漏成空转。左:完整进度条;右:断续空转条。

他们选 Nemotron 3 Ultra,是因为 NVIDIA 后训练时就让它跨多种 agent harness 表现稳定,而不是只练单轮聊天。无 profile 基线约 0.80,地板已经不低,外壳才有得加。

3LOOP

调优靠闭环,不靠猜

没有评测信号就是在猜。Agent 的输入空间大、可接受输出多,改一处可能修好 A 又弄坏 B。所以工作形态是闭环,以 LangSmith 轨迹为真相源。

1 评测 跑套件 2 观察 读 trace 3 诊断 聚类失败 4 改外壳 动一处 5 再评 过筛再全套 闭环回流 只保留:多次试验站得住 · 且不拖累别项 成本阶梯 小样本便宜筛 → 过了才上全套 Deep Agents 先便宜验证,再烧全套预算
闭环:评测给出信号,trace 告诉你失败在哪一步,聚类成一类行为再改外壳一处,过筛后才烧全套预算。单次「看起来不错」不算数。
harness 调优闭环图
官方图:面向 harness 调优的 agent 开发生命周期。图源:LangChain Blog
修行为类,不修单题

聚类的是失败模式(比如「读文件半截就答」),不是某道题的措辞。蹭单题短语涨分的改动会被扔掉。

先便宜后昂贵

候选先过有代表性的小样本;过了再上全套。筛的样本要覆盖不同行为类型,避免筛里没碰到的任务全线回退。

4PROMPTS

提示词:别整页重写,对着失败写一小块

系统提示最便宜,也最容易高估。大段重写和「做个更好的 agent」常常被冲淡,因为能干模型真正的失败点通常不是措辞问题。

大段重写 进上下文 · 容易被冲淡 单目标小块 只修一种失败行为 对着 trace 写 · 可测
左边:整页原则堆上去,信号稀薄。右边:在 trace 里看到「工具成功了却不报结果」,就只写那一条。
可复制示例

任务跑完却不报具体结果时,只加这一块,不塞别的:

final_answer_completeness(原文可抄)
工具成功后,最终回答必须报出具体结果,不能只说「任务完成」。关键实体、动作、标识符、标题、收件人、服务、状态或数值都要写进答案。多问多答,各从对应工具输出取。
<final_answer_completeness>
After tool calls succeed, the final answer must report the concrete result, not just that the task is done. Include the key entity, action, identifier, title, recipient, service, status, or value that answers the user's request. If the user asked multiple questions, answer each one from its matching tool output.
</final_answer_completeness>
5HERO

同一句话,放的位置不同,结果完全相反

这是全文最值得盯的机制。他们想要一条规则:文件读取返回刚好满一页时,默认后面还有内容,继续读。

把这句话写进 read_file 的工具描述,模型读第一页就收工。一字不动,挪到工具返回结果旁边,模型开始继续读。

不是话术问题 · 是注意力落点

模型真正在处理的是「当前眼前的那段内容」。规则离那段内容越远,越像没写;贴在那段内容旁边,才会被读到。

写法 A · 规则在工具描述 系统提示(很远) 工具描述:满页继续读 规则在远处 工具返回 · 第 1 页 注意力主要在这 结果:读一页就答 规则离数据太远 写法 B · 规则贴在返回旁 系统提示 工具描述(普通) 满页 · 请继续读 第 1 页正文 结果:继续翻页 同一句话 · 只是搬家 问题从「该写什么」变成「该出现在模型正在看的地方」
核心机制:左边规则挂在工具说明书里,扫描带落在返回正文上,说明书已在注意力外。右边同样文字贴在返回块顶上,扫描带扫到规则 + 数据。

中间件在干什么:两种钩子

有些行为必须「次次发生」,靠提示词不够。中间件挂在模型调用和工具调用周围:

用户任务 MIDDLEWARE 强制执行 上限 · 重试 塞信号 本案例主力 模型调用 工具 / 答案
强制执行:循环上限、一次性重试。塞信号:在走偏那一刻把正确信息塞到眼前。本案例主力是后者。

对话中途注入:比系统提示更稳

Nemotron 对「进行到需要时出现的一条消息」比系统提示里的常驻规则更听话。中间件于是按这个节奏注两针:

1 MIDDLEWARE 注入 先规划,再动手。不要直接调工具。 2 AGENT 写出计划:读哪些文件、调哪些工具… 3 MIDDLEWARE 第二针 执行前复审计划,查漏洞再动手。 4 AGENT 检查计划 → 再执行(trace 可见接住注入)
时间线:橙色块是中间件往对话里现塞的消息,白色块是模型回应。同样内容写在系统提示开头往往被冲淡;在需要的那一刻出现才管用。
6FILTER

什么留下,什么扔掉

试过的东西大多数没活下来。只报成功的调优循环,通常已经在过拟合。

一堆「看起来合理」的改动 行为类修复 扔掉 无效改动 刷榜短语 留下:真实条件触发 · 不绑定某道题措辞
漏斗:好杠杆对真实工况开火(例如任何满页文件读)。蹭单题短语涨分的改动,讨好分数但学不到下一次 agent 怎么建,扔掉。
7RESULTS

调完数字怎么变

一个总分只告诉你更好或更差。他们按 agent 常干的活分项打分:文件、工具、检索、多轮对话、长上下文摘要。

0.80
无 profile 基线(典型)
0.84
调 harness 后典型分
0.86
Nemotron 最佳跑
0.87
Opus 4.8 最佳(典型约 0.86)
Nemotron 无 profile
~0.80
Nemotron 调后典型
~0.84
Nemotron 最佳
0.86
Opus 4.8 最佳
0.87
分项能力对比图
官方分项图:摘要空间最大、调完几乎拉满;工具使用明显抬;检索与文件基线已强仍再抬;对话几乎不动。图源:LangChain Blog
分项抬升示意(柱高相对,非精确比例) 最大 摘要 工具 检索 / 文件 平 对话 对话平线 = harness 够不着 → 指向权重层
读图:摘要原来最乱(没压缩指引),外壳补上后抬得最多。对话几乎不动,说明长程状态这类问题不在脚手架能拧的范围里。
摘要 / 压缩↑ 最大

无 profile 时没给压缩指引:该压不压,或只凭摘要对话答、不去读卸出的历史文件。补上显式指引后几乎拉满。

工具使用↑ 明显

很多工具失败来自怎么描述、怎么重试、怎么收口,而不只是模型「不会用工具」。

检索 · 文件↑ 再抬

开箱已强(后训练痕迹),外壳微调仍再挖一点。

多轮对话平 · 几乎不动

长程保持后端状态一类问题几乎不动。他们不为此去扭曲 profile 刷榜。

$4.48
调优后开源模型整套约价
$43.48
Opus 同套约价(约 10×)
3–10×
视精度与 prompt 缓存
~10s
中位延迟与 Opus 持平
成本与质量对照图
官方对照:质量接近前沿最佳跑时,全套成本大约低一个数量级。图源:LangChain Blog
8CEILING

外壳拧到哪一层就拧不动了

调 harness 有天花板。认清边界和认清收益一样重要。

脚手架层 · harness 够得着 提示 · 工具描述 · 结果 / 重试 / 循环 生产里 agent 不靠谱的大半问题住在这里 权重层 · 再加 hook 也没用 长程状态 · 改周围都纹丝不动 信号:下一步是后训练,不是再拧外壳
分层:改提示/工具/中间件就跟着变好的,还在脚手架层。周围全试过仍不动的,在权重层。本案例对话项的平线,就是后一种信号。

第二道线画在 harness 内部:什么该进「所有 agent 共用的核心」,什么只是「某一个模型的 profile」。

核心 harness · 所有 agent 都能用 例:满页读取 → 继续读(对任何模型都触发) 模型 profile · 只服务这一台 例:对 Nemotron 用对话内注入,而非常驻规则
尽量把改动往核心推:模型和评测题过期之后,核心层还在付钱。Profile 是适配这一台发动机的挡位,别误当成宇宙真理。

项目里最值得反复问的一句:这个改动,能不能诚实往「核心」推一点?

When a failure doesn't respond to anything you change around the model, that's the signal it lives in the weights, and the fix is post-training, not another hook. LangChain · Tuning the harness, not the model
来源:LangChain Blog《Tuning the harness, not the model: a Nemotron 3 Ultra playbook》(2026-07-08)。数据为文中 Deep Agents 内部评测与成本数字。延伸阅读:Improving Deep Agents with harness engineering;Better Harness;Tuning Deep Agents to different models。本地图解精修版,未部署。
来源
LangChain BlogLangChain Blog·查看主材料
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。