外观
创建聊天补全
POST
https://vip.zen-ai.top/v1/chat/completionsOpenAI Chat Completions 兼容接口,也是最通用的对话接口:GPT、Claude、Gemini、Grok、DeepSeek、Qwen 等所有对话模型都可以通过它调用,切换模型只需修改 model。系统会根据令牌所属的分组自动选择渠道。
- 支持流式(SSE)与非流式输出、多轮对话、图片理解、函数调用、JSON 结构化输出。
- 推理模型(GPT-5 系列、o 系列等)请使用
max_completion_tokens和reasoning_effort,这类模型通常不支持temperature、top_p等采样参数。 - 需要 Claude 的 thinking 块、Gemini 的联网搜索等原生能力时,推荐直接使用 Claude 原生格式 或 Gemini 原生格式。
请求头
Authorizationstring必填Bearer sk-xxxx,令牌在控制台「令牌」页面创建。
Content-Typestring必填application/json
请求体
modelstring必填模型名称,例如 gpt-4.1-mini、claude-sonnet-4-6、gemini-3.5-flash。模型必须在令牌所属分组中可用,完整清单见 模型列表。
messagesarray必填对话消息列表,按时间顺序排列,支持多轮对话。
子字段 5
rolestring必填消息角色。developer 等同于新版模型中的 system;tool 用于回传函数执行结果。
可选值
systemdeveloperuserassistanttoolcontentstring | array必填消息内容。纯文本直接传字符串;多模态时传内容数组,元素类型包括:
{"type": "text", "text": "..."}{"type": "image_url", "image_url": {"url": "https://... 或 data:image/png;base64,...", "detail": "auto"}}{"type": "input_audio", "input_audio": {"data": "<base64>", "format": "wav"}}(音频模型)
namestring参与者名称,用于区分同一角色的不同发言者。
tool_callsarray助手消息中模型发起的函数调用(多轮函数调用时原样带回)。
tool_call_idstringrole 为 tool 时必填,对应要回复的 tool_calls[].id。
streamboolean默认 false是否以 SSE 流式返回。开启后按 data: {...} 逐块推送,最后以 data: [DONE] 结束。
stream_optionsobject流式选项。
子字段 1
include_usageboolean为 true 时,在结束前额外推送一个包含 usage 的数据块(其 choices 为空数组)。
max_tokensinteger本次回复最多生成的 token 数(适用于非推理模型)。调用 Claude 模型时建议显式设置。
max_completion_tokensinteger回复(含推理 token)的上限,推理模型请使用此参数代替 max_tokens。
temperaturenumber默认 1采样温度,取值 0–2。越高越随机,越低越稳定。一般只调整它或 top_p 其中之一。
top_pnumber默认 1核采样,取值 0–1,只从累计概率达到 top_p 的 token 中采样。
ninteger默认 1为同一输入生成几条候选回复,按生成的 token 总数计费。
stopstring | array遇到这些字符串时停止生成,最多 4 个。
presence_penaltynumber默认 0取值 -2.0–2.0,正值会降低重复话题出现的概率。
frequency_penaltynumber默认 0取值 -2.0–2.0,正值会降低重复用词的概率。
logit_biasobject调整指定 token 出现概率,键为 token ID,值为 -100–100。
seedinteger随机种子,相同种子与参数时尽量返回一致结果(不保证完全一致)。
response_formatobject指定输出格式。
子字段 2
typestring必填json_object 要求输出合法 JSON(提示词里也需说明要输出 JSON);json_schema 按给定 Schema 严格输出。
可选值
textjson_objectjson_schemajson_schemaobjecttype 为 json_schema 时必填,包含 name、schema(JSON Schema)、strict(是否严格校验)。
toolsarray模型可调用的函数列表。
子字段 2
typestring必填固定为 function。
functionobject必填函数定义:name(函数名)、description(用途说明)、parameters(JSON Schema 描述的参数)、strict(可选)。
tool_choicestring | object控制是否调用函数:none 不调用、auto 由模型决定、required 必须调用,或 {"type": "function", "function": {"name": "get_weather"}} 指定函数。
parallel_tool_callsboolean默认 true是否允许一次回复中并行发起多个函数调用。
reasoning_effortstring推理强度,仅推理模型支持(GPT-5 系列、o 系列等),部分新模型还支持 none、xhigh。强度越高思考越充分,耗时与费用也越高。
可选值
minimallowmediumhighmodalitiesarray输出模态,如 ["text", "audio"],仅音频模型(如 gpt-4o-audio-preview、gpt-audio)支持。
audioobject音频输出设置,如 {"voice": "alloy", "format": "wav"},需同时设置 modalities。
logprobsboolean默认 false是否返回输出 token 的对数概率(部分模型支持)。
userstring终端用户标识,便于滥用检测。
响应
非流式返回 chat.completion 对象;流式返回一系列 chat.completion.chunk,每块的增量内容位于 choices[0].delta。
idstring本次请求的唯一 ID。
objectstring固定为 chat.completion(流式为 chat.completion.chunk)。
createdinteger创建时间(Unix 时间戳,秒)。
modelstring实际使用的模型名称。
choicesarray候选回复列表。
子字段 3
indexinteger候选序号。
messageobject回复消息:role、content;推理类模型可能额外返回 reasoning_content(思考过程);触发函数调用时返回 tool_calls。
finish_reasonstring结束原因。length 表示达到 token 上限被截断。
可选值
stoplengthtool_callscontent_filterusageobjecttoken 用量。
子字段 5
prompt_tokensinteger输入 token 数。
completion_tokensinteger输出 token 数(含推理 token)。
total_tokensinteger总 token 数。
prompt_tokens_detailsobject输入明细,如 cached_tokens(命中缓存的 token 数)。
completion_tokens_detailsobject输出明细,如 reasoning_tokens(推理 token 数)。
请求示例
bash
curl https://vip.zen-ai.top/v1/chat/completions \
-H "Authorization: Bearer $VIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4.1-mini",
"messages": [
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "用一句话介绍一下你自己。"}
]
}'python
from openai import OpenAI
client = OpenAI(
base_url="https://vip.zen-ai.top/v1",
api_key="sk-xxxxxxxx",
)
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "用一句话介绍一下你自己。"},
],
)
print(resp.choices[0].message.content)js
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://vip.zen-ai.top/v1",
apiKey: process.env.VIP_API_KEY,
});
const resp = await client.chat.completions.create({
model: "gpt-4.1-mini",
messages: [
{ role: "system", content: "你是一个乐于助人的助手。" },
{ role: "user", content: "用一句话介绍一下你自己。" },
],
});
console.log(resp.choices[0].message.content);响应示例
json
{
"id": "chatcmpl-CKx8f2mQn1bYt7pVq3LwZrJd9sHaE",
"object": "chat.completion",
"created": 1790684800,
"model": "gpt-4.1-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "我是一个 AI 助手,可以帮你解答问题、写作、翻译和编写代码。",
"refusal": null
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 27,
"completion_tokens": 21,
"total_tokens": 48,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 }
}
}text
data: {"id":"chatcmpl-CKx9...","object":"chat.completion.chunk","created":1790684800,"model":"gpt-4.1-mini","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-CKx9...","object":"chat.completion.chunk","created":1790684800,"model":"gpt-4.1-mini","choices":[{"index":0,"delta":{"content":"秋"},"finish_reason":null}]}
data: {"id":"chatcmpl-CKx9...","object":"chat.completion.chunk","created":1790684800,"model":"gpt-4.1-mini","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-CKx9...","object":"chat.completion.chunk","created":1790684800,"model":"gpt-4.1-mini","choices":[],"usage":{"prompt_tokens":20,"completion_tokens":32,"total_tokens":52}}
data: [DONE]json
{
"error": {
"message": "当前分组 default 下对于模型 xxx 无可用渠道 (request id: 20260929...)",
"type": "new_api_error",
"code": "model_not_found"
}
}更多示例
流式输出
python
stream = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "写一首关于秋天的五言绝句。"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)js
const stream = await client.chat.completions.create({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: "写一首关于秋天的五言绝句。" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}图片理解(本地图片)
本地图片转为 base64 后以 Data URL 形式传入:
python
import base64
with open("photo.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
],
}],
)
print(resp.choices[0].message.content)函数调用(完整两轮)
python
import json
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的实时天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string", "description": "城市名称"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "上海今天天气怎么样?"}]
# 第一轮:模型决定调用函数
first = client.chat.completions.create(model="gpt-4.1-mini", messages=messages, tools=tools)
msg = first.choices[0].message
messages.append(msg)
for call in msg.tool_calls or []:
args = json.loads(call.function.arguments)
result = {"city": args["city"], "weather": "多云", "temperature": "22°C"} # 这里调用你自己的实现
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)})
# 第二轮:模型根据函数结果作答
final = client.chat.completions.create(model="gpt-4.1-mini", messages=messages, tools=tools)
print(final.choices[0].message.content)推理模型
GPT-5 系列、o 系列属于推理模型:使用 max_completion_tokens 限制输出(含思考),用 reasoning_effort 控制思考深度,不要传 temperature。
python
resp = client.chat.completions.create(
model="gpt-5.4-mini",
reasoning_effort="low", # minimal / low / medium / high
max_completion_tokens=4096,
messages=[{"role": "user", "content": "一个数加上它的一半等于 45,这个数是多少?"}],
)
print(resp.choices[0].message.content)
print(resp.usage.completion_tokens_details.reasoning_tokens) # 推理消耗的 tokenDeepSeek、Qwen、Claude 等模型的思考内容会通过 reasoning_content 字段返回,详见 思考与推理参数。
模型不可用?
如果返回 当前分组 xxx 下对于模型 xxx 无可用渠道,说明令牌所属分组不提供该模型。请到 模型列表 查看模型所在分组,然后在控制台修改令牌分组,或新建一个对应分组的令牌。