Asale

OpenAI 兼容接口

用官方 OpenAI SDK 调用 Asale 网关的 Chat Completions 与 Responses。改掉 base URL 和密钥,其余代码原样不动。

OpenAI 协议是网关支持面最广的一种,也是绝大多数第三方库默认对接的那一种。如果你的代码用的是 openai 包,或任何模仿它的库,看这一页就够了。

密钥、模型、计费和错误码请先看总览;本页只讲 OpenAI 特有的部分。

连接参数

Base URLhttps://gw.asale.ai/v1
鉴权头Authorization: Bearer sk-asale-...
SDK 环境变量OPENAI_API_KEYOPENAI_BASE_URL

这里的 /v1 属于 base URL:OpenAI 客户端会在你给的地址后面自己拼 /chat/completions

接口清单

方法路径说明
POST/v1/chat/completions主接口。
POST/v1/responsesResponses 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)

工具调用

toolstool_choice 原样透传,助手返回的 tool_calls 结构也一致。执行结果照常以 role: "tool" 消息回传,带上对应的 tool_call_id

一个请求背后可能由任意受支持厂商的卖家承接,网关会在协议之间做翻译。厂商私有的不透明字段——思考签名、encrypted_content 之类——只有在请求与承接方协议一致时才会原样回传;否则会被丢弃,而不是伪造一个。

实用提示

  • 请设置 max_tokens。余额冻结额度是按它算的。不写会让冻结偏保守,可能在余额其实足够的情况下报「余额不足」。
  • 模型名是平台的。用 GET /v1/models 取清单,市场可以看哪些有供给。
  • 图片在模型支持时可用。请求体上限 16 MiB,远高于一般内联图片;超过会返回 413
  • n 会被忽略,一次请求只产出一个结果。