大可的 AI Builder 手记
跟随系统
颜色主题
长沙小桌实战
大可 Dako
大可 Dako大可 DakoAI Builder · Agent 实践者用 AI 做真正能用的产品。专注探索 Agent 工程化落地、Vibe Coding 实践与商业化交付。
内容平台即将上线,敬请期待
不是所有请求都值得用最贵的那个01按任务分档分类抽取走轻档,难推理才上重档简单活走贵档,账单虚高02主备降级主模型失败自动切备用备用没真跑过等于没有03格式归一出到业务代码的是同一个结构换模型就解析失败04固定用例验证每次换模型跑同一组用例只靠感觉,掉了也看不见✓ 限流、超时、版本下架都是常态
一边按任务分档省钱,一边靠主备切换保命。四件事都落在你自己那一层封装里。

模型选型

大部分请求用不上最贵的那档,但主模型一定会挂。分档、备用、格式归一、留痕,四件事都做在同一层薄封装里。

不是所有请求都值得用最贵的那个模型,而备用模型只有真的跑过才算数。这两件事必须在同一层里解决,否则分档省下的钱会被一次故障全部收回。

读完你能回答:

  • 挑厂商时该比哪几件事,而不是比谁家模型分高?
  • 怎么按任务分档,为什么多数时候不需要动态路由?
  • 备用通道必须验证什么,切换时最容易在哪里崩?
  • 换了模型,怎么知道效果没变差?

挑厂商不能只比谁家模型分高

榜单每个月都在翻,背下来没有意义;而模型能力是明面上的东西,谁都能测。真正决定你会不会出事的是另外几件。

一、数据怎么处理。输入会不会被用于训练、留存多久、能不能写进合同。这一条决定你能不能接客户数据。

二、区域可用性。用户在哪、合规要求在哪,服务就得在哪。数据跨区这件事,在有些行业里直接不成立。

三、模型名稳不稳定。你今天固定的那个名字,半年后是不是还指向同一个东西。

四、一个版本能不能消失。能不能钉住一个具体版本、它什么时候下线、下线前给多少通知。

后两条最容易被忽略,因为平时不出问题。但你的产品建立在「它会一直这么表现」这个假设上,而这个假设只有厂商能保证。

能力那一条当然也要比,但比法不是看榜单,而是拿自己的用例跑一遍。便宜与贵的排序、自家场景的强弱,都只能由这一次实测给出。

你怎么够到模型,决定了出事时谁负责

同一个模型,从哪条路接进来,差别不在功能,在责任归属。

  • 直接调厂商。版本、额度、故障处理都由它一家负责,代价是每家单独开户结算。
  • 通过云平台调同一个模型。多一层采购和合同流程,换来发票与合规资质,也换来一个中间环节。
  • 从模型托管平台取权重自己跑。责任全在你,换到的是控制权。
  • 经过一个聚合服务中转。省去逐家对接的麻烦,但请求内容经过你不完全掌握的第三方,链路随时可能被上游切断。

要问清的只有一句:你钉住的那个版本是不是你真拿到的那个,你的数据经过了谁。中间环节越多,出事时定位越慢。

不是所有请求都值得用最贵的那个

很多团队的做法是选一个最强的模型,全站都用它。这种做法最省事,代价是又贵又脆:账单贵,是因为大量请求本来够不上那个档次;系统脆,是因为那一个模型出问题,全线就跟着停。

先接受一个前提:你收到的请求本来就不是同一类。「把这张发票的金额和税号抽成字段」和「依据三年的销售记录推演明年该收缩哪条产品线」,难度根本不在一个量级上,现实中却经常交给同一个模型处理。

分档只需要守住一条:小模型够用就别上大的。这条纪律在厂商自己的工程指南里也是同一个口径:能用简单方案解决的,不要往上加复杂度。anthropic-agents

  • 轻档:归到这里的活是分类、打标、字段抽取、格式转换。这类任务可能的答案很少、对错一目了然,小模型完全够,而且响应更快、价格更低。
  • 中档:问答、摘要、内容生成、日常改写都归这一档。它是主力,大部分场景靠它覆盖。
  • 重档:多步推演、复杂代码、方案权衡才用得上。需要推理模型,但要控制它在总量里的比例。

怎么判断某个请求该走哪一档?顺序是先看能不能过线,再看谁做得更好。先让轻档试一遍,过线就到此为止——自己攒的那一小撮真实用例 在这里起的作用就是那条及格线。

收益通常很大:把量最大的几个简单功能降到轻档,账单能降一大截,用户完全感觉不到。

分档靠功能入口,不靠猜复杂度

多数场景下「智能路由」是多余的。按功能入口做静态分配就能解决问题:发票字段抽取这个功能固定走轻档,客服回复润色固定走中档。

真正需要动态判断的只有一种情况:同一个入口进来的请求,复杂度分布得很开。何况动态判断本身往往也要调用一次模型,它有开销,也有判错的可能——省下来的钱得先能覆盖它自己。

静态分配还带来一个额外的好处:同一条链路的输入结构固定下来,前缀缓存 就更容易命中。而动态路由会让同一个入口的请求落到不同模型上,命中率随之变差。可见分档与缓存之间存在牵制,两者要一起考虑。

那一层薄封装值在哪里

上面每一件事——分档、切换、格式归一、打点——都发生在同一个位置:你自己代码里那一层薄封装。

它存在的理由不是架构美观,而是业务代码不应该直接绑在某一家厂商的接口上。绑上去之后,换模型的成本不是改一个地方,而是翻遍整个代码库。

这一层至少负责三件事:

  • 统一入口。业务代码只说「做这个任务」,不说「用哪家」。
  • 格式归一。不管哪个模型返回什么,出到业务代码那里的都是同一个结构。备用模型的格式差异必须在这里被吸收掉,不能漏到上层。
  • 留痕。每次调用用了哪个模型、花了多少、有没有降级,都在这里记录。

顺带说一个现象:现在多数厂商的请求格式都向同一个事实标准靠拢,这让「换一家试试」变得很容易。但容易换不等于可以随便换——格式相似掩盖了行为差异,同一段提示词在不同模型上的表现可以差很远,这一点只能靠实测发现。所以封装层真正值钱的地方,是它让实测和切换都变成低成本的动作。

备用通道没跑过就等于没有

模型服务会限流、会超时、会报错、会某天下线一个版本。这些都属于日常,而不是意外。

降级做起来比预想的更容易出岔子,三个最容易踩的地方:

备用通道从未真实运行过。配置里填了它,却没有人在你的提示词下验证过它到底表现如何。等到真出事切过去,才发现它返回的格式都和主模型不一样,解析逻辑当场就对不上了。没跑过的备用不能算备用,比较稳妥的做法是让它长期分担一部分真实流量。

两边的输出格式不兼容。这一条最常见。你的解析逻辑是照着主模型的输出写的,一换就变样。格式约束 在主模型身上管用,不代表备用模型也管用。

降级发生了却没人知道。切换悄无声息地完成、没有留下任何记录,接着有人来反馈「今天回答不太对」,排查半天找不出原因。每一次降级都必须留痕,降级率要能在监控上看得到。

还有一条产品决策必须提前定下来:降级之后要不要告知用户?如果降级明显损害了质量,含糊地照常输出,往往比坦白说明更糟。

效果有没有变差,只能靠一组固定的题

调档位也好,换模型也好,启用备用也好,每次动作之后都得回到同一个疑问上:效果有没有变差?这件事凭感觉判断不了。

方法很朴素:准备一组固定的用例。素材取自真实请求,先攒三十条左右即可,既要覆盖常见情况,也要留几条特别刁钻的边界。每次打算动模型,先让它跑一遍,然后和上一轮结果摆在一起逐条对照。评估这件事怎么做得更系统,官方有一整套工具和做法可以直接借。openai-evals

三条实践提醒:

换了模型,提示词通常也要跟着调。各家模型对同一段提示词的响应方式差别很大。第一轮结果不理想时,先针对新模型改一版提示词再评价——直接判死刑往往冤枉了它。

平均值会掩盖问题。平均分持平,底下可能是「多数情况变好、少数情况崩掉」。真正要盯的是最差的那几条,用户投诉的正是它们。

先让一部分流量走过去。小范围放几天再全量,比在测试环境里反复跑一百遍更容易暴露真实问题。上线不是开关 讲的是同一套节奏。

这组用例会跟着产品一起变,所以它本身也是要维护的资产——评估集本身要养。

这一条推不出什么

推不出「所以选型是一次决定」。模型半年换一代,价格也在动,选型是每隔几个月要重做一次的事。

也推不出「所以分档越细越好」。每多一档就多一条链路要评测、要监控、要准备备用。档位数量应该由任务差异决定,不由成本焦虑决定。

真正的判断标准只有一条:同一批请求,整体表现不变的前提下,账单更低。达不到这一条,任何分档都只是给自己增加维护面。而这件事能做成的前提是成本本身可归因——成本要能归因到每一步 讲的是怎么让它可归因。

到这里,怎么把它用得又稳又省,能讲的方法都讲了。还剩一类它给不了的东西:你们自己的业务、文档和内部概念,不在它语料里。怎么补上这块,从一次请求能装下多少说起。

参考资料

  1. Building effective agents — Anthropic
  2. Evals — OpenAI Docs