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/chat/completions

最小示例

下面三次调用是同一条请求。环境变量 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。
Authorizationheader必填Bearer 后面接控制台 Key。
Content-Typeheader必填application/json。

入参

请求体是 JSON 对象。下表是对接时会用到的字段。OpenAI Chat Completions 里的其他字段会按原样转发。

请求体

字段类型必填说明
modelstring必填模型广场中已开通的 ID。未开通的 ID 会被拒绝。
messagesarray必填对话消息。每项含 role(system、user、assistant)和 content。content 可以是字符串,也可以是多段内容。
streamboolean可选true 时响应改为 SSE,见出参里的流式说明。默认整段 JSON 一次返回。
temperaturenumber可选采样温度,沿用该模型在官方接口上的取值范围。
max_tokensnumber可选最多生成的 token 数。新模型若要求 max_completion_tokens,按该模型的官方字段名填写。
max_completion_tokensnumber可选与 max_tokens 二选一,以模型广场里该模型的说明为准。
toolsarray可选工具定义,结构与 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
  }
}

成功响应

字段类型必填说明
idstring必填这次补全的 ID。
modelstring必填实际响应的模型名。
choices[].message.rolestring必填助手消息固定为 assistant。
choices[].message.contentstring必填助手正文。走工具调用时,内容可能在 tool_calls 里。
choices[].finish_reasonstring必填stop 表示正常结束,length 表示碰到长度上限,tool_calls 表示模型发起了工具调用。
usage.prompt_tokensnumber必填输入 token 数。
usage.completion_tokensnumber必填输出 token 数。
usage.total_tokensnumber必填输入与输出之和。

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 缺失或字段类型不对:请求在转发前被拒绝。
  • 触发频率限制时稍后重试,并读响应里的说明。