API 參考
Chat Completions 對話補全
POST /v1/chat/completions 的請求頭、參數、請求與響應示例、流式輸出格式。OpenAI 相容,GPT、Claude、Gemini、DeepSeek 等模型都能用同一套程式碼呼叫,已實測含流式。
POST /v1/chat/completions 是最常用的介面:傳入一組對話訊息,返回模型的回覆。格式與 OpenAI Chat Completions 一致,目錄裡標註支援該介面的模型(包括 GPT、Claude、Gemini、DeepSeek、通義千問等)都可以用同一套程式碼呼叫。本介面已在本站實測,包括流式輸出。
https://www.tutujin.com/v1/chat/completions請求頭
| 請求頭 | 必填 | 說明 |
|---|---|---|
Authorization | 是 | Bearer sk-...,控制台建立的 API Key |
Content-Type | 是 | application/json |
請求參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
model | string | 是 | 模型名,例如 gpt-5.4-mini |
messages | array | 是 | 對話訊息列表,按時間順序排列,結構見下文 |
stream | boolean | 否 | 設為 true 時以 SSE 流式返回,預設 false |
stream_options | object | 否 | 流式時傳 {"include_usage": true},最後一個數據塊會帶上本次用量 |
max_tokens | integer | 否 | 本次最多生成多少 tokens。部分新模型改用 max_completion_tokens |
max_completion_tokens | integer | 否 | 生成上限,包含推理模型的思考 tokens |
temperature | number | 否 | 取樣溫度,常見範圍 0 到 2,越高越發散。推理模型通常不支援 |
top_p | number | 否 | 核取樣,和 temperature 一般只調一個 |
n | integer | 否 | 返回幾個候選回答,每個候選都按實際生成的 tokens 計費 |
stop | string 或 array | 否 | 遇到這些字串時停止生成 |
presence_penalty | number | 否 | -2 到 2,正值鼓勵模型談新話題 |
frequency_penalty | number | 否 | -2 到 2,正值減少重複用詞 |
response_format | object | 否 | {"type": "json_object"} 要求輸出 JSON;部分模型支援 json_schema 嚴格結構化輸出 |
tools | array | 否 | 可供模型呼叫的函式定義(function calling) |
tool_choice | string 或 object | 否 | auto、none、required,或指定某個函式 |
reasoning_effort | string | 否 | 推理模型的思考強度,如 low、medium、high,僅部分模型支援 |
seed | integer | 否 | 儘量讓相同輸入得到相同輸出,不保證完全一致 |
user | string | 否 | 你這邊的終端使用者標識,便於排查濫用 |
不同廠商的模型對可選參數的支援程度不同。模型不支援的參數可能被忽略,也可能返回 400,接入新模型時先用小流量驗證。
messages 結構
每條訊息是一個物件,role 取以下值之一:
| role | 用途 |
|---|---|
system | 系統提示詞,設定角色、規則和輸出格式,一般放在第一條 |
user | 使用者輸入 |
assistant | 模型之前的回覆,多輪對話時原樣帶回 |
tool | 函式呼叫的執行結果,需帶上對應的 tool_call_id |
content 可以是字串,也可以是陣列。陣列形式用於圖文混合輸入,適用於支援識圖的模型:
{
"role": "user",
"content": [
{ "type": "text", "text": "这张发票的金额是多少?" },
{ "type": "image_url", "image_url": { "url": "https://example.com/invoice.png" } }
]
}圖片也可以用 data:image/png;base64,... 的形式直接放進 url。
請求示例
curl https://www.tutujin.com/v1/chat/completions \
-H "Authorization: Bearer $TUTUJIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"messages": [
{"role": "system", "content": "你是电商客服,回答简短、礼貌。"},
{"role": "user", "content": "下单后多久发货?"}
],
"temperature": 0.3
}'import os
from openai import OpenAI
client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
resp = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": "你是电商客服,回答简短、礼貌。"},
{"role": "user", "content": "下单后多久发货?"},
],
temperature=0.3,
)
print(resp.choices[0].message.content)
print(resp.usage)import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://www.tutujin.com/v1', apiKey: process.env.TUTUJIN_API_KEY })
const resp = await client.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [
{ role: 'system', content: '你是电商客服,回答简短、礼貌。' },
{ role: 'user', content: '下单后多久发货?' },
],
temperature: 0.3,
})
console.log(resp.choices[0].message.content)
console.log(resp.usage)響應示例
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1794000000,
"model": "gpt-5.4-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "您好,现货订单一般在付款后 48 小时内发货。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 31,
"completion_tokens": 22,
"total_tokens": 53
}
}| 欄位 | 說明 |
|---|---|
choices[].message.content | 模型的回答 |
choices[].message.tool_calls | 模型決定呼叫函式時出現,包含函式名和 JSON 參數 |
choices[].finish_reason | stop 正常結束;length 達到生成上限被截斷;tool_calls 需要你執行函式;content_filter 被內容安全策略攔截 |
usage.prompt_tokens | 輸入 tokens,按輸入單價計費 |
usage.completion_tokens | 輸出 tokens(推理模型含思考部分),按輸出單價計費 |
usage.prompt_tokens_details.cached_tokens | 命中上下文快取的輸入 tokens,模型支援快取時出現,按快取讀取價計費 |
流式輸出
設定 "stream": true 後,服務端用 Server-Sent Events 逐塊返回。每塊是一行 data: {...},增量文本在 choices[0].delta.content,最後以 data: [DONE] 結束:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"您好"}}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]用 SDK 時直接遍歷返回的流即可:
stream = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{"role": "user", "content": "写一段 100 字的产品介绍"}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)const stream = await client.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [{ role: 'user', content: '写一段 100 字的产品介绍' }],
stream: true,
stream_options: { include_usage: true },
})
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content
if (text) process.stdout.write(text)
if (chunk.usage) console.log('\n', chunk.usage)
}生成較長的內容時建議開啟流式:使用者更早看到結果,也不容易因為單次請求等待太久被閘道器或客戶端超時斷開。
注意事項
- 模型名要和模型廣場裡的寫法完全一致,大小寫敏感。
- 同一把 Key 只會走它所在分組的線路。某個模型返回 503 並提示沒有可用渠道時,通常是這個分組不提供該模型,換一把其他分組的 Key 再試,見選擇分組。
- 推理模型的思考過程也算輸出 tokens,費用可能明顯高於普通模型。可以用
max_completion_tokens控制上限。 - 多輪對話需要你把歷史訊息一併傳送,服務端不儲存會話。歷史越長,輸入 tokens 越多,可以按需裁剪。
- 每次請求的 tokens 與費用都能在控制台「操作日誌」中查到。
支援此介面的模型
| 模型 | 廠商 | 最低價分組 | 輸入 ¥/百萬 | 輸出 ¥/百萬 | 按次 ¥/次 |
|---|---|---|---|---|---|
| gpt-image-2 | OpenAI | 標準 | — | — | ¥0.12 |
| Claude Haiku 5.5 | Anthropic | Claude 優質 | ¥0.4 | ¥2 | — |
| qwen3.5-plus | 通義千問 | 國產模型 | ¥1.12 | ¥6.72 | — |
| gemini-3.8-flash | 標準 | ¥1.5 | ¥7.5 | — | |
| gpt-5.4-mini | OpenAI | 標準 | ¥1.5 | ¥9 | — |
| deepseek-v4.1-flash | DeepSeek | 國產模型 | ¥2.8 | ¥11.2 | — |
| Claude Sonnet 5.5 | Anthropic | Claude 經濟 | ¥3.2 | ¥16 | — |
| GPT-6.1 Sol | OpenAI | 標準 | ¥4 | ¥20 | — |
| gemini-3.1-pro-preview | 標準 | ¥4 | ¥24 | — | |
| Claude Opus 5.5 | Anthropic | Claude 經濟 | ¥8 | ¥40 | — |
價格為人民幣,取各模型最低價分組;價格更新於 2026年11月13日 下午6:08。
共 681 個模型支援此介面,上表列出其中一部分。 在模型廣場檢視全部
沒找到答案?加客服微信 JsnonoChat,傳送報錯資訊裡的 request id,我們幫你排查。