配置多模型路由和自动故障转移
本指南介绍如何使用 ai-proxy-multi 插件在多个模型和服务提供方之间分发 AI 流量,包括配置加权负载均衡、自动故障转移和基于优先级的路由。
概览
依赖单一模型服务提供方会带来服务中断、限流配额耗尽和成本激增等风险。ai-proxy-multi 插件通过可配置的负载均衡、健康检查和故障转移策略,在多个模型实例之间路由流量。
常见用例:
- 成本优化 — 将大部分流量路由到低成本模型,并以高级模型作为质量保障。
- 高可用 — 服务提供方中断或被限流时自动故障转移。
- 容量分配 — 在多个服务提供方之间分散负载,避免触及单个服务提供方的限流阈值。
前置条件
-
安装 Docker。
-
安装 cURL,用于发送请求并验证服务。
-
拥有一个正在运行的 API7 网关实例。
-
从控制台获取令牌,并保存到环境变量:
export API_KEY=your-dashboard-token # 请替换为你的控制台令牌 -
将
{gateway_group_id}替换为网关组 ID。如果正在按照快速入门操作,请使用default。 -
如果使用 Admin API 示例,请创建或复用一个服务。如果尚无服务,请按照创建或复用服务操作,然后保存其 ID:
export SERVICE_ID=your-service-id # 请替换为你的服务 ID
加权负载均衡
根据成本与性能之间的权衡,在多个模型之间分发流量:
- Admin API
- ADC
curl -k "https://localhost:7443/apisix/admin/routes?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
--data-binary @- <<EOF
{
"id": "multi-llm-weighted",
"service_id": "$SERVICE_ID",
"paths": ["/ai"],
"plugins": {
"ai-proxy-multi": {
"balancer": {
"algorithm": "roundrobin"
},
"instances": [
{
"name": "gpt-4o-mini",
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer $OPENAI_API_KEY" } },
"options": { "model": "gpt-4o-mini" },
"weight": 8
},
{
"name": "gpt-4o",
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer $OPENAI_API_KEY" } },
"options": { "model": "gpt-4o" },
"weight": 2
}
]
}
}
}
EOF
❶ 设置负载均衡算法。roundrobin 根据实例权重分发请求。
❷ 为 gpt-4o-mini 分配权重 8,约 80% 的流量会进入该实例。
❸ 为 gpt-4o 分配权重 2,让 20% 的流量获得高级模型质量。
services:
- name: Multi-LLM Weighted
routes:
- uris:
- /ai
name: multi-llm-weighted
plugins:
ai-proxy-multi:
balancer:
algorithm: roundrobin
instances:
- name: gpt-4o-mini
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"
options:
model: gpt-4o-mini
weight: 8
- name: gpt-4o
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"
options:
model: gpt-4o
weight: 2
❶ 设置负载均衡算法。roundrobin 根据实例权重分发请求。
❷ 为 gpt-4o-mini 分配权重 8,约 80% 的流量会进入该实例。
❸ 为 gpt-4o 分配权重 2,让 20% 的流量获得高级模型质量。
将配置同步到 API7 网关:
adc sync -f adc.yaml
自动故障转移
配置故障转移策略,使流量在服务提供方不可用或被限流时自动重新路由。
fallback_strategy 字段支持两种模式:
- 单一策略(字符串):
"instance_health_and_rate_limiting"、"http_429"或"http_5xx"。 - 组合策略(数组):任一条件匹配时触发故障转移,例如
["rate_limiting", "http_429", "http_5xx"]。
instance_health_and_rate_limiting 为向后兼容而保留,功能上等同于 rate_limiting。新配置使用数组形式时,请优先使用 rate_limiting。
- Admin API
- ADC
curl -k "https://localhost:7443/apisix/admin/routes?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
--data-binary @- <<EOF
{
"id": "multi-llm-failover",
"service_id": "$SERVICE_ID",
"paths": ["/ai"],
"plugins": {
"ai-proxy-multi": {
"fallback_strategy": ["http_429", "http_5xx"],
"instances": [
{
"name": "openai-primary",
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer $OPENAI_API_KEY" } },
"options": { "model": "gpt-4o" },
"weight": 1,
"priority": 2
},
{
"name": "anthropic-fallback",
"provider": "anthropic",
"auth": { "header": { "Authorization": "Bearer $ANTHROPIC_API_KEY" } },
"options": { "model": "claude-sonnet-4-20250514" },
"weight": 1,
"priority": 1
}
]
}
}
}
EOF
❶ 当前实例返回 HTTP 429(限流)或 5xx(服务器错误)时触发故障转移。
❷ OpenAI 是优先级最高(2)的主实例。
❸ Anthropic 是优先级较低(1)的备用实例,仅当 OpenAI 返回 429 或 5xx 时才将流量路由到此实例。
services:
- name: Multi-LLM Failover
routes:
- uris:
- /ai
name: multi-llm-failover
plugins:
ai-proxy-multi:
fallback_strategy:
- http_429
- http_5xx
instances:
- name: openai-primary
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"
options:
model: gpt-4o
weight: 1
priority: 2
- name: anthropic-fallback
provider: anthropic
auth:
header:
Authorization: "Bearer ${ANTHROPIC_API_KEY}"
options:
model: claude-sonnet-4-20250514
weight: 1
priority: 1
❶ 当前实例返回 HTTP 429(限流)或 5xx(服务器错误)时触发故障转移。
❷ OpenAI 是优先级最高(2)的主实例。
❸ Anthropic 是优先级较低(1)的备用实例,仅当 OpenAI 返回 429 或 5xx 时才将流量路由到此实例。
将配置同步到 API7 网关:
adc sync -f adc.yaml
跨服务提供方路由策略
根据具体目标组合不同服务提供方:
成本优化
优先路由到成本最低的模型,并使用高级模型作为备用:
| 实例 | 服务提供方 | 模型 | 优先级 | 用途 |
|---|---|---|---|---|
deepseek-primary | DeepSeek | deepseek-chat | 1 | 每 Token 成本最低 |
gpt-4o-mini-secondary | OpenAI | gpt-4o-mini | 2 | 中等成本备用实例 |
gpt-4o-premium | OpenAI | gpt-4o | 3 | 质量最高的备用实例 |
容量分配
在多个服务提供方之间分散负载,避免触及各自的限流阈值:
| 实例 | 服务提供方 | 模型 | 权重 | 用途 |
|---|---|---|---|---|
openai-pool | OpenAI | gpt-4o | 5 | 50% 的流量 |
anthropic-pool | Anthropic | claude-sonnet-4-20250514 | 3 | 30% 的流量 |
deepseek-pool | DeepSeek | deepseek-chat | 2 | 20% 的流量 |
响应流式传输
ai-proxy-multi 插件透明地处理服务器发送事件(SSE)流式传输。客户端发送 "stream": true 时,无论使用哪个服务提供方,网关都会从实际处理请求的实例流式返回 Token。
多模型路由无需额外配置即可进行流式传输。如果 SSE 事件被缓冲,请使用 proxy-buffering 插件禁用 NGINX proxy_buffering。
验证
发送请求测试多模型路由:
curl "http://127.0.0.1:9080/ai" -X POST \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "user", "content": "Hello" }
]
}'
你应收到某个已配置实例的响应。响应中的 model 字段表示处理该请求的实例。
后续步骤
- Token 限流 — 设置每个实例的 Token 预算。
- AI 可观测性 — 监控处理流量的实例并跟踪成本。
- 完整配置说明请参阅
ai-proxy-multi。