@sydneyrunkle: https://x.com/sydneyrunkle/status/2105704739585565066

X AI KOLs Timeline 工具

摘要

LangChain 分享了他们如何在其智能体运行时(agent harness)内部为开源编码智能体 Open SWE 构建模型路由器:将不需要前沿智能水平的任务路由到更便宜的模型,在无可测量的质量变化的情况下,将每条对话线程的中位成本降低了 64%。

https://t.co/sGbf2IE6q0
查看原文
查看缓存全文

缓存时间: 2026/10/02 06:36

如何在 Harness 中构建模型路由器

前沿 LLM 的成本依然居高不下。随着 Agent 无处不在并以巨大规模运行,这种成本变得难以承受。幸运的是,大多数 Agent 并不需要在每个任务上都具备前沿级别的智能。模型厂商自己也这么说:Anthropic 的模型选择指南指出,“对于许多应用,从 Claude Haiku 4.5 这样更快、更具成本效益的模型开始,可能就是最优方案。”

超过某个临界点后,你就会遇到收益递减:更强的模型带来的质量提升微乎其微,而成本和延迟却持续攀升。一个优秀的 Agent 具备模型-harness-任务的匹配度:为给定任务配备正确的模型和正确的上下文。模型路由器(model router) 就是为每个任务挑选模型的那个组件。我们认为这个路由决策应该属于 Agent harness,而不是通用网关,因为选择正确的模型需要 harness 已经组装好的领域和任务上下文,而这恰恰是通用网关通常所缺少的。

最近我们在 LangChain 就切身体会到了这个痛点——编码 Agent 的月度支出开始快速攀升。听到客户也有同样的担忧后,我们开始为 Open SWE(我们的开源编码 Agent)构建一个高效的模型路由器。与之前始终使用顶级前沿模型的基线相比,它将每个会话的中位成本降低了 64%,同时质量没有可测量的下降。本文将介绍我们是如何构建路由器的、学到了什么,以及你可以如何开始将模型路由集成到自己的 Agent 中。

第一步:理解任务

我们的试验场是 Open SWE,工程师们通过 Slack 和 Web UI 使用它来询问关于代码库的问题并请求代码更改。在构建路由器之前,我们需要了解开发者使用 Open SWE 的任务类型。我们从 LangSmith traces 中提取了会话级数据:收到的请求类型,以及每个会话的成本和轮次数(作为复杂度的近似度量)。探索工作是在 LangSmith Custom Apps 中进行的,我们直接在 Open SWE traces 之上构建了一个小型界面。

我们取了一周的交互式会话,并用 LLM 分类器按任务类型对每个会话进行了标注。LangSmith Insights 也可以为你完成这类跨 traces 的分组。代码更改占主导地位:新功能(22%)和 Bug 修复(17%)是两个最大的类别,其次是测试或无操作运行(16%)。这些类别是基于每个会话的标题和元数据的启发式判断。

按任务类型划分的一周 Open SWE 交互式会话

按任务类型划分的一周 Open SWE 交互式会话

按任务类型划分的一周 Open SWE 交互式会话

我们还研究了 Agent trace 的特征如何随任务类型而变化。我们发现,与功能开发调查相关的会话往往更长,成本和轮次中位数也更高;而与测试和发布流程相关的会话则相对简短且成本较低。

为了判断“复杂度“,我们同时使用了总成本和调用次数两个信号:成本与复杂度直接相关(更大的任务使用更多 token),而调用次数更为微妙——高次数可能意味着任务更难,也可能意味着模型需要多次后续调用才能完成任务。

六大任务类别(不含“其他“),8 月 29 日至 9 月 5 日:会话数、Agent 调用中位数、LLM 成本中位数(含已归属用量的会话)以及复杂度构成

六大任务类别(不含“其他“),8 月 29 日至 9 月 5 日:会话数、Agent 调用中位数、LLM 成本中位数(含已归属用量的会话)以及复杂度构成

六大任务类别(不含“其他“),8 月 29 日至 9 月 5 日:会话数、Agent 调用中位数、LLM 成本中位数(含已归属用量的会话)以及复杂度构成

在数据收集时,所有 Open SWE 会话都通过顶级前沿模型进行路由。上述数据表明,考虑到复杂度的分布范围,Open SWE 处理的许多任务可能并不需要前沿智能。

这种任务复杂度的差异为我们提供了一个值得验证的假设:路由器可以从初始请求中推断任务类型和难度,并将其发送到更便宜或更快的模型,而不降低产出效果。

第二步:理解模型

Artificial Analysis Intelligence Index 在一组共同的任务上对模型进行评分,并报告每个任务的成本,因此你可以将它们绘制在同一条“智能 vs. 成本“曲线上。帕累托前沿(Pareto frontier)就是既最便宜又最聪明的模型集合。

智能 vs. 每任务成本,包含帕累托前沿、我们为路由器选择的三个模型,以及作为参考的其他几个模型。图表数据:Artificial Analysis Intelligence Index,截至 2026 年 9 月 9 日。

智能 vs. 每任务成本,包含帕累托前沿、我们为路由器选择的三个模型,以及作为参考的其他几个模型。图表数据:Artificial Analysis Intelligence Index,截至 2026 年 9 月 9 日。

智能 vs. 每任务成本,包含帕累托前沿、我们为路由器选择的三个模型,以及作为参考的其他几个模型。图表数据:Artificial Analysis Intelligence Index,截至 2026 年 9 月 9 日。

我们沿曲线选定了三个模型,各自在成本、速度和智能之间取得不同的平衡:

  • Fast(快速): GLM-5.3-Flash (xhigh)

  • Balanced(均衡): GPT-5.6 Sol (medium)

  • Performance(高性能): GPT-6 Astra (low)

我们从不同的提供商选择了模型,而且快速档是一个开源模型。GLM-5.3-Flash 与闭源模型并肩坐在帕累托前沿上,这进一步证明开源模型已经跨过了某个门槛。LangChain 是模型无关的,通过统一的模型接口在不同提供商之间保持一致,因此当更好的模型出现时,只需修改路由器的一行代码即可完成替换。

第三步:在 Harness 中构建路由器

在摸清任务构成并选定三个层级之后,我们接下来需要将任务与模型匹配起来——通过读取每个传入的请求,将其发送到能够成功处理它的最便宜的层级。在 LangChain 中,这个决策很自然地适合放在 middleware 中,它可以在不改变 Agent 其他任何部分的情况下替换 Agent 调用的模型(参见 dynamic model selection)。

Open SWE 中的路由器基于会话的第一条 human message 运行,由三部分组成:

  • 基础 prompt: 告诉分类器它的任务:选择最便宜的、最有可能完成该任务的模型。

  • 每个层级的标准: 用简短的自然语言描述每个层级应当承接的工作。

  • 分类器模型: 读取请求,并根据标准和 prompt 选择层级。

通用 benchmark 只是一个起点。每个层级的标准应从两个来源编写:你自己对任务的分析,以及各提供商对其模型擅长领域的说明。我们结合了第一步的任务拆解结果与 GPT-5.6 Sol、GPT-6 Astra 和 GLM-5.3-Flash 的提供商指南,编写了基础 prompt 和每个层级的标准。

这些标准是为 Open SWE 的任务集编写的,因此路由器与 Open SWE 所处理的任务深度耦合。这就是它应该属于 harness 的原因——harness 已经具备了 Agent 的任务特定上下文(它的 prompt、工具和领域知识),而通用网关缺乏这些。

我们的第一版使用了一个带结构化输出的 LLM,以用户的请求作为 prompt。现在分类器运行在 Jev 上,这是一个新发布的决策模型,使分类速度提升了近 50 倍。具体做法请参见《Building a Harness with Jev》。

路由器只在每个会话开始时选择一次模型,并在整个会话中使用该模型。自然的质疑是:如果会话中途换了话题或复杂度变化怎么办?虽然这个朴素的路由器设计没有涉及这一点,但我们在下面的“下一步“部分会讨论中途重新路由的问题。

第四步:跟踪任务结果

路由器的价值在于降低成本,但前提是质量没有下降。路由器需要做对两件事:所选模型必须能够完成任务,而且它应该是能做到的最便宜、最快的模型。这意味着你需要一种跟踪任务结果的方法。有两种方式:

  • 离线评测让路由器在固定数据集上运行,因此你可以安全且可重复地比较不同版本。问题在于数据集:它必须看起来像你的真实流量,并按照用户关心的标准来评分。对编码 Agent 而言,这意味着 PR 质量和可评审性,而这些在离线环境下很难评分。

  • A/B 测试将实时会话在路由器和单一模型基线之间分开,并在你能够为每个会话度量的成功指标上进行比较。实时流量天然就是一个具有代表性的数据集,但缺点是用户可能会暴露在一个可能并非最优的路由器之下。

我们进行了 A/B 测试,使用两个结果信号:

  • 合并的 PR: Open SWE 现在会记录它提交的每个 PR,以及该 PR 是被合并还是关闭。每会话合并的 PR 数量成为了我们的主要成功指标。

  • 用户反馈: 我们在 Open SWE 中添加了点赞和点踩功能,用户可以对任何会话进行评分,包括那些从未产生 PR 的提问。每次评分都会作为反馈记录在该会话的 LangSmith trace 上。

我们在一个 LangSmith Custom App 中跟踪了这两项指标。合并的 PR 是更强的信号。反馈较为稀疏,因为只有一小部分会话会被评分,但正是在这些反馈中我们听到了关于路由错误的信息,比如下面第一次测试中引用的那些评论。

实验

我们的第一次 A/B 测试将路由器与始终使用我们最强模型进行了对比:一半的会话通过路由器,另一半始终使用 GPT-6 Astra,总计 973 个会话。

质量没有可测量的变化。经路由的会话中有 29.2% 以合并的 PR 结束,而对照组为 27.3%(p=0.49)。PR 提交率也持平(38.9% 对 39.6%,p=0.82)。

成本大幅下降。经路由的会话中位成本为 $0.94,对照组为 $2.61,降低了 64%。均值下降了 42%,p90 下降了 37%,因此节省并非来自少数便宜的离群值。

大多数请求并不需要最强的模型。在经路由的会话中,56% 发送到均衡档,34% 发送到快速档,只有 10% 发送到高性能档。各层级之间的成本差距非常大:快速档的中位会话成本为 $0.097,均衡档为 $1.50,高性能档为 $2.88,差距达 30 倍。

每会话 LLM 成本,9 月 16 日至 22 日(对数刻度):始终使用 GPT-6 Astra 对比经路由,以及经路由的会话按层级拆分。各层级小提琴图的宽度与会话数量成比例。白色线条和标签标记中位数。

每会话 LLM 成本,9 月 16 日至 22 日(对数刻度):始终使用 GPT-6 Astra 对比经路由,以及经路由的会话按层级拆分。各层级小提琴图的宽度与会话数量成比例。白色线条和标签标记中位数。

每会话 LLM 成本,9 月 16 日至 22 日(对数刻度):始终使用 GPT-6 Astra 对比经路由,以及经路由的会话按层级拆分。各层级小提琴图的宽度与会话数量成比例。白色线条和标签标记中位数。

用户反馈也指向了同一方向。当一个简单请求在 GPT-6 Astra 上运行时,工程师们直接指出了过度支出,评论如:“对这个查询来说太贵了“和“这个请求不应该被路由到性能档模型。”

💡 鉴于对照组是我们最昂贵的模型,这个结果并不令人意外。但这是一个许多 Agent 都能从中受益的改变:很多 Agent 在质量上过度倾斜,最终导致超支。特别是对于任务种类多样的 Agent,路由可以显著降低成本。

我们还将路由器与相反的对照进行了测试:一半的会话通过路由器,另一半始终使用快速档模型。我们在一天之内就终止了这次测试,没等它产生具有统计意义的结果。工程师们几乎立刻指出了仅使用快速档那一组的问题——低质量的产出严重影响了他们的工作效率。

下一步

这个模型路由器的实现是一个概念验证,为构建最优路由器奠定了基础。以下是几个我们可以探索的改进方向:

  • 在 DeepSWE 或其他编码 benchmark 上对路由器进行评测,这样我们就可以在受控基线下评估路由决策,而不必仅依赖生产流量上的 A/B 测试。

  • 为子 Agent 选择模型。 目前子 Agent 独立于路由器选择自己的模型。对子 Agent 也进行路由,特别是在更长耗时的任务上,可以进一步降低成本。

  • 会话中途重新路由。 当新消息与之前的请求差异足够大时(比如一个问题变成了一个 Bug 修复),切换模型可能是值得的。代价在于 prompt cache:切换模型会使缓存失效,因此新模型需要以全价重新读取整个会话。对于异步 Agent 来说,这个代价通常可以忽略,因为在 TTL 较短(比如 5 分钟)的情况下,缓存在人类轮次之间往往已经过期了。

  • 通过更多信号细化路由标准,例如从 traces 中挖掘用户情绪:找到用户感到沮丧的会话,这可能意味着该任务需要更强的模型。

快速上手

如果你正在为自己的 Agent 添加路由,以下是我们建议的起点:

  • 理解任务。 你的 traces 中真实记录了 Agent 被要求做什么,LangSmith Insights 帮助你从中发现规律,从而在选择层级之前先看清任务构成。

  • 理解模型。 沿着成本-智能曲线选择几个模型,参考现代 benchmark。LangChain 的模型接口跨提供商通用,因此你可以在任何时候替换模型,无需重新设计应用。

  • 在 Harness 中构建路由器。 将路由视为上下文工程,类似于经典的特征工程:结合你 Agent 的领域,决定路由器应该看到哪些信息,才能就模型匹配做出最佳决策。

  • 跟踪任务结果。 在路由之前就建立成功的衡量方式:评测、在线评估器或 trace 上的用户反馈。如果构建评测数据集的成本太高或太困难,对实时流量进行 A/B 测试也是很好的选择。

随着新的模型(包括开放权重模型)不断涌现并登上前沿,适合某项任务的最佳模型也在不断变化。由于 LangChain 是模型无关的,要享受这些进展,你只需要更换一个层级,而无需重建你的 Agent。

要为自己的 Agent 添加路由,你可以使用我们新发布的 model routing middleware。将你的基础 prompt、模型层级以及每个层级的标准交给它,它就会在每个会话开始时选择一个模型。欢迎在 X 或 LangChain GitHub issues 上分享你的反馈。

延伸阅读

  • Open SWE on GitHub

  • Building a Harness with Jev

  • LangSmith Observability docs

  • LangSmith Evaluation docs

  • LangSmith Custom Apps

  • Log user feedback in LangSmith

  • Artificial Analysis Intelligence Index

  • Model routing middleware (with jev)

致谢

本文由 Sydney Runkle 和 Eugene Yurtsev 撰写。

感谢 Mason Daugherty、Kevin Frank、Nithin Bose、Alex Lunev 和 Harrison Chase 对本文的悉心反馈。也感谢支持这次实验的 OpenSWE 团队!

相似文章

@pirroh: https://x.com/pirroh/status/2104976589180252218

X AI KOLs Timeline

Replit 分享了其「free the models」harness 设计思路:核心智能体循环(而非外部路由器)会在任务推进过程中自主选择子智能体层级、投入力度与委派方式。据报道,该方法使用 GPT-6 Astra,在 DeepSWE 和 Terminal-Bench 上超越了基于路由器的基线方案与 sidekick 架构,同时以最低成本保持了质量水平。