
TONDAR API · GPT
对接 GPT
Chat Completions
OpenAI 官方 SDK · 只改基址和 Key
对话、补全和工具调用走 POST /v1/chat/completions。把 OpenAI SDK 的 base_url 指到 https://api.tondarai.com/v1,Key 用控制台创建的密钥。model 填模型广场里已开通的 ID。
POST/v1
最小示例
下面三次调用是同一条请求。环境变量 TONDAR_API_KEY 放控制台密钥,不要写进代码仓库。
curl
curl https://api.tondarai.com/v1/chat/completions \
-H "Authorization: Bearer $TONDAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<模型广场中的 ID>",
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
]
}'python
from openai import OpenAI
client = OpenAI(
api_key="控制台创建的 Key",
base_url="https://api.tondarai.com/v1",
)
resp = client.chat.completions.create(
model="<模型广场中的 ID>",
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(resp.choices[0].message.content)node
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.TONDAR_API_KEY,
baseURL: "https://api.tondarai.com/v1",
});
const resp = await client.chat.completions.create({
model: "<模型广场中的 ID>",
messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(resp.choices[0].message.content);请求
请求行
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 方法 | POST | 必填 | 创建一次对话补全。 |
| 路径 | string | 必填 | /v1/chat/completions,基址 https://api.tondarai.com。 |
| Authorization | header | 必填 | Bearer 后面接控制台 Key。 |
| Content-Type | header | 必填 | application/json。 |
入参
请求体是 JSON 对象。下表是对接时会用到的字段。OpenAI Chat Completions 里的其他字段会按原样转发。
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 必填 | 模型广场中已开通的 ID。未开通的 ID 会被拒绝。 |
| messages | array | 必填 | 对话消息。每项含 role(system、user、assistant)和 content。content 可以是字符串,也可以是多段内容。 |
| stream | boolean | 可选 | true 时响应改为 SSE,见出参里的流式说明。默认整段 JSON 一次返回。 |
| temperature | number | 可选 | 采样温度,沿用该模型在官方接口上的取值范围。 |
| max_tokens | number | 可选 | 最多生成的 token 数。新模型若要求 max_completion_tokens,按该模型的官方字段名填写。 |
| max_completion_tokens | number | 可选 | 与 max_tokens 二选一,以模型广场里该模型的说明为准。 |
| tools | array | 可选 | 工具定义,结构与 OpenAI tools 相同,网关原样转发。 |
出参
stream 省略或为 false 时,HTTP 200 的正文是一个 JSON 对象。
response.json
{
"id": "chatcmpl-...",
"model": "<模型广场中的 ID>",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "……" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 18,
"total_tokens": 30
}
}成功响应
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 必填 | 这次补全的 ID。 |
| model | string | 必填 | 实际响应的模型名。 |
| choices[].message.role | string | 必填 | 助手消息固定为 assistant。 |
| choices[].message.content | string | 必填 | 助手正文。走工具调用时,内容可能在 tool_calls 里。 |
| choices[].finish_reason | string | 必填 | stop 表示正常结束,length 表示碰到长度上限,tool_calls 表示模型发起了工具调用。 |
| usage.prompt_tokens | number | 必填 | 输入 token 数。 |
| usage.completion_tokens | number | 必填 | 输出 token 数。 |
| usage.total_tokens | number | 必填 | 输入与输出之和。 |
stream 为 true 时,响应类型是 text/event-stream。每一行以 data: 开头,JSON 里读 choices[].delta.content,把片段按顺序拼起来。流以 data: [DONE] 结束。
stream
data: {"choices":[{"delta":{"content":"你"}}]}
data: {"choices":[{"delta":{"content":"好"}}]}
data: [DONE]和官方接口的差异
- OpenAI SDK 的 base_url / baseURL 写成 https://api.tondarai.com/v1,末尾保留 /v1。
- api_key 用 Tondar 控制台的 Key。
- model 使用模型广场里的 ID。
- 本篇只覆盖 Chat Completions。Responses、向量、语音不在这条教程里。
错误
失败时正文是 error 对象,原因在 error.message。
error.json
{
"error": {
"message": "具体原因",
"type": "invalid_request_error",
"code": "model_not_found"
}
}- 未带 Key,或 Key 无效:请求被拒绝。
- model 未开通:error.message 会说明模型不可用。
- messages 缺失或字段类型不对:请求在转发前被拒绝。
- 触发频率限制时稍后重试,并读响应里的说明。