xAI (Grok)
xAI 通过其 API 提供 Grok 系列模型。xAI 建议新集成使用 Responses API,同时为现有应用继续提供 Chat Completions。AISIX 可以通过稳定的模型别名转发原生 Responses 请求,同时确保 xAI 凭证不会出现在客户端代码中。
准备工作
开始前,请准备以下内容:
- 一套 AISIX 环境:
- 对于 AISIX Cloud,需要一个已关联网关的环境和具有写入作用域的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7。
- 对于开源 AISIX 网关,请准备本地 AISIX 安装,或使用开源 AISIX 网关快速入门中的 Docker 环境。配置网关以加载声明式资源文件。
- 一个 xAI API Key。按 照 xAI 快速入门创建密钥。
curl和jq。
使用 AISIX Cloud 配置
导出 AISIX Cloud 连接信息:
# AISIX_CP 是 Admin API 基础 URL;应包含 /api,且不含尾部斜杠
# 本地私有化部署快速入门使用 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"
为原生 Responses 和 Chat Completions 请求创建服务提供方密钥、模型别名和调用方 API Key。
xAI 是使用 OpenAI 兼容 API 的社区目录服务提供方。AISIX 通过 openai 适配器连接,使用 Bearer Token 对上游请求进行身份认证,并将 xAI API Root 用作 api_base。AISIX 不会注册 xAI 特有的请求或响应重写规则,因此以下章节将介绍必须配置的服务提供方特定值。
服务提供方目录将 xAI 作为社区条目返回,而不是精选服务提供方。
创建服务提供方密钥
创建用于存储 xAI 凭证和 API Root 的服务提供方密钥:
# 请替换为实际值
export XAI_API_KEY="YOUR_PROVIDER_API_KEY"
PROVIDER_KEY_ID=$(curl -sS -X POST "$AISIX_CP/provider_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "xai-prod",
"provider": "xai",
"api_key": "'"${XAI_API_KEY}"'",
"api_base": "https://api.x.ai/v1",
"apis": {
"responses": {}
},
"allowed_environments": ["'"${ENV_ID}"'"]
}' | jq -r '.provider_key.id')
echo "$PROVIDER_KEY_ID"
❶ provider 为 xai。AISIX Cloud Admin API 会根据目录服务提供方推导适配器,因此 xai 会通过目录的默认规则解析到 openai 适配器。adapter 字段仅适用于 BYO 服务提供方密钥,在目录服务提供方密钥中会被拒绝。
❷ api_key 存储 xAI API Key。xAI 使用 HTTP Bearer 身份认证,openai 适配器已经会发送该认证信息。该值遵循服务提供方密钥中的凭证处理行为。
❸ api_base 对于 xai 是必需的。精选服务提供方条目会包含默认 API Root,社区目录服务提供方则回退到 models.dev 发布的 api 字段。models.dev 中的 xai 条目未发布 api 字段,因此没有可用的回退值。省略 api_base 会返回 400,并显示消息 models.dev does not publish a default api_base for this provider — set api_base explicitly, or switch to the "byo" provider sentinel。
请使用 https://api.x.ai/v1。AISIX 会将所选端点路径追加到 api_base,因此该值必须同时是 /chat/completions 和 /responses 的 Root。xAI 文档将其说明为 OpenAI 客户端库的 Base URL。
不要将 api_base 设置为不含路径的主机 https://api.x.ai,也不要把完整端点 URL 粘贴到该字段。这两种错误会分别破坏不同的接口,因此只有带版本的 Root 才能同时安全用于两者。
不含路径的主机可用于 Responses——AISIX 会为不含路径的任意 api_base 追加 /v1——但 Chat Completions 只会为规范 OpenAI 主机补充缺失的路径段,因此 https://api.x.ai 会生成 xAI 不提供的 https://api.x.ai/chat/completions。
完整端点 URL 则会导致另一种故障。Responses 会移除末尾的 /responses,但 Chat Completions 只会移除自身的端点后缀,因此 https://api.x.ai/v1/responses 会变成 https://api.x.ai/v1/responses/chat/completions,并在没有明显提示的情况下失败。
❹ apis.responses 声明此服务提供方密钥原生提供 Responses API。由于未单独设置 base,AISIX 会将 Responses 请求发送到已配置的 xAI API Root。
该命令会把返回的服务提供方密钥 ID 保存到 PROVIDER_KEY_ID。
创建模型
Grok 模型 ID 是不带服务商前缀的纯小写 Slug。小版本发布带有点号分隔的次版本号,例如 grok-4.5 和 grok-4.3;面向 Agent 的模型使用自己的系列名称,例如 grok-build-0.1;按日期发布的快照则追加发布日期和行为后缀,例如 grok-4.20-0309-reasoning。不要沿用聚合器中的 xai/grok-4.5 等带前缀形式。
创建别名前,请在 xAI 模型列表中查看当前 Slug。xAI 会按照公布的计划退役较旧的 Grok Slug,并将对已退役 Slug 的请求重定向到当前模型。因此,仍固定到已退役 Slug 的别名会继续工作,但会在不提示的情况下实际使用另一个模型。当你使用的 Slug 退役时,请重新指定 model_name。
创建调用方将在请求中发送的模型别名:
MODEL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/models" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "grok-prod",
"model_name": "grok-4.5",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}' | jq -r '.model.id')
echo "$MODEL_ID"
❶ display_name 是调用方在 model 中发送的别名。
❷ model_name 是 xAI 模型 ID,例如 grok-4.5、grok-4.3 或 grok-build-0.1。
❸ provider_key_id 将别名关联到 xAI 服务提供方密钥。