fine-tune-request-routing · ZH · 2026-10-24

需要微调模型的请求:聚合站到底转发了什么、什么会回落

从请求路径、模型 ID 解析和后端路由三个层面解释聚合站如何处理微调/自定义模型 ID 的调用,说明哪些情况会被原样转发、哪些会因后端不支持而失败,并给出用 header、重试与降级链设计回落的可操作做法。

微调模型(fine-tuned model)和自定义模型 ID 在聚合站里是一个容易被误解的环节。很多人以为“一把 key 调所有模型”意味着微调模型也会被自动处理,实际上一把 key 只解决鉴权与路由入口,真正能否服务取决于后端是否有对应资源。下面按请求路径拆开说。

请求进入聚合站后发生了什么

当你用同一个 API key 请求一个模型 ID 时,聚合站大致做三件事:

  • 鉴权与计费归属:确认 key 有效、余额充足,并把这次调用记为一次扣费请求。
  • 模型 ID 解析:判断这个 ID 是平台已知的公开模型,还是一个不在标准清单里的自定义/微调 ID。
  • 后端路由:把请求交给持有该模型能力的上游渠道。

关键点在于第二步。公开模型 ID 有明确映射表;微调模型 ID 通常是“某账号下某次微调产生的私有标识”,它和平台级模型清单不在同一个命名空间里。

哪些情况会被原样转发

以下情形,聚合站通常会把请求体(包括 model 字段)原样透传给上游:

  • 上游渠道声明支持该 ID,例如某个渠道明确代理了 OpenAI 兼容接口,而微调 ID 属于该渠道对应账号。
  • 请求使用 OpenAI 兼容的 /v1/chat/completions 形式,model 只作为字符串传递,聚合站不做改写。
  • 你在请求里带了渠道倾向或路由相关的 header,聚合站按你的指定转发。

原样转发的含义是:聚合站不校验这个 ID 是否真实存在,它只负责把字符串送到后端。因此“转发成功”不等于“调用成功”。

哪些情况会在到达后端前失败

  • 模型 ID 不在任何渠道的能力声明里:聚合站无法确定路由目标,直接返回错误,不会发起上游请求。
  • 上游返回模型不存在:请求被转发了,但上游不认识这个 ID,错误码由上游产生并回传。
  • 上游认识 ID 但无权限:微调模型往往绑定创建它的账号或组织,换一个上游账号就无权访问。
  • 计费口径不匹配:微调模型的价格通常与基础模型不同,聚合站按统一规则扣费,可能无法精确对应,具体以站点说明为准。

区分“聚合站拒绝”和“上游拒绝”很重要:前者说明路由层没有目标,改请求参数无用;后者说明目标存在但资源不对,需要换渠道或换 ID。

设计回落方案

微调模型调用天然比公开模型更脆弱,建议在客户端而不是聚合站一侧做回落。

用显式模型 ID 分层

把回落链写死在配置里,而不是靠猜:

  • 首选:你的微调模型 ID。
  • 次选:该微调所基于的基础模型 ID(公开模型,路由稳定)。
  • 兜底:同任务下另一个公开模型。

回落只在“确定性失败”时触发,例如模型不存在、无权限、路由无目标。对于超时和限流,先重试同一 ID,再考虑降级。

用请求头做可控路由

如果你的聚合站支持按 header 指定渠道或优先级,可以在请求里显式声明。这样回落逻辑可以放在服务端配置里,客户端只需维护一条链路。要注意 header 的语义以站点文档为准,不要假设跨站通用。

记录错误来源

在日志里区分三类失败:聚合站路由失败、上游模型不存在、上游权限失败。这三类的处理方式不同,混在一起会导致回落被误触发,把本可成功的微调调用降级成基础模型,增加成本也损失效果。

不要假设自动回落

聚合站一般不会替你把微调模型请求“自动换成”基础模型。静默替换会让输出分布变化而你不知道。回落应当是你显式配置、可观测的行为。

实践建议

  • 上线前对微调 ID 做一次探测调用,确认它在你使用的 key 和渠道下可达。
  • 把微调 ID 当作配置项而非硬编码,方便渠道变更时替换。
  • 在提示词与输出解析上,让基础模型也能作为回落目标工作,避免回落即报错。
  • 关注计费差异:微调调用与公开模型调用的扣费口径可能不同,回落会改变单次成本,按站点实际规则核算。

一句话总结:一把 key 解决的是入口统一,微调模型能否被服务取决于后端是否持有对应资源。把回落放在客户端、显式配置、记录失败来源,比期待聚合站自动兜底更可靠。