最近模型圈的几件事放在一起看,信号很一致:模型能力开始按风险等级、按使用场景、按调用者身份分层发布了。
Claude Fable 5.1 全面开放,同一个底层模型还拆出 Mythos 5.1,只向网络安全和生命科学领域的审核机构开放;OpenAI 则确认 GPT-6 Astra 达到自家安全框架的 Critical 级,最强能力只开放给小范围受信项目,普通用户拿到的是默认收紧的版本。过去"最强的模型谁都能调、调到的都是完整能力",现在变成"同一个型号有好几个档位,档位之间不仅是价格差,还有安全边界和数据留存差异"。
对做 AI 应用的团队来说,这个变化的直接影响不是"换哪个模型",而是模型的接入面变复杂了。这篇文章不讨论模型本身,只聊工程上怎么接住这个变化。
三个绕不开的工程问题
当一个团队要同时接三到五家模型供应商、十几个模型出口时,最先暴露的不是选型问题,而是三个基础问题:
第一,凭证散落。 每个工程师手里可能都有一把到几把不同厂商的 Key,有的存在 .env,有的在 CI 配置里,有的干脆写在代码里。没人说得清现在有多少 Key 在生效、分别挂在哪个项目下。
第二,调用写死。 业务代码里直接写死厂商地址和模型名,看起来简单,但每次供应商调价、限流、下线模型,都要改代码重新发版。
第三,账算不清。 月底拿到的是一张多家厂商的混合账单,分不清哪个业务线烧了多少钱,更说不清某次异常消耗是谁的调用引起的。
模型越多,这三个问题叠加的复杂度不是线性增长,而是组合爆炸。
一种可行思路:控制面 + 执行面
解决问题的通用做法,是像云资源管理那样,在应用与模型之间加一层"治理面"。这个治理面通常分两层:
- 控制面负责"定规则":管身份、管凭证、管策略。
- 执行面负责"执行规则":在每次调用时校验身份、匹配模型、做拦截或审计。
落到具体能力上,至少要覆盖三点:
- 统一凭证:不直接把云厂商 Key 暴露给开发者,而是签发可撤销的虚拟凭证,绑定项目、部门、可用模型白名单、额度和限流。
- 统一路由:业务代码不写死厂商地址,而是声明"我要什么能力",由路由层匹配到具体的模型档位和预算策略;某出口限流或涨价时自动降级到备选。
- 全量审计:每次调用是谁发起的、用了哪个出口、消耗多少、有没有触碰策略边界,全部留痕。
一个很关键的设计是配置里不出现任何密钥。项目配置只描述意图(intent),比如:
{
"logicalModel": "coding-assistant",
"provider": "anthropic",
"keyAlias": "dev-team-default"
}
密钥放在本地加密的 Vault 里,通过代理在运行时注入。这样换 Key、加厂商都不需要改业务代码——配置描述的是"需求",不是"某个厂商的某把钥匙"。
调用侧也不直接碰各厂商 SDK,而是走统一入口:
# 统一入口示例:只声明能力,不关心背后是哪个厂商
resp = client.complete(
logical_model="coding-assistant",
message="review this diff",
)
由代理层负责把 logical model 解析成实际的 provider 与 model,并在解析前后完成身份校验、预算扣减与审计上报。
落地时的几点建议
把这类治理层放到云上时,有几个工程细节值得注意:
接入形态要灵活。 本地开发用本地代理就够了;容器化部署时用 Sidecar 同 Pod 注入;生产环境则建议收敛到一个统一的托管入口,便于集中执行策略。
策略下发要考虑网络抖动。 控制面更新策略后,执行面依赖远端拉取,一旦网络抖动可能导致放行策略失效。可靠的实现会给执行面配"last-good"缓存:拿不到最新策略时,沿用上一份已知良好配置,而不是直接放行或直接拒绝。
审计与对账要分开口径。 实时估算口径用于日常监控,账单口径用于月底与厂商账单核对,两者并存才能定位"估算便宜、账单爆表"这类偏差。
风险拦截要有分级动作。 对调用的内容检测不要只做"放行/阻断"二值判断,更实用的做法是分级动作:命中低风险规则时仅告警或改写,命中高风险规则(越狱、提示词提取、敏感数据外发)才阻断并改路由。
小结
模型分层发布是厂商的安全选择,也符合企业按场景组合选型的需求,方向本身是健康的。但它把"接入治理"从加分项变成了基础项——没有统一凭证、路由和审计,模型能力越强,应用侧暴露的风险面反而越大。
把这一层独立于具体模型去建设,还有个额外好处:模型怎么换代都不影响治理框架,新模型接入只是一次配置。前端模型竞争还会继续,把入口管好,比追逐每一代新模型更值得先做。