LLM智能路由实践:通过 Harness 工程节约模型成本

这套智能路由不是简单地"随机挑一个模型",而是 Harness 工程的核心组成部分------在每个 turn 开始时先做一次轻量分诊:根据当前问题和最近上下文,在 lowmidhigh 三档业务模型中选择一个最匹配的档位。随后,路由结果会被冻结,贯穿本轮主 Agent、工具调用和子 Agent。

第一阶段解决的是"这件事应该交给多强的模型 ";第二阶段进一步解决"这次生成应该多确定,还是多发散 ",让路由模型额外输出 temperature。两阶段共同构成了 Harness 对模型调用的完整约束体系。


1. 为什么需要智能路由

很多 Agent 系统把模型选择交给用户:在发起任务前,用户先从模型列表中挑选一个模型。

问题在于,用户通常只能形成关于模型能力的模糊认知,很难准确判断某个任务的复杂度,也很难知道不同模型的能力边界。面对不确定性,最自然、也最常见的选择就是"一股脑选最好的模型":简单问答如此,大规模重构也如此。这个方案看似稳妥,但它把四个问题混在了一起:

  • 成本问题:简单任务不需要最昂贵的模型。
  • 延迟问题:每次都走高能力模型,响应时间很难稳定。
  • 质量问题:模型能力越强,不代表它在所有任务上都更合适。工具编排、精确编辑、结构化输出往往更依赖稳定性,而不是单纯增加推理能力。
  • 模型选择问题:模型选择应该交给平台,而不是让用户凭模糊认知做判断。平台可以通过标准化评测、真实任务数据和持续运行反馈,建立模型能力边界与任务类型之间的映射,再由智能路由为用户自动选择更合适的模型------这比用户自行选择更专业。

这套方案的设计思路就是增加一个独立的路由层。这个路由层不是孤立的模块,而是整个 Agent Harness 工程的第一环------Harness 的职责是约束 Agent 的执行过程,让模型调用从"自由发挥"变成"受控执行":

这里的设计不是"多了一个模型调用",而是把模型选择从业务执行中抽离出来------Router 不负责完成用户任务,它只回答一个问题:

当前任务需要多大的模型能力,才足以安全完成?

这是一种典型的入口分诊,也是 Agent Harness 工程的第一道控制闸门。Harness 工程的核心思想是:模型能力本身不是银弹,真正决定 Agent 执行质量的是"在什么场景下、用多强的模型、以什么策略去生成"这三者的匹配度。智能路由就是负责前两者的 Harness 组件。


2. 第一阶段:low、mid、high 三档模型路由

Harness 工程的第一步,是把"选模型"这件事从用户手里收回到平台手里。具体做法是建立三档模型能力档位,由路由模型在入口处做分诊。

2.1 配置不是一个模型,而是一组模型能力档位

SessionModelRouter 的配置核心结构大致如下:

json 复制代码
{
  "model": {
    "router": {
      "base_url": "...",
      "model": "router-model",
      "api_key": "..."
    },
    "low": {
      "model": "small-model"
    },
    "mid": {
      "model": "general-model"
    },
    "high": {
      "model": "strong-model"
    }
  }
}

router 是负责分类的模型,lowmidhigh 是真正执行任务的业务模型。每个档位都可以使用独立的 base_urlapi_key 和模型名。一个档位还可以配置多个 endpoint,系统会通过 endpoint pool 做轮询选择,形成简单的负载均衡和多来源接入能力。

因此,路由的执行调用路径就变成如下:

2.2 三档分别适合什么场景

路由提示词并不是按照"问题字数"简单分类,而是按照任务是否需要工具、上下文、推理和风险控制来判断。

档位 主要场景 典型例子 核心特点
low 真正简单、独立、单轮的任务 简短翻译、基础问答、简单改写、一次性查询 不需要工具,不依赖上下文,成本最低
mid 普通 Agent 工作 常规编码、调试、文件编辑、多步分析、工具调用、MCP/CLI/知识库查询 系统的通用工作档
high 复杂、高风险、需要强推理的任务 架构设计、大规模重构、长上下文综合、多文件高风险修改、复杂算法、Skill/Workflow 编排 用更强模型换取更高的完成可靠性

有两个规则非常关键:

  1. 默认是 mid 。在 lowmid 之间拿不准时,选择 mid,避免因为过度节省而让任务落到能力不足的模型。
  2. 短消息不能直接判定为 low。像"继续""好的""再改下"这样的追问,必须结合最近上下文。如果上一轮正在做架构重构,用户说"继续",它仍然应该继承复杂任务的判断。

2.3 Router 自己也要保持稳定

路由模型的职责是分类,不是创作。因此调用 Router 时固定使用 temperature=0,让分诊结果尽可能稳定。

同时,Router 并不会收到完整的 Agent 历史和所有工具消息,会对输入做压缩:

  • 最多保留最近 4 条 user/assistant 纯文本消息;
  • 每条历史最多 200 个字符;
  • 当前用户输入最多 700 个字符;
  • 跳过 system、tool 和带 tool_calls 的消息;
  • 注入上一次的 tier,帮助短追问保持路由连续性。

这是一项很实际的工程取舍:Router 只需要理解任务,不需要重放整个 Agent 执行现场,它的上下文越小,路由开销和延迟越可控。

2.4 一次 turn,一次路由,整轮冻结

Harness 工程的一个关键原则是:执行策略一旦确定,就要在本轮内保持稳定。系统不是每调用一次 LLM 就重新选择一次模型,而是在本轮任务调用一次路由决策,决策包含如下信息:

  • selected_model:本轮业务模型;
  • selected_provider:本轮业务 provider;
  • tierlowmidhigh
  • source:路由模型、强制档位、默认回退或错误回退;
  • confidencereason:路由模型给出的判断信息;
  • temperature:第二阶段加入的本轮采样参数。

模型选择被确定后,会沿着这条链路传递:

这条"冻结"语义很重要:假设一个任务第一轮判断为 high,后面它连续调用 5 次工具,模型不应该因为某一轮文本突然变短,就在中途悄悄切到 low------一次任务的模型能力应该稳定,否则执行轨迹会出现不可解释的抖动。这正是 Harness 工程区别于"简单路由"的地方:Harness 不只决定用哪个模型,还负责保证这个决策在整轮执行中不被破坏。


3. 第二阶段:从"选模型"升级到"选生成策略"

如果说第一阶段是 Harness 工程在"模型能力"维度上的约束,那第二阶段就是在"生成策略"维度上的补充。

第一阶段解决了"用什么能力的模型",但它仍然没有回答另一个问题:

这次输出到底应该更确定,还是更发散?

例如:

  • 精确修改代码、调试 bug、填写工具参数,需要低随机性;
  • 架构设计虽然复杂,但仍然需要严谨、稳定的推理;
  • 头脑风暴、创意命名、开放式写作,则希望模型探索更多可能性。

所以第二阶段把路由决策从一个维度扩展成两个正交维度:

vbnet 复制代码
模型能力:tier
    low / mid / high

采样策略:temperature
    确定性 ───────────── 发散性

3.1 temperature 解决的是确定性,不是模型能力

路由提示词明确要求:temperaturetier 独立判断。

推荐的语义区间是:

temperature 输出倾向 适合场景
0.0--0.2 精确、稳定、低发散 代码修改、调试、工具编排、事实查询、结构化输出
0.3--0.5 默认平衡 普通问答、常规分析、正常执行
0.6--0.9 发散、开放、多样 头脑风暴、创意写作、多方案生成

注意,复杂度和发散度不是同一回事:

  • 一个 high 档的架构设计任务,可能需要 temperature=0.1,因为它要求严谨;
  • 一个简单的产品名改写任务,可能只需要 lowmid 模型,但可以使用 temperature=0.8,因为它希望多给一些创意。

因此,以下组合是合理的:

任务 tier temperature
把一句话翻译成英文 low 0.1--0.3
修复一个函数的 bug mid 0.1--0.2
设计一个高风险系统架构 high 0.1--0.3
头脑风暴十个产品名 low/mid 0.7--0.9

3.2 动态 temperature 如何进入执行链路

当前实现已经把 temperature 接入了完整的 turn 链路:

3.3 为什么子 Agent 也要继承 temperature

子 Agent 不是一个与父任务无关的新会话,它往往是父 Agent 在本轮执行中通过 spawn 拆出来的子任务。

因此 SubagentManager 会在 spawn 时冻结三元组:

父任务如果使用 temperature=0.15 做精确代码修改,子 Agent 也必须保持相同的生成策略。否则就会出现:父 Agent 在严格执行,子 Agent 却以较高随机性生成工具参数或修改建议,最终把不稳定性重新引入 Harness。

这也是"按 turn 冻结"比"按调用动态变化"更适合 Agent 的原因:同一任务的主 Agent、工具 roundtrip 和子 Agent,应该共享一个可解释的执行策略。这背后是 Harness 工程的一致性原则------Harness 不只约束单次调用,而是约束整条执行链路的策略一致性。


4. 智能路由带来的真实收益:用了更多的 token,费用支出减少了 20% + 任务更精准

如下是 5--6 月 30 天使用的 token 总量:

如下是 6--7 月 30 天使用的 token 总量:

对比结论: token 使用量提升了 3 倍,费用支出减少了 20%。另外从后台数据来看,同一轮对话的质量也同步提升,并未退化。

4.1 任务更精准:质量没有显著退化

费用降了,质量会不会跟着掉?这是最自然的问题。我们在 Agent 测试集上做了对比:

  • Baseline :所有任务统一使用 claude-opus-4.8
  • 路由方案low 档使用 deepseek-v4-promid 档使用 glm-5.2claude-sonnet-5high 档使用 claude-opus-4.8

在开源测试集上,路由方案的准确率相比全量 opus 只下降了 2%--5%,落在了可接受范围以内。考虑到费用节省 20% 的收益,这个精度损失是值得的。换句话说:

用最强模型做所有事情,和用路由把简单任务分流给更便宜的模型,最终的结果差异很小------但后者省下的成本是实打实的。


5. 结语:智能路由是 Harness 工程的一个切面

这套智能路由经历了一个很自然的演进:

第一阶段的价值是成本和能力匹配:简单任务不要浪费高能力模型,复杂任务不要冒险使用能力不足的模型。

第二阶段的价值是执行策略和任务目标匹配:代码、调试和工具编排需要确定性,创意写作和头脑风暴需要发散性。

最终,一个成熟的 Agent 系统不应该只有一个"最强模型"按钮,而应该具备一套可观察、可降级、可复现的决策机制------这正是 Harness 工程的目标。智能路由是其中负责模型调用的切面,它和工具约束、上下文管理、执行回退等机制共同构成了完整的 Harness:

  • tier 选择合适的模型能力;
  • temperature 控制本次输出的确定性;
  • 用 turn 级冻结保证主 Agent、工具循环和子 Agent 的策略一致;
  • 用 Harness 约束执行过程,减少工具调用漂移和无效返工;
  • llm_usage 和路由 metadata 验证到底省了多少 token、提升了多少成功率。

Harness 工程的本质,不是让每个请求都变得更聪明,而是让每个请求都用刚刚好的能力、刚刚好的随机性,在受控的执行框架内完成刚刚好的工作。

相关推荐
一次旅行几秒前
2026‑08‑22 AI产业深度解读|Anthropic自研芯片布局、SGLang权重缓存守护进程、Agent任务作弊审计、AI原生SDLC
人工智能·缓存·sglang
Dawson Zhu2 分钟前
【AI架构前沿】MEMO:解耦推理与记忆,破解大模型“知识更新“与“灾难性遗忘“的两难困境
人工智能·架构·aigc·agi
江湖有缘5 分钟前
跨平台AI终端Wave:智能SSH与文件管理
运维·人工智能·ssh
IT_陈寒12 分钟前
Python装饰器把我坑惨了,原来这样用才不掉链子
前端·人工智能·后端
吃旺旺雪饼的小男孩13 分钟前
自动驾驶图像分割开源数据集指南(2026)
人工智能·开源·自动驾驶
A133455514 分钟前
视频特效字幕怎么翻译?保姆级AI字幕与外挂字幕教程
人工智能·音视频
飞哥数智坊16 分钟前
我给 DeepSeek 看了两次截图,才发现 Vision 真正的价值
人工智能·ai编程·deepseek
飞哥数智坊27 分钟前
AI提升了人效,但组织却接不住释放的生产力
人工智能
飞哥数智坊35 分钟前
什么才叫真正的端到端?
人工智能
武科大许志伟1 小时前
从并行进化到分布式进化计算读 A Survey on Distributed Evolutionary Computation
人工智能·分布式·演化计算