多模型路由不再靠硬编码:Cloudflare AI Gateway 动态路由配置实战
做AI产品的开发者迟早会遇到一个问题:不同请求该用不同模型。付费用户走GPT-4o,免费用户走Llama,超时自动降级到备用模型。以前这套逻辑自己写,代码里一堆if-else。Cloudflare在2026年10月更新了AI Gateway的Dynamic Routing功能,支持可视化配置条件路由、预算限制和A/B测试,不用改代码就能切换模型路由策略。
这篇文章拆解Dynamic Routing的核心配置方法,包含完整的REST API调用示例和成本控制策略。配置完直接用,不用再维护自己那套路由代码。
Dynamic Routing解决什么问题
先说清楚它和以前Universal Endpoint的区别。Universal Endpoint是数组式fallback,第一个模型挂了走第二个,逻辑简单但不够灵活。你没法根据用户类型、请求内容或预算做条件判断。
Dynamic Routing引入了几种新节点类型:
- Conditional(条件分支):根据请求体、Header或Metadata判断走哪个模型。比如
user_plan == "paid"走GPT-4o,免费用户走更便宜的模型 - Percentage(百分比路由):按比例分流,适合A/B测试和灰度发布
- Rate Limit(频率限制):按Key限制请求数量,超限自动切换备用模型
- Budget Limit(预算限制):按成本限额控制,超预算切换到更便宜的模型
这些节点可以组合使用。比如先按用户类型分流,再在每个分支里加预算限制和fallback。整个流程通过Cloudflare Dashboard的可视化编辑器配置,也支持JSON配置版本管理。
配置一个完整的路由策略
假设场景:一个AI写作助手,付费用户用GPT-4o保证质量,免费用户用Llama 3.1控制成本,GPT-4o超时fallback到Claude,免费用户每天限50次请求。
第一步:创建路由
在Cloudflare Dashboard进入你的AI Gateway,找到Dynamic Routes,点Add Route,命名比如 writing-assistant。打开Editor开始配置。
第二步:配置条件分支
从Start节点拉出一个Conditional节点,设置表达式 user_plan == "paid"。这个 user_plan 是你通过Custom Metadata传入的,调用时在请求里带上:
{
"model": "dynamic/writing-assistant",
"messages": [
{"role": "user", "content": "帮我写一段产品介绍"}
],
"metadata": {
"user_plan": "paid",
"user_id": "u_12345"
}
}
Metadata里的字段可以直接在条件表达式里引用,不需要在请求体里暴露用户信息。
第三步:配置模型节点和Fallback
Conditional的true分支接一个Model节点,选OpenAI的GPT-4o。再从这个Model节点拉一个fallback到Anthropic的Claude Sonnet。这样GPT-4o请求失败或超时时,自动切换到Claude。
false分支(免费用户)先接一个Rate Limit节点,设置每Key每天50次。超限后fallback到一个友好的错误提示或降级到Workers AI的Llama 3.1。
第四步:部署并调用
配置完点Save保存版本,然后Deploy发布。代码里只需要改model参数,其他不用动:
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: "CF_AIG_TOKEN",
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/compat`,
});
const response = await openai.chat.completions.create({
model: "dynamic/writing-assistant",
messages: [{ role: "user", content: "帮我写一段产品介绍" }],
metadata: { user_plan: "paid", user_id: "u_12345" }
});
响应头里会返回 cf-aig-model 和 cf-aig-provider,告诉你实际用了哪个模型。如果你在fallback链里跳了好几步,cf-aig-step 头会显示走了第几个节点。
成本控制策略
Budget Limit是Dynamic Routing里最实用的节点之一。它按成本而不是请求数来限制,这对AI应用特别重要,因为不同请求的token消耗差异很大。
配置方式:给每个Key或项目设一个日预算,比如$5。达到预算后自动切换到更便宜的模型或返回限额提示。Cloudflare官方文档显示Budget Limit支持按Key、按周期配置,超限后走fallback链。
一个实际的成本对比:GPT-4o定价是输入$2.50/百万token、输出$10.00/百万token(来源:OpenAI官方定价页面2026年10月)。如果日活1000用户、平均每用户消耗2000 token,一天就是200万token,光输入成本就$5。加Budget Limit让超预算的用户自动降级到Workers AI的Llama 3.1,Cloudflare Workers AI定价是按请求计费,每百万token输入$0.15(来源:Cloudflare Workers AI定价页面),成本直接降到十分之一以下。
几个踩坑提醒
第一,Dynamic Routes只接受OpenAI chat completions格式的请求。如果你想用Anthropic原生的Messages格式,会返回400错误。解决方案是统一走OpenAI兼容格式,Cloudflare会帮你转换到各provider的原生格式。
第二,路由名要带上gateway scope。如果你有多个gateway,REST API调用时必须设置 cf-aig-gateway-id header,否则会404。
第三,Universal Endpoint已经被标记为Deprecated。Cloudflare官方建议新集成使用OpenAI兼容端点加Dynamic Routing替代。现有的Universal Endpoint集成还能用,但不再更新功能。
什么时候该用动态路由
不是所有AI应用都需要Dynamic Routing。如果你的产品只用一个模型、一个场景,直接调API就够了。但以下情况值得配置:
- 有付费/免费分层,需要按用户类型分配不同模型
- 需要A/B测试不同模型对用户满意度的影响
- 想控制成本,超预算自动降级而不是直接报错
- 对可用性要求高,需要多provider fallback保证不中断
Dynamic Routing最大的价值是把这些以前要自己写的路由逻辑挪到了配置层面。改路由策略不用重新部署代码,在Dashboard里调一下版本发布就生效。对于还在快速迭代阶段的产品,这个灵活性比性能优化更重要。
如果你在维护自己的模型路由代码,值得评估一下迁移到Dynamic Routing能不能省掉这部分维护成本。至少不用再担心fallback逻辑的边界情况了。
