服务提供方密钥
创建服务提供方密钥,用于保存 AISIX 解析模型别名后访问上游所需的凭证和端点设置。在 AISIX Cloud 中,模型通过 ID 引用服务提供方密钥;在开源 AISIX 网关中,resources.yaml 里的模型通过 display_name 引用。两种方式都能避免在应用代码中保存上游凭证,并允许多个别名复用同一个凭证。
创建示例涵盖两种管理方式。字段和行为章节会说明 AISIX Cloud Admin API 与声明式资源文件之间的重要差异。
前置条件
开始前请准备:
- 上游服务提供方凭证。
- 对于 AISIX Cloud,需要环境访问权限和具有写入权限的 Admin Token。对于 On-Premises 部署,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7。
- 对于开源 AISIX 网关,需要一个加载声明式资源文件的网关。开源 AISIX 网关快速入门提供了可运行的配置和重新加载流程。
创建服务提供方密钥
根据部署使用的管理方式配置凭证。
AISIX Cloud
创建服务提供方密钥,并保存返回的 ID 供模型配置使用。
服务提供方密钥的作用域是组织。allowed_environments 列出创建模型时可以引用该密钥的环境,因此请包含模型所在环境。
导出 AISIX Cloud 连接信息:
# AISIX_CP 是 Admin API 基础 URL;请包含 /api,且不要以斜杠结尾。
# 本地 On-Premises 快速入门使用 http://localhost:8080/api。
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
以下示例创建一个 OpenAI 服务提供方密钥:
# 请替换为实际值
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
curl -sS -X POST "$AISIX_CP/provider_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "openai-prod",
"provider": "openai",
"api_key": "'"${OPENAI_API_KEY}"'",
"api_base": "https://api.openai.com/v1",
"allowed_environments": ["'"${ENV_ID}"'"]
}'
你应该会看到类似以下的响应:
{
"provider_key": {
"id": "db8613ea-2ecd-40e4-91aa-08197119f766",
"org_id": "3f1c2b6a-9d4e-4c1f-8a2b-5e6d7c8f9a0b",
"provider": "openai",
"display_name": "openai-prod",
"allowed_environments": ["9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d"],
"strip_headers": null,
"telemetry_label": "openai-prod",
"created_at": "YYYY-MM-DDTHH:MM:SSZ",
"updated_at": "YYYY-MM-DDTHH:MM:SSZ"
}
}
创建响应不包含 api_base;使用 GET $AISIX_CP/provider_keys/{id} 获取该密钥,即可查看端点覆盖值。
复制高亮的 id 并将其导出。创建模型时会将其用作 provider_key_id:
export PROVIDER_KEY_ID="YOUR_PROVIDER_KEY_ID"
该操作只创建上游凭证资源。要通过 AISIX 发送流量,还需把服务提供方密钥关联到模型、在调用方 API Key 上允许该模型,并使用调用方 API Key 发送代理请求。
开源 AISIX 网关
在资源文件的 provider_keys 集合中添加服务提供方密钥。请通过环境变量提供凭证,不要把明文密钥写入 YAML:
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
将以下条目添加到完整资源文件的 provider_keys 中:
provider_keys:
- display_name: openai-prod
provider: openai
adapter: openai
api_key: ${OPENAI_API_KEY}
api_base: https://api.openai.com/v1
模型通过该密钥的 display_name(即 openai-prod)进行引用。应用前请验证完整的资源文件。如果运行中的网关进程已经能够访问 OPENAI_API_KEY,请按照重新加载资源文件操作。如果刚刚新增该变量,请调整开源 AISIX 网关快速入门中的启动命令,使用 -e 传入该变量,再重新创建网关,使进程能够解析它。
设置服务提供方和适配器
服务提供方密钥将上游身份与上游 API 格式分开。
在 AISIX Cloud 中,服务提供方用于标识上游厂商或端点。它不是任意字符串:provider 必须是 AISIX 服务提供方目录 ID(例如 openai、anthropic 或 deepseek),或表示自定义端点的保留值 byo。该目录包含 AISIX 原生集成和来自 models.dev 的社区条目。对于开源 AISIX 网关,resources.yaml 中的 provider 是开放标签,adapter 用来选择已经实现的协议族。
适配器标识 AISIX 应使用的上游 API 格式。它是封闭取值,因为 AISIX 只能编码已经实现的协议族,例如 openai、anthropic、bedrock、vertex 和 azure-openai。
对于 AISIX Cloud 目录中的服务提供方,控制面会根据目录条目推导适配器;发送 adapter 字段会返回 400 错误。上面的 OpenAI 示例只设置 provider: "openai",控制面会推导 OpenAI 适配器。DeepSeek 等提供 OpenAI 兼容 API 的目录服务提供方也采用相同方式:设置 provider,并在需要时设置 api_base:
{
"provider": "deepseek",
"api_base": "https://api.deepseek.com"
}
对于不在 AISIX Cloud 目录中的私有或 OpenAI 兼容端点,将 provider 设置为 byo,显式选择 adapter,并配置 BYO 密钥必需的 api_base:
{
"provider": "byo",
"adapter": "openai",
"api_base": "https://api.example.com/v1"
}
AISIX Cloud Admin API 不允许修改现有 BYO 服务提供方密钥的适配器。请使用所需适配器创建新的服务提供方密钥,并更新依赖模型和服务提供方透传路由来引用它。对于开源 AISIX 网关,修改 resources.yaml 中服务提供方密钥条目的适配器并重新加载配置即可。
适配器选择详情参见适配器协议族。
配置基础 URL
api_base 控制 AISIX 默认发送上游请求的位置。请按所选适配器预期的格式配置。如果上游在另一条路径上还提供了第二种协议,可以单独声明该路径,见声明 API 协议面。AISIX Cloud 可在目录存在默认值时自动提供;开源网关只会为设置指南中明确说明的服务提供方推导端点。
常见示例如下:
| 上游 API | 适配器 | 基础 URL |
|---|---|---|
| OpenAI | openai | https://api.openai.com/v1 |
| DeepSeek | openai | https://api.deepseek.com |
| Gemini OpenAI 兼容 API | openai | https://generativelanguage.googleapis.com/v1beta/openai |
| Anthropic | anthropic | https://api.anthropic.com |
| Azure OpenAI | azure-openai | https://<resource>.openai.azure.com |
| AWS Bedrock | bedrock | https://bedrock-runtime.<region>.amazonaws.com |
| Google Vertex AI | vertex | https://<region>-aiplatform.googleapis.com |
对于 Bedrock,两种配置方式下 api_base 都是可选的。未设置时,AISIX Cloud Admin API 会保存凭证 region 对应的区域运行时端点,开源 AISIX 网关则让 AWS SDK 推导出同样的端点。参见 AWS Bedrock。
AISIX 会规范化常见的复制错误,例如末尾斜杠和完整端点路径,但不会猜测任意服务提供方的 URL 布局。对于私有模型服务、企业代理或自定义端点,请显式配置 api_base。
大多数模型服务提供方端点共用一份 DNS 缓存。无论 DNS 记录的 TTL 是多少,成功的解析结果都会复用 30 秒,因此 DNS 变更最长可能需要 30 秒才会影响新的上游连接;解析失败则会在 1 秒后重试。Amazon Bedrock 和 Realtime 使用各自独立的客户端栈;网关使用正向代理时,由代理解析主机名。
通过没有 DNS 记录的专线访问的端点,同样在 api_base 中保留服务提供方的主机名;用 resolve_addresses 固定该主机名连到哪里。
固定端点地址
通过专线访问的上游往往没有自己的 DNS 记录,而服务提供方仍然只认自己的主机名:Host 换成别的值,它就返回 404。任何 AISIX 配置都无法设置 Host(见受保护的请求头名称),因此访问这类端点的办法是:api_base 里仍然填服务提供方的主机名,另外固定该主机名连到哪里。
resolve_addresses 列出网关连接 api_base 主机时直接使用的 IP 地址,不再通过 DNS 解析该主机。每个条目都是 IPv4 或 IPv6 地址字面量,不带端口,也不带方括号。改变的只有连接目标:Host 请求头、HTTP/2 的 :authority、TLS 服务器名和证书校验都仍然使用 api_base 中的主机名,协议和端口同样仍然来自 api_base。
配置多个地址时按列出的顺序依次尝试,就像 DNS 应答里的多个地址一样:当某个地址无法建立连接时才会尝试下一个。专线在每个可用区各终结于一个地址时,正是靠这一点在其中之一不可用时保持可达。
如果你能发布一个私有 DNS 区域,把服务提供方的主机名解析到专线,那么优先这么做——它完全不需要在网关侧做任何配置。resolve_addresses 针对的是做不到这一点的场景。
在 AISIX Cloud 中固定地址
在服务提供方密钥的创建和编辑表单中填写端点地址(API base 正下方的字段)。每行填一个地址,列出的顺序就是故障转移的顺序。清空该字段即移除该覆盖,主机名重新通过 DNS 解析。
AISIX Cloud Admin API 接受同样的列表:
curl -sS -X PATCH "$AISIX_CP/provider_keys/$PROVIDER_KEY_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"api_base": "https://api.example-llm.com/v1",
"resolve_addresses": ["10.20.0.11", "10.20.1.11"]
}'
传 null 可移除该覆盖。空列表会被拒绝,因为它等于配置了一项什么都没固定的设置。