# 客户端只有一个模型:网关按对话状态自动分档

> 把模型选择从用户端拿掉:客户端只暴露一个模型名,网关按对话状态(plan / 执行)自动分档,强模型规划、性价比模型执行,用户无需选模型、配置不逐台漂移。

规范链接: https://www.gatellm.io/zh-CN/use-cases/automatic-model-tiering/

把模型选择从用户界面拿掉 —— 用户端只暴露一个模型名,规划走强模型、执行落性价比模型,分档发生在请求本来就要经过的那一跳上。

## 社区真正在抱怨什么
「每个人设置里的模型都不一样,同一份 prompt 在两个人那里跑出不同结果」「新人第一周问得最多的就是该选哪个模型」「我们要下线一个模型,得逐台改开发机的环境变量」—— 模型选择被推给了最没有依据做这个判断的人:用户看不到自己的用量,更判断不出这次请求值不值得上强模型。
一刀切降到便宜模型又会掉档:规划与架构判断交给小模型,返工比省下的钱更贵。而真正该分的是「这次请求在做什么」—— 规划还是执行,这件事客户端从来就没告诉过网关。

## GateLLM 怎么做
客户端只保留一个模型名,网关侧用 from "*" 的全量映射把客户端请求的任何名字归一 —— 用户在自己设置里改成别的也不改变落点。用户端不再需要解释「该选哪个」。
分档依据是对话里本来就有的标记:Claude Code 的 plan 模式会注入 Plan mode is active(进入)与 Exited Plan Mode(退出)。脚本挂在入口模型的 before 槽,从末尾消息向前扫描、取末次出现的标记判定当前状态,再调 context.useModel() 切路由 —— 判定是字符串位置比较,不另起一次分类模型调用,也不多加一跳网络。
自动分档必须挂 before 槽:after 槽拿到的是翻译后的上游 body,读不到客户端注入的标记,且 after 槽的 useModel 只能同协议,而 plan 到执行是跨模型路由切换。入口模型与执行模型的 request_payload 类规则(如 prompt_cache_key)要各配一份 —— plan 态不切走、用入口模型的规则,执行态切走后用目标模型的规则。

## 落地的 5 个手段
- 入口归一:客户端只暴露一个模型名,from "*" 全量映射把任何客户端名归一为指定落点
- 自动分档:before 槽脚本从末尾向前取末次标记切路由 —— 进入标记会永久留在对话历史,用「是否包含」判断会永远误判为 plan 态
- 多协议护栏:脚本开头先判 context.sourceProtocol,非 Anthropic 请求直接放过 —— 同一个入口模型服务多种客户端时不会被误切走
- 可观测:日志模型列 SW 标签标记脚本切路、MM 标签标记身份映射;统计与计费按最终模型名归集,每次分档的落点可审计
- 零客户端配合:改配置不用逐台改开发机、映射与规则热生效(唯一例外:脚本内存上限 SCRIPT_MEMORY_LIMIT_MB 改动需重启)

## 常问问题
### 客户端还能自己选模型吗?
能选但选了不改变落点:全量映射把任何请求名归一,脚本 useModel 是管理员强制改路、不受客户端权限约束。用户端只暴露一个名字,就不用再解释该选哪个。

### 为什么不用专门的模型路由器或分类模型?
延迟与形态。独立路由器要多一跳、通常还要多一次分类调用;而这里的分档信号是对话里本来就存在的标记文本,判定是从末尾向前取末次标记的位置比较,跑在请求本来就要经过的路径上。协议翻译、鉴权、计量本来就都在网关,分档不必再引入第二个组件去重复这些。

### 脚本切了但日志没报错、路由也没变?
多半是脚本内存溢出:每个脚本跑在独立 QuickJS 沙箱里(堆上限 SCRIPT_MEMORY_LIMIT_MB,默认 64MB),溢出时按 log-and-continue 静默丢弃本次全部副作用(含 context.useModel)。Claude Code 的几十个工具定义会先占一份内存,这是脚本层消除不掉的下限 —— 先把上限调高(改动需重启)。是否切走看日志模型列的 SW 标签。

- [完整教程:脚本按 plan 模式切模型(docs 站)](https://docs.gatellm.io/zh-CN/howto/script-switch-model-by-plan-mode)

## 相关场景
- [强制模型使用策略:钉死 agent 实际跑的模型](https://www.gatellm.io/zh-CN/use-cases/enforce-model-policy.md)

## 相关页面
- [首页](https://www.gatellm.io/zh-CN/index.md)
- [定价](https://www.gatellm.io/zh-CN/pricing.md)
- [成本计算器](https://www.gatellm.io/zh-CN/calculator.md)
- [关于](https://www.gatellm.io/zh-CN/about.md)
- [预约演示](https://www.gatellm.io/zh-CN/demo.md)
- [常见问题](https://www.gatellm.io/zh-CN/faq.md)
- [对比 AI 网关](https://www.gatellm.io/zh-CN/compare.md)
- [对比 LiteLLM](https://www.gatellm.io/zh-CN/compare/litellm.md)
- [对比 OpenRouter](https://www.gatellm.io/zh-CN/compare/openrouter.md)
- [对比 Alibaba Cloud AI Gateway](https://www.gatellm.io/zh-CN/compare/alibaba-cloud.md)
- [对比 Azure API Management](https://www.gatellm.io/zh-CN/compare/azure-apim.md)
- [对比 Apigee](https://www.gatellm.io/zh-CN/compare/apigee.md)
- [对比 Cloudflare AI Gateway](https://www.gatellm.io/zh-CN/compare/cloudflare.md)
- [对比 Kong AI Gateway](https://www.gatellm.io/zh-CN/compare/kong.md)
- [对比 Portkey](https://www.gatellm.io/zh-CN/compare/portkey.md)
- [LiteLLM vs Kong AI Gateway 对比](https://www.gatellm.io/zh-CN/compare/litellm-vs-kong.md)
- [LiteLLM vs OpenRouter 对比](https://www.gatellm.io/zh-CN/compare/litellm-vs-openrouter.md)
- [LiteLLM vs Portkey 对比](https://www.gatellm.io/zh-CN/compare/litellm-vs-portkey.md)
- [场景方案](https://www.gatellm.io/zh-CN/use-cases.md)
- [降低调用成本](https://www.gatellm.io/zh-CN/use-cases/reduce-cost.md)
- [做到高可用](https://www.gatellm.io/zh-CN/use-cases/high-availability.md)
- [多租户隔离](https://www.gatellm.io/zh-CN/use-cases/multi-tenant.md)
- [合规与审计](https://www.gatellm.io/zh-CN/use-cases/compliance-audit.md)
- [从症状排障](https://www.gatellm.io/zh-CN/use-cases/troubleshooting.md)
- [混合多供应商模型栈](https://www.gatellm.io/zh-CN/use-cases/mixed-model-stack.md)
- [在 Office 里自托管用 AI](https://www.gatellm.io/zh-CN/use-cases/self-hosted-office-ai.md)
- [Token 用量可见与归因](https://www.gatellm.io/zh-CN/use-cases/token-ops.md)
- [Token FinOps: AI 支出分摊与管控](https://www.gatellm.io/zh-CN/use-cases/token-finops.md)
- [MCP 工具治理](https://www.gatellm.io/zh-CN/use-cases/mcp-tool-governance.md)
- [给模型统一加联网搜索](https://www.gatellm.io/zh-CN/use-cases/web-search-grounding.md)
- [多 Key 轮询与备用](https://www.gatellm.io/zh-CN/use-cases/multi-key-pooling.md)
- [限制接入的客户端](https://www.gatellm.io/zh-CN/use-cases/client-admission-control.md)
- [强制模型使用策略](https://www.gatellm.io/zh-CN/use-cases/enforce-model-policy.md)
- [一套协议接任意模型](https://www.gatellm.io/zh-CN/use-cases/one-protocol-any-model.md)
- [Office / Microsoft 365 加载项](https://www.gatellm.io/zh-CN/office-addin.md)
- [术语表](https://www.gatellm.io/zh-CN/glossary.md)
- [模型目录](https://www.gatellm.io/zh-CN/models.md)
- [SDK 与框架集成](https://www.gatellm.io/zh-CN/integrations.md)
- [AI Coding Agent 与 Harness](https://www.gatellm.io/zh-CN/coding-agents.md)
- [安全与合规](https://www.gatellm.io/zh-CN/security.md)
- [隐私政策](https://www.gatellm.io/zh-CN/privacy-policy.md)
- [服务条款](https://www.gatellm.io/zh-CN/terms.md)
- [Cookie 政策](https://www.gatellm.io/zh-CN/cookies.md)
- [数据处理协议 (DPA)](https://www.gatellm.io/zh-CN/dpa.md)
- [子处理方清单](https://www.gatellm.io/zh-CN/subprocessors.md)
- [安全问卷预答库 (CAIQ/SIG/VSA)](https://www.gatellm.io/zh-CN/trust.md)
- [事故响应与支持服务](https://www.gatellm.io/zh-CN/sla.md)
- [漏洞披露政策](https://www.gatellm.io/zh-CN/vulnerability-disclosure.md)
- [开源许可声明](https://www.gatellm.io/zh-CN/open-source-licenses.md)
- [版本支持与生命周期 (EOL)](https://www.gatellm.io/zh-CN/lifecycle.md)
- [技术博客](https://www.gatellm.io/zh-CN/blog.md)
- [你的 Agent 权限比员工还大:在网关层治理 MCP 工具](https://www.gatellm.io/zh-CN/blog/mcp-tool-governance.md)
- [一张一万美元的账单:五种降低 LLM 成本又不让应用变笨的做法](https://www.gatellm.io/zh-CN/blog/reduce-cost.md)
- [厂商的目录价不是你的成本:把真正的 FinOps 用到 Token 支出上](https://www.gatellm.io/zh-CN/blog/token-finops.md)
- [llms.txt](https://www.gatellm.io/zh-CN/llms.txt)
