跳到主要内容

OpenAI

OpenAI 通过 API 提供托管的 GPT 模型。应用通过稳定的 AISIX 别名调用这些模型,网关则确保 OpenAI 凭证不会出现在客户端代码中。

准备工作

开始前,请准备以下内容:

  • 一套 AISIX 环境:
    • 对于 AISIX Cloud,需要一个已关联网关的环境和具有写入作用域的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7
    • 对于开源 AISIX 网关,请准备本地 AISIX 安装,或使用开源 AISIX 网关快速入门中的 Docker 环境。配置网关以加载声明式资源文件。
  • OpenAI 平台获取的 OpenAI API Key。
  • curljq

使用 AISIX Cloud 配置

导出 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 提供支持的路由创建服务提供方密钥、模型别名和调用方 API Key。

OpenAI 是网关原生支持的 OpenAI 兼容上游,该集成使用 openai 适配器。对于 OpenAI 规范端点,可以不设置 api_base;也可以设置该字段以指向保留 Bearer 身份认证和 OpenAI 路由形态的 OpenAI 兼容代理。

创建服务提供方密钥

创建用于存储 OpenAI 凭证的服务提供方密钥:

# 请替换为实际值
export OPENAI_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": "openai-prod",
"provider": "openai",
"api_key": "'"${OPENAI_API_KEY}"'",
"allowed_environments": ["'"${ENV_ID}"'"]
}' | jq -r '.provider_key.id')

provideropenai。这是唯一允许 AISIX 回退到默认基础 URL https://api.openai.com/v1 的服务提供方值。

api_key 存储 OpenAI API Key。该值在存储前会被加密,读取端点不会返回此值。其行为遵循服务提供方密钥中的凭证处理方式。

allowed_environments 列出创建模型时可以引用该服务提供方密钥的环境。

AISIX Cloud Admin API 会从目录服务提供方派生适配器;仅 BYO 服务提供方密钥接受 adapter 字段。

对于 OpenAI,可以省略 api_base。如需指向兼容 Bearer 身份认证的代理或区域网关,请显式设置 api_base。Azure OpenAI 服务本身应使用专用的 Azure OpenAI 集成。该命令会将返回的服务提供方密钥 ID 保存到 PROVIDER_KEY_ID

创建模型

创建调用方将在请求中发送的模型别名:

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": "gpt-5.6-sol-prod",
"model_name": "gpt-5.6-sol",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}' | jq -r '.model.id')

display_name 是调用方在 model 中发送的别名。

model_name 是 OpenAI 模型 ID。本指南使用 OpenAI 模型目录中当前的旗舰模型 gpt-5.6-sol。如果其他当前模型的成本、延迟或模态更适合工作负载,请选择相应模型。

provider_key_id 将别名关联到 OpenAI 服务提供方密钥。

创建调用方 API Key

创建可访问模型别名的调用方 API Key 资源。控制平面会生成密钥值,并仅在创建响应中返回一次明文:

AISIX_API_KEY=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/api_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "openai-caller",
"allowed_models": ["'"${MODEL_ID}"'"]
}' | jq -r '.plaintext')

allowed_models 值引用上一步获取的模型 ID。

请妥善保存明文密钥。控制平面仅存储哈希值;此响应之后无法再获取明文。

每次写入后,配置都会自动投射到已关联的网关。

使用开源 AISIX 网关配置

导出上游凭证,并选择应用将发送给网关的调用方 API Key:

export OPENAI_API_KEY="YOUR_PROVIDER_API_KEY"
export CALLER_API_KEY="YOUR_CALLER_API_KEY"

为该服务提供方创建完整的声明式资源文件:

resources.yaml
_format_version: "1"

provider_keys:
- display_name: "openai-prod"
provider: "openai"
adapter: "openai"
api_key: ${OPENAI_API_KEY}

models:
- display_name: "gpt-5.6-sol-prod"
provider: "openai"
model_name: "gpt-5.6-sol"
provider_key: "openai-prod"

api_keys:
- display_name: "openai-caller"
key_env: CALLER_API_KEY
allowed_models:
- "gpt-5.6-sol-prod"

如果 AISIX 安装在本地,请在加载文件前进行验证:

aisix validate --resources resources.yaml

验证后,在网关进程环境中提供文件引用的环境变量,再启动网关。仅当这些变量已经可供进程使用时,才重新加载现有网关;否则,请使用更新后的环境重启网关。

如果使用 Docker,请调整开源 AISIX 网关快速入门中的验证和启动命令。挂载此 resources.yaml 文件,并在两条命令中使用 -e 传入它引用的每个环境变量。资源加载后,准备下文共用的验证请求:

export AISIX_API_KEY="$CALLER_API_KEY"

验证服务提供方连接

导出 AISIX 网关 Origin:

# 本地快速入门使用 http://127.0.0.1:3000
export AISIX_PROXY="YOUR_AISIX_GATEWAY_ORIGIN"

通过 AISIX 代理发送 Chat Completions 请求:

curl -sS -X POST "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol-prod",
"messages": [
{
"role": "user",
"content": "Say hello from OpenAI."
}
]
}'

网关会返回 OpenAI 兼容响应,其中回显面向调用方的别名 gpt-5.6-sol-prod。请在 OpenAI 用量仪表板中确认该请求。如果请求因上游认证错误而失败,请检查服务提供方密钥的 api_key

对于推理、工具调用和多轮工作流,OpenAI 建议使用 Responses API。通过同一别名发送原生 Responses 请求:

curl -sS -X POST "$AISIX_PROXY/v1/responses" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol-prod",
"input": "Say hello from the OpenAI Responses API."
}'

由于模型配置的服务提供方是 openai,AISIX 会重写模型别名,并将请求转发到 OpenAI 原生 Responses 端点,而不会使用跨服务提供方的 Responses 桥接。

端点覆盖范围

OpenAI 提供多种使用不同模型类型的 API。请为应用所需的每个上游模型分别配置 AISIX 模型别名。

路由使用 OpenAI 支持的别名时的行为
/v1/chat/completions支持 OpenAI 请求和响应形态。仍需遵循模型特定的功能和参数限制。
/v1/responses重写模型别名后转发到 OpenAI 原生 Responses 端点。有状态字段、托管工具、推理控制项和上游 SSE 均保留在原生路径上。
/v1/completions转发到 OpenAI,但这是旧版端点,且所选模型必须支持该端点。
/v1/embeddings支持使用 OpenAI Embedding 模型(例如 text-embedding-3-large)的别名。
/v1/images/generations支持使用当前 OpenAI 图像模型的别名。
/v1/videos 及其状态和内容路由支持使用账户可用的 OpenAI 视频模型别名。
/v1/audio/*支持使用适当的语音、转录或翻译模型别名。
/v1/realtime支持以直接 Realtime 模型别名进行 WebSocket 中继。请参阅 Realtime API
/v1/files/v1/batches/v1/fine_tuning/jobs通过 OpenAI 适配器提供支持。这些任务型路由选择凭证的方式不同于普通推理调用;请参阅文件、批处理和微调
/v1/messages通过 OpenAI Chat 进行转换;OpenAI 不提供原生 Anthropic Messages 端点。
/v1/messages/count_tokens拒绝,因为此路由的 Token 计数要求使用 Anthropic 支持的模型。
/v1/models返回调用方可访问的 AISIX 模型别名,而不是 OpenAI 账户的模型清单。需要原生列表时,请使用 /passthrough/openai/v1/models
/v1/rerankAISIX 接受 openai 服务提供方值,但 OpenAI 公共 API 不提供 /v1/rerank,因此上游会拒绝调用。

对于 AISIX 尚未建模的 OpenAI 路由(例如内容审核或图像编辑),请使用服务提供方透传。透传使用 OpenAI 模型 ID 而不是 AISIX 别名,并具有不同的流式传输和用量核算行为。

使用 OpenAI SDK

AISIX_BASE_URL 设置为 ${AISIX_PROXY}/v1,并使用调用方密钥作为 API Key。请参阅 OpenAI SDK 指南。

后续步骤

你已将 AISIX 连接到 OpenAI,并验证了模型别名。接下来可阅读以下指南: