手搓生产级 AI Agent 系统(13):别让所有任务都上旗舰模型——路由、预算和降级
文章摘要前十二篇把生产级 Agent 的执行链路基本补齐了任务理解、Tool Calling、状态、Memory、Planner-Executor-Reviewer、Checkpoint、人工审批、多 Agent、安全沙箱和发布评测。系统走到这里会出现一个非常现实的问题它能跑了但可能太贵。一个 Agent 请求背后可能包含规划、检索、三四次工具调用、子 Agent、Reviewer 和最终生成。如果这些节点全部默认使用最强模型成本会很快变成产品上线后的主要约束反过来如果为了省钱全部切到低价模型复杂任务成功率和异常恢复能力又会下降。这一篇不再讨论“哪个模型最好”而是实现一套模型调度层根据任务类型、风险、上下文、失败历史和预算选择模型为每个 Run 预留成本允许低价模型先跑、失败再升级高风险任务直接锁定高能力模型Provider 故障时按照能力而不是名字降级所有路由结果进入评测闭环最终用真实 Task Success 和 Cost per Successful Task 调整策略。先看一个很容易烧钱的 Agent用户请求读取三份合同比较差异 查询供应商历史履约数据 生成采购建议并发给负责人。一个未经成本治理的流程可能是旗舰模型理解任务 旗舰模型生成计划 旗舰模型合同A 旗舰模型合同B 旗舰模型合同C 旗舰模型供应商分析 旗舰模型Reviewer 旗舰模型最终邮件8 次模型调用。如果中间两个步骤失败重试10—12 次再加长合同 Context单请求成本非常容易失控。而实际上里面很多任务不需要同一档模型。更合理的拆法任务分类低成本模型 合同结构抽取低成本/中档模型 复杂差异判断高能力模型 供应商数据整理低成本模型 最终风险判断高能力模型 邮件润色中档模型这就是模型调度层存在的意义。一、不要让业务代码直接写模型名最糟糕的写法chatClient.model(gpt-5.6-sol).prompt(...)然后散落在几十个 Service 里。模型升级、价格变化、Provider 故障时全项目改。业务代码应该请求“能力”publicrecordModelRequirement(TaskTypetaskType,CapabilityLevelcapability,RiskLevelrisk,intcontextTokens,booleantoolsRequired,booleanvisionRequired,DurationlatencyTarget,BigDecimalmaximumCost){}路由层再决定具体模型。二、模型注册表publicrecordModelProfile(StringprofileId,Stringprovider,Stringmodel,CapabilityLevelcapability,longcontextWindow,booleantoolCalling,booleanvision,BigDecimalinputPricePerMillion,BigDecimaloutputPricePerMillion,SetTaskTypepreferredTasks,RiskLevelmaximumAutonomousRisk,ModelHealthhealth){}配置示例models:-profile-id:fast-agentprovider:googlemodel:gemini-3.7-flashcapability:STANDARDinput-price-per-million:0.75output-price-per-million:3.75-profile-id:balancedprovider:openaimodel:gpt-5.6-terracapability:ADVANCEDinput-price-per-million:2.50output-price-per-million:15.00-profile-id:frontier-openaiprovider:openaimodel:gpt-5.6-solcapability:FRONTIERinput-price-per-million:5.00output-price-per-million:30.00-profile-id:frontier-anthropicprovider:anthropicmodel:claude-opus-5capability:FRONTIERinput-price-per-million:5.00output-price-per-million:25.00价格必须版本化。Gemini 3.7 Flash 当前促销价格到 2026 年底不能把这套价格永久写死。三、先做“硬过滤”再做评分Router 第一步不是让 LLM 选模型。先用确定性条件淘汰不合格候选publicListModelProfileeligible(ModelRequirementreq,ListModelProfileprofiles){returnprofiles.stream().filter(p-p.health().isAvailable()).filter(p-p.contextWindow()req.contextTokens()).filter(p-!req.toolsRequired()||p.toolCalling()).filter(p-!req.visionRequired()||p.vision()).filter(p-p.capability().atLeast(req.capability())).toList();}这样可以防止模型自己“推荐”一个根本不支持需求的候选。四、任务难度不要只让 LLM 自评任务难度可以来自一组信号输入长度 文档数量 工具数量 历史失败率 是否需要多步计划 是否开放式判断 是否高风险 是否需要代码执行 是否存在冲突证据publicrecordTaskComplexity(intscore,intdocumentCount,intexpectedToolCalls,booleanmultiStep,booleanambiguous,booleanconflictingEvidence,RiskLevelrisk){}模型可以参与分类但最终阈值由程序控制。五、默认模型不应该是最强模型我更推荐先选满足能力要求的最低成本模型然后允许升级。示例publicModelProfileselectInitial(ModelRequirementreq,ListModelProfilecandidates){returncandidates.stream().filter(p-p.capability().atLeast(req.capability())).min(Comparator.comparing(this::estimatedUnitCost)).orElseThrow();}但“最低成本”不是单纯按输入价排序还要结合历史成功率。六、真正应该优化的是 Cost per Successful Task定义CPS 总成本 / 成功任务数假设Model A 单次 $0.02 成功率 60% Model B 单次 $0.04 成功率 95%如果失败要重试A 未必便宜。所以 Registry 里还要维护线上统计publicrecordModelTaskStats(StringprofileId,TaskTypetaskType,longsampleCount,doubletaskSuccessRate,doubleretryRate,doublep95LatencyMs,doubleaverageInputTokens,doubleaverageOutputTokens,BigDecimalcostPerSuccessfulTask){}七、升级式路由第一次使用低成本模型。出现以下条件升级结构化输出连续失败 Reviewer阻断 Tool循环 证据冲突 低置信 任务超出能力 用户要求更深入分析publicEscalationDecisionevaluate(AgentStepResultresult,AgentTracetrace){if(trace.retryCount()2){returnEscalationDecision.yes(RETRY_LIMIT);}if(trace.toolCallCount()8){returnEscalationDecision.yes(TOOL_LOOP_RISK);}if(result.hasBlockingConflict()){returnEscalationDecision.yes(EVIDENCE_CONFLICT);}returnEscalationDecision.no();}八、升级不是重新跑整个 Agent这是很重要的一点。错误第5步失败 →换旗舰模型 →从第1步重跑会浪费已完成检索已生成 Artifact已执行 ToolToken时间。正确Checkpoint Artifact Step Ledger只升级当前失败节点。九、Run BudgetpublicrecordAgentRunBudget(BigDecimalmaximumCost,longmaximumInputTokens,longmaximumOutputTokens,intmaximumModelCalls,intmaximumEscalations,Instantdeadline){}每个步骤执行前先预估并预留。十、预算预留publicrecordModelCallReservation(StringreservationId,StringrunId,StringstepId,StringmodelProfile,BigDecimalreservedCost,longreservedTokens,InstantexpiresAt){}执行前Estimate →Reserve →Call →Settle避免并行 Sub-Agent 同时把剩余预算花掉。十一、如何估成本publicBigDecimalestimateCost(ModelProfilemodel,longestimatedInput,longestimatedOutput){BigDecimalinputBigDecimal.valueOf(estimatedInput).divide(BigDecimal.valueOf(1_000_000)).multiply(model.inputPricePerMillion());BigDecimaloutputBigDecimal.valueOf(estimatedOutput).divide(BigDecimal.valueOf(1_000_000)).multiply(model.outputPricePerMillion());returninput.add(output);}生产代码要处理精度和舍入这里只展示思路。十二、预算不足时怎么降级顺序我会这样设计1. 取消可选 Sub-Agent 2. 减少 Reviewer 轮次 3. 压缩 Context 4. 使用缓存 Artifact 5. 切低成本模型 6. 缩短输出 7. 返回部分结果并说明缺失不能降级的权限 高风险审批 幂等 安全规则 租户隔离十三、Provider 故障的 Fallback 不应只按名字不要GPT失败 → Claude Claude失败 → Gemini应该按 Capability Contract 找替代publicListModelProfilefallbacks(ModelProfilefailed,ModelRequirementrequirement){returnregistry.available().stream().filter(p-!p.profileId().equals(failed.profileId())).filter(p-p.capability().atLeast(requirement.capability())).filter(p-p.contextWindow()requirement.contextTokens()).sorted(Comparator.comparing(this::historicalSuccess).reversed()).toList();}十四、Fallback 还要考虑行为差异不同 Provider 的Tool SchemaReasoningPrompt CacheStructured Output多模态拒绝策略都可能不同。所以要有 Provider AdapterpublicinterfaceModelGateway{ModelCallResultcall(ModelProfilemodel,NormalizedModelRequestrequest);}业务层只看到统一请求。十五、模型切换时Prompt 也可能需要 Profile不要假设一份 Prompt 在所有模型上表现相同。publicrecordPromptProfile(StringpromptId,StringbaseVersion,MapString,StringmodelOverrides){}但 Override 不要无限分叉否则无法维护。优先让 Prompt 保持通用只对明显差异做少量适配。十六、健康检查publicenumModelHealth{HEALTHY,DEGRADED,RATE_LIMITED,UNAVAILABLE}健康度来自错误率 429 P95 超时 Provider状态 连续失败处于 DEGRADED 的模型可以降低权重不一定完全摘除。十七、熔断短时间连续超时 →打开熔断 →新请求路由其他模型 →半开探测 →恢复不要让每个 Agent Step 自己独立疯狂重试。十八、重试和 Fallback 是两回事Retry同一个模型再试 Fallback换另一个模型错误分类可重试网络抖动 临时 5xx 少量 429应 Fallback模型不可用 持续限流 Context不支持 能力不匹配不应自动重试权限失败 策略拒绝 错误业务参数 真实副作用结果未知十九、路由决策必须记录publicrecordModelRoutingDecision(StringdecisionId,StringrunId,StringstepId,StringselectedProfile,ListStringcandidateProfiles,StringreasonCode,BigDecimalestimatedCost,StringpolicyVersion,InstantcreatedAt){}否则一个月后成本上涨你不知道为什么全走了旗舰模型。二十、核心指标agent_model_call_total{ profile, task_type, result } agent_model_escalation_total{ from, to, reason } agent_model_fallback_total{ reason } agent_task_success_rate{ profile, task_type } agent_cost_per_success{ profile, task_type } agent_budget_exceeded_total二十一、最容易被忽略的指标Escalation Rate如果某类任务80% 都从 Flash 升级到 Sol说明默认路由就错了。如果只有 5% 升级 且最终成功率接近旗舰模型这才是高性价比路由。二十二、用离线评测初始化路由上一篇的评测平台可以直接给 Router 提供先验Task Type × Model → Success Rate → Cost → P95新模型上线时先影子测试不直接替换默认模型。二十三、再用线上数据持续校准路由策略每周或每月更新离线 Benchmark 线上 Task Success 成本 人工修改 失败分类不要实时让算法自动改路由权重尤其高风险系统。先生成候选策略再经过 Canary。二十四、多 Agent 的预算要从父 Run 分配Run Budget $2 ├─Planner $0.15 ├─Research $0.50 ├─Finance $0.40 ├─Legal $0.40 ├─Reviewer $0.30 └─Reserve $0.25子 Agent 不能认为自己有完整 $2。否则并发一开总预算马上穿透。二十五、一定要留安全预算我会提前保留Reviewer 异常恢复 最终输出的预算。不要前面研究 Agent 把钱花光最后连 Review 都跑不起。二十六、一个实用的初始策略如果没有任何历史数据可以先用低风险高频低成本模型 普通企业任务中档模型 高风险 / 模糊 / 长任务旗舰模型再通过实际数据优化。别一开始就做一个复杂的 ML Router。规则路由更容易解释和调试。二十七、上线检查□ 业务代码不直接写死模型名 □ Model Registry包含能力、价格、健康度 □ 路由先做硬能力过滤 □ 默认不是最高价模型 □ 失败支持当前Step升级 □ 升级不重跑已完成副作用 □ Run有总预算 □ 并行调用前原子预留预算 □ Fallback按能力契约选择 □ Retry与Fallback错误分类明确 □ Provider差异由Adapter处理 □ 路由决策可审计 □ 统计Cost per Successful Task □ 监控Escalation Rate □ 新模型先评测和影子再进主路由写在最后2026 年的模型竞争越来越激烈更强的模型不断出现Flash 类模型又不断把价格往下压开放权重模型同时在扩大部署选择。这意味着企业架构不应该继续问“我们到底选哪一个模型”更好的问题是“哪一类任务在什么风险和预算下应该由哪个模型处理”模型调度层的价值就是把这个问题从人工争论变成数据和策略。一个成熟的 Agent 系统不会把最贵模型当默认答案也不会为了省钱把所有任务都塞给便宜模型。它会知道什么时候该省什么时候该升级什么时候该降级什么时候应该直接停下来交给人。这才是生产环境里的“模型智能”。

相关新闻

AI Agent开发进阶:LangGraph、MCP与Workflow三大形态解析与实践

AI Agent开发进阶:LangGraph、MCP与Workflow三大形态解析与实践

1. 先搞清楚“三大形态”到底在解决什么问题 如果你正在做AI Agent开发,并且感觉自己的项目还停留在“调用API、处理返回、结束任务”的简单循环里,那这篇文章就是为你准备的。很多人一听到LangGraph、MCP、Workflow这些词,第一反应是“又一个…

2026/8/18 7:42:38 阅读更多 →
第5讲:主从复制与高可用机制

第5讲:主从复制与高可用机制

前四讲我们构建了一个功能完整的消息队列——Producer 可以发送消息,Broker 可以持久化存储,Consumer 可以组消费。但这里有一个致命问题:Broker 是单点。 如果 Broker 宕机,整个消息队列就不可用了。这一讲,我们来实…

2026/8/18 7:42:38 阅读更多 →
Windows系统文件TaskApis.dll丢失找不到问题解决

Windows系统文件TaskApis.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/8/18 7:42:38 阅读更多 →

最新新闻

专业软件安装与维护策略:从Photoshop 2026看数字创作环境构建

专业软件安装与维护策略:从Photoshop 2026看数字创作环境构建

你有没有遇到过这种情况:刚打开一个设计文件,或者正准备处理一张图片,突然弹出一个熟悉的窗口——“This unlicensed Adobe app has been disabled”。那一刻,工作流瞬间中断,所有计划都被打乱。这不仅仅是弹窗的问题&…

2026/8/19 8:51:48 阅读更多 →
编程语言性能深度解析:从原理到场景的实战选型指南

编程语言性能深度解析:从原理到场景的实战选型指南

“哪种编程语言运行速度最快?”——这可能是技术社区里最常被问及,也最容易引发争论的问题之一。新手开发者希望找到一个“终极答案”来指导学习方向,而资深工程师则往往对这种简单比较嗤之以鼻,认为脱离了具体场景谈性能就是“耍…

2026/8/19 8:51:48 阅读更多 →
XUnity翻译器零门槛上手:给Unity游戏装个“隐形字幕组“,从部署到调优一篇讲透

XUnity翻译器零门槛上手:给Unity游戏装个“隐形字幕组“,从部署到调优一篇讲透

XUnity翻译器零门槛上手:给Unity游戏装个"隐形字幕组",从部署到调优一篇讲透 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你心心念念的日式RPG终于下载完毕&#xff…

2026/8/19 8:51:48 阅读更多 →
免费导出微信聊天记录的完整指南:用WeChatMsg把十年对话永久留在自己电脑里

免费导出微信聊天记录的完整指南:用WeChatMsg把十年对话永久留在自己电脑里

免费导出微信聊天记录的完整指南:用WeChatMsg把十年对话永久留在自己电脑里 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitH…

2026/8/19 8:51:48 阅读更多 →
VideoDownloadHelper 完整上手指南:开源免费的 Chrome 视频下载插件,保姆级教程带你轻松抓取网页视频

VideoDownloadHelper 完整上手指南:开源免费的 Chrome 视频下载插件,保姆级教程带你轻松抓取网页视频

VideoDownloadHelper 完整上手指南:开源免费的 Chrome 视频下载插件,保姆级教程带你轻松抓取网页视频 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirror…

2026/8/19 8:51:48 阅读更多 →
免费实时翻译Unity游戏文本:XUnity自动翻译器上手全攻略

免费实时翻译Unity游戏文本:XUnity自动翻译器上手全攻略

免费实时翻译Unity游戏文本:XUnity自动翻译器上手全攻略 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 如果你曾把一款心仪的Unity游戏下载到本地,却在开场三分钟就被满屏外语劝退…

2026/8/19 8:50:47 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →