多目标模型故障转移
本教程会创建一个从主模型故障转移到备用模型的多目标模型。应用只调用一个模型别名,由 AISIX 为每次请求选择上游模型。
多目标模型名为 chat-prod。它指 向两个目标模型,每个目标模型使用自己的服务提供方密钥。第一次请求成功后,你会把主服务提供方密钥指向不可访问的主机,并确认 AISIX 会用备用目标处理下一次请求。
准备工作
请先准备以下内容:
- 已完成自托管快速开始。
- 安装 jq,用于在可运行配置中捕获资源 ID。
- 主上游和备用上游的 OpenAI API Key。因为故障转移检查会把主服务提供方密钥指向不可访问主机,所以两个上游可以使用同一个 OpenAI API Key。
设置变量
导出命令中要使用的变量:
# Replace with your values
export AISIX_ADMIN_KEY="YOUR_ADMIN_KEY"
export PRIMARY_OPENAI_API_KEY="YOUR_PRIMARY_PROVIDER_KEY"
export SECONDARY_OPENAI_API_KEY="YOUR_SECONDARY_PROVIDER_KEY"
export CALLER_KEY="sk-failover-demo"
如果两个上游使用同一个 OpenAI 账号,请将 PRIMARY_OPENAI_API_KEY 和 SECONDARY_OPENAI_API_KEY 设置为同一个值。
创建 AISIX 为调用方 API Key 保存的 SHA-256 哈希:
CALLER_KEY_HASH=$(printf '%s' "${CALLER_KEY}" | shasum -a 256 | awk '{print $1}')
配置多目标模型
要构建 chat-prod,请按顺序创建服务提供方密钥、目标模型、多目标模型和调用 方 API Key。
创建服务提供方密钥
创建主服务提供方密钥:
PRIMARY_PK_ID=$(curl -sS -X POST "http://127.0.0.1:3001/admin/v1/provider_keys" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "openai-primary",
"provider": "openai",
"adapter": "openai",
"secret": "'"${PRIMARY_OPENAI_API_KEY}"'",
"api_base": "https://api.openai.com/v1"
}' | jq -r .id)
创建备用服务提供方密钥:
SECONDARY_PK_ID=$(curl -sS -X POST "http://127.0.0.1:3001/admin/v1/provider_keys" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "openai-secondary",
"provider": "openai",
"adapter": "openai",
"secret": "'"${SECONDARY_OPENAI_API_KEY}"'",
"api_base": "https://api.openai.com/v1"
}' | jq -r .id)
确认两个 ID 都已捕获:
printf 'primary provider key: %s\nsecondary provider key: %s\n' \
"${PRIMARY_PK_ID}" "${SECONDARY_PK_ID}"
你应该会看到两个非空 ID:
primary provider key: 7fd2d8ce-f79d-49cc-b742-d32fda7b7d5a
secondary provider key: 04573e6c-6319-477e-b2a4-a67a1911c727
这些 ID 已保存在 PRIMARY_PK_ID 和 SECONDARY_PK_ID 中,供后续命令使用。
创建目标模型
创建主模型:
PRIMARY_MODEL_ID=$(curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "gpt-4o-primary",
"provider": "openai",
"model_name": "gpt-4o-mini",
"provider_key_id": "'"${PRIMARY_PK_ID}"'"
}' | jq -r .id)
创建备用模型:
SECONDARY_MODEL_ID=$(curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "gpt-4o-secondary",
"provider": "openai",
"model_name": "gpt-4o-mini",
"provider_key_id": "'"${SECONDARY_PK_ID}"'"
}' | jq -r .id)