跳到正文

接入 OpenAI 上游

本章假设你已经把网关跑起来了(见 Docker 单机跑通)。下面带你配一个 OpenAI 上游 + 一个 gpt-4o 模型,然后从 OpenAI SDK / curl 调用,并解释一些跨协议的小细节。

前置

  • 网关已运行(http://localhost:7890),能登录控制台
  • 一个 OpenAI API key(sk-...

1. 建上游

控制台 → 上游服务新建,填:

字段说明
名称openai上游唯一标识
协议openai决定执行器与请求 schema
基础 URLhttps://api.openai.com/v1上游真实地址,结尾不带 /
API Keysk-...上游给你的密钥,点「添加」可加多把,按权重分布
启用

保存。上游列表出现 openai,状态为活跃。

2. 建模型

在上游 openai 行点 展开 → 模型子表 → 新建模型,填:

字段说明
名称gpt-4o客户端调用时填的模型名
上游openai选刚建的上游
上游模型 IDgpt-4o上游真实模型名
启用

保存。客户端用 gpt-4o 调用时,网关路由到上游 openaigpt-4o

「名称」对外暴露给客户端;「上游模型 ID」是发往上游的真实名字。两者不同就实现了模型别名/重命名。

3. 配密钥组放行

控制台 → 访问密钥密钥组 页签 → 新建

字段说明
名称default分组名
模型gpt-4o,或 *(全部)决定该组密钥能调哪些模型
启用

4. 签发访问密钥

控制台 → 访问密钥新建

字段说明
名称my-app-key标识
API 密钥点「生成」自动生成一串,客户端实际带的凭证
分组default选刚建的组
启用

保存。点该行「复制」按钮可取完整密钥值。

客户端用的是这把访问密钥,不是上游的 sk-...

5. 用 OpenAI SDK 调用

OpenAI Python / Node SDK:

text
base_url = http://localhost:7890/v1
api_key  = <你的访问密钥>

Python 示例:

python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:7890/v1",
    api_key="<你的访问密钥>",
)

resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

6. 或用 curl

bash
curl http://localhost:7890/v1/chat/completions \
  -H "Authorization: Bearer <你的访问密钥>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role":"user","content":"你好"}]
  }'

收到模型回复即跑通。

跨协议互译

OpenAI 上游 + OpenAI 客户端是「同协议 identity 路径」,网关不做翻译,直接转发。但你也可以用 Anthropic SDK / Gemini SDK 调这个 gpt-4o 模型——网关会把客户端协议翻译成上游协议(openai),再把响应翻译回客户端格式。

例如用 Anthropic SDK 调用:

bash
curl http://localhost:7890/v1/messages \
  -H "x-api-key: <你的访问密钥>" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","max_tokens":1024,"messages":[{"role":"user","content":"hi"}]}'

请求体是 Anthropic 格式,网关翻译成 OpenAI 格式发给上游,响应再翻译回 Anthropic 格式。客户端无感。完整互通矩阵见 协议互通矩阵

常见问题

Q:客户端报 401? 访问密钥没带对。检查 Authorization: Bearer 后面跟的是网关访问密钥(不是上游的 sk-...)。

Q:客户端报 403 model_access_denied? 密钥所在的密钥组「模型」列表没包含 gpt-4o。回到密钥组把该模型加进去,或改成 *

Q:客户端报 404 model_not_found? 模型名拼错,或该模型被设了 hide_name(只能用别名访问)。检查控制台里模型的「名称」字段与客户端 model 参数是否一致。

Q:客户端报 502 bad_gateway? 上游不通。检查 OpenAI 的 base_url(必须 https://api.openai.com/v1,结尾不带 /)和 API key 是否正确、上游是否可访问。

Q:怎么让多个上游(多把 OpenAI key)做故障转移? 用负载均衡器,见 多上游负载均衡

下一步端点 · 认证 · 协议互通 看完整端点清单;客户端接入与网关差异 看各 SDK 接法和网关特有行为;Anthropic 跨协议 看反向的跨协议例子。