OpenAI 兼容接口
用官方 OpenAI SDK 调用 Asale 网关的 Chat Completions 与 Responses。改掉 base URL 和密钥,其余代码原样不动。
OpenAI 协议是网关支持面最广的一种,也是绝大多数第三方库默认对接的那一种。如果你的代码用的是 openai 包,或任何模仿它的库,看这一页就够了。
密钥、模型、计费和错误码请先看总览;本页只讲 OpenAI 特有的部分。
连接参数
| Base URL | https://gw.asale.ai/v1 |
| 鉴权头 | Authorization: Bearer sk-asale-... |
| SDK 环境变量 | OPENAI_API_KEY、OPENAI_BASE_URL |
这里的 /v1 属于 base URL:OpenAI 客户端会在你给的地址后面自己拼 /chat/completions。
接口清单
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1/chat/completions | 主接口。 |
| POST | /v1/responses | Responses API。Codex ≥ 0.146 只会说这一种。 |
| POST | /v1/completions | 旧版文本补全,映射到同一条链路。 |
| GET | /v1/models | 平台此刻能匹配的模型。 |
调用
curl https://gw.asale.ai/v1/chat/completions \
-H "Authorization: Bearer $ASALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5",
"messages": [{"role": "user", "content": "Hello"}],
"stream": false
}'
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ASALE_API_KEY"],
base_url="https://gw.asale.ai/v1",
)
resp = client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
// npm i openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ASALE_API_KEY,
baseURL: "https://gw.asale.ai/v1",
});
const resp = await client.chat.completions.create({
model: "gpt-5",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
流式
stream: true 返回 text/event-stream,事件为 chat.completion.chunk,最后以 data: [DONE] 结束,与 OpenAI 官方一致。现有解析代码无需改动。
stream = client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": "数到五"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
工具调用
tools 与 tool_choice 原样透传,助手返回的 tool_calls 结构也一致。执行结果照常以 role: "tool" 消息回传,带上对应的 tool_call_id。
一个请求背后可能由任意受支持厂商的卖家承接,网关会在协议之间做翻译。厂商私有的不透明字段——思考签名、encrypted_content 之类——只有在请求与承接方协议一致时才会原样回传;否则会被丢弃,而不是伪造一个。
实用提示
- 请设置
max_tokens。余额冻结额度是按它算的。不写会让冻结偏保守,可能在余额其实足够的情况下报「余额不足」。 - 模型名是平台的。用
GET /v1/models取清单,市场可以看哪些有供给。 - 图片在模型支持时可用。请求体上限 16 MiB,远高于一般内联图片;超过会返回
413。 n会被忽略,一次请求只产出一个结果。