接入 OpenAI 上游
本章假设你已经把网关跑起来了(见 Docker 单机跑通)。下面带你配一个 OpenAI 上游 + 一个 gpt-4o 模型,然后从 OpenAI SDK / curl 调用,并解释一些跨协议的小细节。
前置
- 网关已运行(
http://localhost:7890),能登录控制台 - 一个 OpenAI API key(
sk-...)
1. 建上游
控制台 → 上游服务 → 新建,填:
| 字段 | 值 | 说明 |
|---|---|---|
| 名称 | openai | 上游唯一标识 |
| 协议 | openai | 决定执行器与请求 schema |
| 基础 URL | https://api.openai.com/v1 | 上游真实地址,结尾不带 / |
| API Key | sk-... | 上游给你的密钥,点「添加」可加多把,按权重分布 |
| 启用 | ✓ |
保存。上游列表出现 openai,状态为活跃。
2. 建模型
在上游 openai 行点 展开 → 模型子表 → 新建模型,填:
| 字段 | 值 | 说明 |
|---|---|---|
| 名称 | gpt-4o | 客户端调用时填的模型名 |
| 上游 | openai | 选刚建的上游 |
| 上游模型 ID | gpt-4o | 上游真实模型名 |
| 启用 | ✓ |
保存。客户端用 gpt-4o 调用时,网关路由到上游 openai 的 gpt-4o。
「名称」对外暴露给客户端;「上游模型 ID」是发往上游的真实名字。两者不同就实现了模型别名/重命名。
3. 配密钥组放行
控制台 → 访问密钥 → 密钥组 页签 → 新建:
| 字段 | 值 | 说明 |
|---|---|---|
| 名称 | default | 分组名 |
| 模型 | 选 gpt-4o,或 *(全部) | 决定该组密钥能调哪些模型 |
| 启用 | ✓ |
4. 签发访问密钥
控制台 → 访问密钥 → 新建:
| 字段 | 值 | 说明 |
|---|---|---|
| 名称 | my-app-key | 标识 |
| API 密钥 | 点「生成」 | 自动生成一串,客户端实际带的凭证 |
| 分组 | default | 选刚建的组 |
| 启用 | ✓ |
保存。点该行「复制」按钮可取完整密钥值。
客户端用的是这把访问密钥,不是上游的
sk-...。
5. 用 OpenAI SDK 调用
OpenAI Python / Node SDK:
base_url = http://localhost:7890/v1
api_key = <你的访问密钥>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
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 调用:
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 跨协议 看反向的跨协议例子。
