主题
OpenAI 兼容接入
why01 API 完整兼容 OpenAI v1 协议——原本能用 https://api.openai.com 跑的代码,把 base_url 换一下即可。
示例中的模型名仅为占位
本页代码示例里的 model 字段(如 gpt-5-mini)只是写法占位——上游模型几周一变,实际能用哪些模型 + 当前型号名永远以 控制台模型 / 定价页 为准。复制代码后请把 model 字段换成控制台当前可见的模型名。
端点
POST https://s1.why01.top/v1/chat/completions其他常用端点:
- 流式:在请求体加
"stream": true - 模型列表:
GET /v1/models - Embeddings:
POST /v1/embeddings
curl
bash
curl https://s1.why01.top/v1/chat/completions \
-H "Authorization: Bearer sk-你的key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-mini",
"messages": [
{"role": "system", "content": "你是个简洁的助手。"},
{"role": "user", "content": "用一句话介绍 Python。"}
],
"temperature": 0.7
}'流式(SSE):
bash
curl https://s1.why01.top/v1/chat/completions \
-H "Authorization: Bearer sk-你的key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-mini",
"messages": [{"role": "user", "content": "数到 5"}],
"stream": true
}'Python(openai SDK)
bash
pip install openaipython
from openai import OpenAI
client = OpenAI(
base_url="https://s1.why01.top/v1",
api_key="sk-你的key",
)
resp = client.chat.completions.create(
model="gpt-5-mini",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)流式:
python
stream = client.chat.completions.create(
model="gpt-5-mini",
messages=[{"role": "user", "content": "数到 5"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)Node.js(openai SDK)
bash
npm install openaijs
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://s1.why01.top/v1",
apiKey: process.env.WHY01_API_KEY,
});
const resp = await client.chat.completions.create({
model: "gpt-5-mini",
messages: [{ role: "user", content: "你好" }],
});
console.log(resp.choices[0].message.content);Go
bash
go get github.com/sashabaranov/go-openaigo
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("sk-你的key")
config.BaseURL = "https://s1.why01.top/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "gpt-5-mini",
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "你好"},
},
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}常见请求参数
| 参数 | 作用 | 备注 |
|---|---|---|
model | 模型名 | 必填,按控制台 模型/定价页 取 |
messages | 对话历史 | 必填,OpenAI 标准 schema |
temperature | 随机度 0-2 | 默认 1.0;要稳定输出建议 0-0.3 |
max_tokens | 输出 token 上限 | 不传按上游默认 |
stream | SSE 流式 | 长输出建议开启 |
tools / tool_choice | 函数调用 | 兼容 OpenAI 标准 schema |
response_format | 结构化输出 | {"type": "json_object"} 强制 JSON |
top_p, frequency_penalty, presence_penalty | 高级采样参数 | 完全对齐 OpenAI |
完整字段参考 OpenAI 官方文档。
多模态(视觉输入)
python
resp = client.chat.completions.create(
model="gpt-5", # 或其他支持视觉的模型
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "图里是什么?"},
{"type": "image_url", "image_url": {
"url": "https://example.com/cat.jpg"
}}
]
}],
)哪些模型支持视觉以控制台模型详情页标注为准。
用 OpenAI SDK 调 Claude / Gemini
直接把 model 字段填成 Claude / Gemini 模型名:
python
resp = client.chat.completions.create(
model="claude-sonnet-4-6", # 或 gemini-2.5-pro
messages=[{"role": "user", "content": "你好"}],
)返回结构与调 GPT 一样,业务代码不需要改。详见 Claude 接入 / Gemini 接入。
调用失败先看
| HTTP 状态 | 含义 | 处理 |
|---|---|---|
| 200 | 成功 | — |
| 401 | Key 错或失效 | 检查拼写、是否被禁用、过期 |
| 402 | 余额不足 | 控制台充值 |
| 404 | model not found | 模型名拼错 / 不在你的分组 |
| 429 | 触限速 | 加退避重试 |
| 5xx | 上游波动 | 重试 1-2 次 / 切同类模型 |
完整错误码 → 错误码速查。