宠物问答助手上线前两周,我把模型调度问题拆成了三层
·ThisToken.AI·
Use Cases场景案例ThisToken.AI
一、业务背景与痛点
我所在的三人小团队接了一个宠物医疗问答助手的活:用户上传宠物症状描述,助手给出初步分析和就医建议。听起来简单,实际跑起来发现三类问题叠加在一起:
- 问题难度差异极大。“狗狗拉稀要不要禁食”和“猫糖尿病的胰岛素剂量调整”完全是两个难度级别。全用顶级模型,token 成本一天就烧掉三百多;全用便宜模型,严肃医疗问题经常答非所问,甚至给出危险建议。
- 医疗场景的幻觉代价高。模型一本正经地编造药物剂量,比答不上来更糟糕。我们需要可控制的兜底和转人工机制。
- 接了三家模型厂商(一家主力、一家备用、一家本地小模型),SDK 版本、鉴权方式、错误码各不相同。每次主力厂商接口波动,我们就要翻两个项目的代码改适配层,平均一次折腾两小时。
团队商量后决定:与其在业务代码里到处 if-else 选模型,不如先做分层,再把模型调用收口。
二、架构设计:三层分级 + 网关收口
2.1 分层模型策略
按风险和难度把请求分为三层:
- L1 轻量层:寒暄、常见病科普、喂养常识。走便宜快模型,响应要求 2 秒内。
- L2 分析层:症状描述 + 初步分析。走主力大模型,附系统提示词约束“不做确诊、给出就医建议”。
- L3 兜底层:紧急症状(误食异物、抽搐、难产)或模型置信度低、连续两次质检不过的请求。直接走人工值班兽医队列,同时给出固定的安全提示文案。
分流靠一个轻量分类器:先用规则关键词(“误食”“抽搐”“生产”等)硬路由到 L3,再用一个小的意图分类模型区分 L1/L2,分类本身耗时不到 200ms。
2.2 为什么用统一 AI 网关
最初我们每层各自直连厂商 SDK。两轮迭代后统计了一下维护成本:
- 改造前:三家厂商 SDK 散落在 4 个服务里,每次密钥轮换、错误码变更、限流策略调整,平均每周花 3~4 小时同步修改;一次厂商接口抖动,排查要跨两个仓库看日志。
- 改造后:所有模型调用收敛到统一网关,业务代码只面对一套统一的请求/响应结构和错误码。厂商切换变成网关后台改一行配置;预算控制、调用日志、按 key 限流都在网关层统一做。
粗算下来,仅模型接入维护这一项,从每周约 3.5 小时降到 20 分钟以内,一个月省出约 12 小时——对三人团队来说等于凭空多出一天半的开发时间。更关键的是兜底逻辑变简单了:网关层做健康检查和自动切换,L2 主力模型超时或报错,自动降级到备用模型重试一次,业务代码完全无感知。
三、关键实现步骤
- 梳理分级规则(1 天):拉出测试期 500 条真实问题样本,人工标注层级,提炼 L3 关键词表和 L1/L2 分类特征。
- 接入统一网关(0.5 天):注册网关,把三家模型的调用替换为统一的 REST 接口,密钥由网关托管。
- 实现路由与兜底(2 天):分类器 + 网关降级策略 + 人工队列对接。
- 加质检护栏(1 天):对 L2 输出做一次廉价的规则审查(是否含具体剂量数字、是否有免责声明),不合格升级 L3。
- 灰度观察(3 天):看分层命中率、成本、转人工率三个指标再放开。
核心路由伪代码:
def route(question: str, ctx: dict) -> Route:
# 第一层:安全关键词硬路由,优先级最高
if hit_keywords(question, EMERGENCY_KEYWORDS):
return Route(level="L3", target="vet_queue")
# 第二层:意图分类决定 L1 / L2
level = classifier.predict(question) # "light" or "analysis"
if level == "light":
# 轻量模型,失败直接礼貌兜底,不升级
return Route(level="L1", target=gateway.model("cheap-fast"))
# L2:主力模型 + 网关自动降级备用模型 + 质检
return Route(
level="L2",
target=gateway.model("main", fallback="backup", timeout_ms=8000),
post_check=dosage_safety_check, # 不过则升级 L3
)对应的兜底流程清单:
- 请求进入 → 安全关键词命中?→ 是:转人工 + 固定安全提示
- 未命中 → 意图分类 → L1:轻模型;失败返回默认科普文案
- L2:主力模型 → 网关检测异常/超时 → 自动切备用模型重试一次
- L2 输出 → 剂量/免责质检 → 不通过 → 升级 L3 转人工
- L3 队列 5 分钟无人接单 → 短信提醒值班兽医
四、效果对比
上线稳定后一个月的数据(我们自己的测试与灰度统计,非客户数据):
| 指标 | 改造前 | 改造后 |
|---|---|---|
| 单次问答平均成本 | ¥0.11 | ¥0.038(L1 占 62% 流量) |
| 模型接入维护时间 | 每周 3~4 小时 | 每周 20 分钟 |
| 厂商故障恢复 | 手工切换约 2 小时 | 网关自动降级,用户基本无感 |
| 高风险问题误答率 | 灰度初期约 3% | 质检 + 硬路由后接近 0(全部转人工) |
成本下降 65%、维护时间下降 90%,这两项对独立开发者来说就是能不能持续跑下去的差别。
五、几点经验
- 分级之前先定风险,而不是先定模型。L3 的硬关键词表是整个系统里最便宜也最有效的部分,一个下午就能写完,却挡掉了几乎所有危险输出。
- 兜底要分“模型兜底”和“流程兜底”。网关解决模型可用性,人工队列解决模型能力边界,两者缺一不可。
- 统一网关的真正价值是“变更隔离”。厂商侧任何变化只影响网关配置,业务代码不动。团队越小,越应该把这类横切关注点前置解决,而不是指望以后有空重构。
如果你也在做类似的分层模型应用,想先把多厂商接入、降级和用量管控这些脏活收口,可以试试统一 AI 网关的服务,注册入口在这里:https://api.thistoken.ai/register
---
想直接跑通示例?访问 https://api.thistoken.ai/register 注册 ThisToken.AI,获取 API Key 后即可开始。