# 钉死 agent 实际跑的模型——plan 用一个、执行用另一个

> 钉死 agent 实际跑的模型并把 plan 模式与执行分开:入口白名单 + 全量模型映射 + plan 模式脚本切流,开发再也无法把简单任务路由到 Opus。

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

先消掉客户端侧的模型选择权,再把 plan 模式与执行阶段分开:强模型规划、便宜模型执行。

## 社区真正在抱怨什么
「开发把 Claude Code 切到 Opus 去总结一份 changelog」「每个人的设置里模型都不一样,我们根本看不清谁花了多少钱」「我们试过客户端侧策略,可谁都能随手改回去」。
模型选择是一笔成本决策,不是开发的个人偏好——它必须在网关、在请求真正落地的地方强制执行。

## GateLLM 怎么做
三层叠加、一层都不可省:key 组的 models 白名单(入口闸)对未授权模型名直接 403;from 为 "*" 的全量模型映射把客户端请求的任何名字重写为指定模型;before-slot 脚本让 plan 态留在强模型、退出后切到执行模型。
Claude Code 的绕过请求(比如会话标题生成)不带 plan 标记,自然落到便宜的执行模型——这正是你要的「别拿 Opus 做总结」。

## 落地的 5 个手段
- 入口闸:key 组的 models 白名单在路由前就拒绝任何未授权模型名
- 全量映射:from "*" → to 指定模型,把任何请求名归一为一个模型
- plan/exec 分流:before-slot 脚本读 plan 模式标记,仅在退出 plan 后切换路由
- 可观测:被切走的请求在日志里带 SW 标签,每条请求的真实落点可审计
- 热生效:映射与规则即时生效——不用重启,不用逐开发下发

## FAQ
### 为什么不用 switch-route 声明式规则做 plan 判定?
switch-route 的 predicate 只做结构存在与小值相等判定,刻意不读字符串正文——这正是大 body 能留在磁盘上的原因。plan 标记在正文文本里,只能用 before-slot 脚本;结构性判定(带图 → 视觉模型)才是 switch-route 的用武之地。

### 客户端改自己设置还能选 Opus 吗?
不能。入口闸对白名单之外的模型名直接 403,全量映射把剩下的名字归一为指定模型。请求到达网关那一刻起,模型选择就不再是客户端能决定的事。

### 脚本看着没生效、日志也没报错?
每个脚本跑在独立 QuickJS 沙箱里,堆上限默认 64MB(SCRIPT_MEMORY_LIMIT_MB)。内存溢出时默认 log-and-continue 会静默丢弃本次运行的全部副作用(含 useModel),对外表现就是路由没切。Claude Code 的 tool 定义先占了内存,先抬上限(改后需重启)。

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

## 相关场景
- [客户端不暴露模型选择:网关按对话状态自动分档](https://www.gatellm.io/zh-CN/use-cases/automatic-model-tiering.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/automatic-model-tiering.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)
