API 文档

WisGate 文本、图片、视频与通用接口调用说明

Chat Completions

对话补全、流式输出、工具调用与结构化输出。

Chat Completions 对话补全

通过 POST /v1/chat/completions 提交消息历史,获得模型的下一条回复。支持普通 JSON 响应和 SSE 流式输出;工具调用、结构化输出、图片等能力取决于所选模型与渠道。

本文以 deepseek-v4-flash 为 WisGate 公开模型名示例。调用前需确认该模型已对当前 API Key 开放。兼容 OpenAI 请求格式不意味着支持 OpenAI 所有模型专属功能。

连接信息

项目 值
HTTP 地址 https://api.wisgate.cn/v1/chat/completions
方法 POST
鉴权 Authorization: Bearer YOUR_API_KEY
请求类型 Content-Type: application/json
OpenAI SDK base URL https://api.wisgate.cn/v1

下文假设服务端已经设置环境变量 WISGATE_API_KEY。

最小请求

curl --fail-with-body https://api.wisgate.cn/v1/chat/completions \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "system", "content": "请用简洁的中文回答。"},
      {"role": "user", "content": "解释什么是 API。"}
    ],
    "max_tokens": 1024,
    "stream": false
  }'

响应结构示例,ID、文本和用量为示意值:

{
  "id": "chatcmpl_example",
  "object": "chat.completion",
  "created": 1791504000,
  "model": "deepseek-v4-flash",
  "choices": [{
    "index": 0,
    "message": {"role": "assistant", "content": "API 是程序之间交换信息的接口。"},
    "finish_reason": "stop"
  }],
  "usage": {"prompt_tokens": 24, "completion_tokens": 16, "total_tokens": 40}
}

读取 choices[].message.content。调用工具时正文可能为空,需同时检查 message.tool_calls。返回的 model 可能是渠道映射后的名称。usage 是用量信息,不是人民币金额。

消息与多轮对话

字段 类型 要求与含义
model string 必填,使用 WisGate 模型名
messages array 必填且非空,按时间顺序提供对话
messages[].role string 常用 system、user、assistant;工具结果用 tool
messages[].content string / array 文本或模型支持的内容块;基础示例使用字符串
messages[].tool_calls array assistant 发出的函数调用列表
messages[].tool_call_id string tool 消息对应的调用 ID

下一轮应发送所需历史,网关没有为此端点提供自动会话存储:

{
  "model": "deepseek-v4-flash",
  "messages": [
    {"role": "system", "content": "请用简洁的中文回答。"},
    {"role": "user", "content": "解释什么是 API。"},
    {"role": "assistant", "content": "API 是程序之间交换信息的接口。"},
    {"role": "user", "content": "再举一个天气查询的例子。"}
  ]
}

常用控制参数

下列参数的实际支持范围取决于所选模型与渠道。

参数 类型 本平台处理与使用建议
stream boolean true 使用 SSE;省略时非流式
stream_options.include_usage boolean 流式请求可申请用量块;断流时可能收不到
max_tokens integer 输出预算;本页 DeepSeek 示例使用此字段
max_completion_tokens integer 兼容字段,适合要求此名称的模型;不要同时发送两个预算字段
temperature number 采样温度;是否生效及范围由模型决定
top_p number 核采样;建议不要同时调整 temperature 和 top_p
stop string / string[] 停止序列,依赖模型
frequency_penalty、presence_penalty number 惩罚参数,依赖模型
tools array 基础函数工具声明,见后文
tool_choice string / object 工具选择策略,依赖模型和适配路径
parallel_tool_calls boolean 并行工具请求开关,不保证上游并行执行
response_format object JSON 输出或 JSON Schema;需模型支持
reasoning_effort、thinking string / object 分别是推理强度和供应商扩展,不能跨模型盲目套用
seed、n、logprobs、top_logprobs number / boolean 字段可解析;支持范围由上游决定,默认不发送

非透传渠道会把请求解码为已知字段再发送。未知字段可能被丢弃;当前普通 Chat 转换路径不保留 tools[].function.strict,请勿依赖该字段实现严格工具 Schema。response_format.json_schema 则保留为原始 JSON,两者不是同一个支持结论。store、safety_identifier 等字段还可能受渠道过滤设置影响。

流式输出

curl --fail-with-body -N https://api.wisgate.cn/v1/chat/completions \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [{"role": "user", "content": "用三句话介绍杭州。"}],
    "stream": true,
    "stream_options": {"include_usage": true}
  }'

分片示意(不是完整事件序列):

data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"杭州"},"finish_reason":null}]}

data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

逐个 SSE 事件解析 choices[].delta.content,不要把一次网络读取当作一个完整 JSON。用量分片可能 choices=[];工具分片应按调用 index 累积 function.arguments 后再解析 JSON。出现 reasoning_content 时与最终正文分开处理。网络提前关闭不等于生成完成。OpenAI 流式参数参考

函数工具调用

工具由你的服务端执行,网关不会替你运行函数。以下为可合并到请求的完整示例:

{
  "model": "deepseek-v4-flash",
  "messages": [{"role": "user", "content": "杭州现在多少度?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "查询城市当前天气",
      "parameters": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"]
      }
    }
  }],
  "tool_choice": "auto"
}

若返回 finish_reason=tool_calls,先校验工具名和参数,再执行允许的函数。将原请求历史、完整 assistant 工具调用消息及每个工具结果一并发送。第二轮结构示例:

{
  "model": "deepseek-v4-flash",
  "messages": [
    {"role": "user", "content": "杭州现在多少度?"},
    {"role": "assistant", "content": null, "tool_calls": [
      {"id": "call_example", "type": "function", "function": {"name": "get_weather", "arguments": "{\"city\":\"杭州\"}"}}
    ]},
    {"role": "tool", "tool_call_id": "call_example", "content": "{\"city\":\"杭州\",\"temperature_c\":24}"}
  ]
}

示例省略了推理内容;真实调用如果返回了上游要求回传的推理字段,应保留原消息,不能只手工重建工具 ID。工具结果示例中的天气为虚构测试数据。

JSON 输出

{
  "model": "deepseek-v4-flash",
  "messages": [
    {"role": "system", "content": "只输出 JSON 对象,包含 city 和 country 两个字符串字段。"},
    {"role": "user", "content": "杭州属于哪个国家?"}
  ],
  "response_format": {"type": "json_object"},
  "max_tokens": 1024
}

平台支持传递 json_object 和 json_schema 格式配置;目标模型是否执行严格 Schema 约束取决于渠道能力。应用仍需处理截断、拒绝、空内容和 JSON 校验失败。

SDK 示例

Python(安装 openai,API Key 从环境变量读取):

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["WISGATE_API_KEY"], base_url="https://api.wisgate.cn/v1")
response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "解释什么是 API。"}],
    max_tokens=1024,
)
print(response.choices[0].message.content)

JavaScript / TypeScript(安装 openai,在 Node.js 服务端运行):

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.WISGATE_API_KEY,
  baseURL: "https://api.wisgate.cn/v1",
});
const stream = await client.chat.completions.create({
  model: "deepseek-v4-flash",
  messages: [{ role: "user", content: "解释什么是 API。" }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

响应与错误处理

字段/情况 处理
finish_reason=stop 正常结束
finish_reason=length 输出预算不足,正文或 JSON 可能不完整
finish_reason=tool_calls 执行工具往返流程
其他 finish_reason 保留原值,按模型文档处理;不要强行视为成功文本
usage.prompt_tokens/completion_tokens/total_tokens 请求、生成、总 Token;缓存/推理明细可能另外返回
400 类参数错误 检查 model、messages、参数类型,不要原样无限重试
401 / 403 检查密钥、权限和模型开放范围
429 / 暂时性 5xx 有界退避重试,避免高并发立即重发

典型错误结构为 {"error":{"message":"...","type":"...","code":"..."}},具体文案和 HTTP 状态可能受渠道映射影响。流已开始后还要处理 SSE 内错误和连接中断。

图片、音频、内置联网搜索和 OpenAI 新增工具类型不列为本页 DeepSeek 示例的已验证能力。参见 Responses 与 Claude Messages 了解其他协议。