API 文档

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

Claude Messages

Anthropic Messages 协议、工具调用与流式事件。

Claude 协议:Messages

通过 POST /v1/messages 使用 Anthropic Messages 格式调用 WisGate 模型。本文用 deepseek-v4-flash 演示协议接入;模型仍是请求指定的 DeepSeek 路由,不会因为使用 Claude 协议而变成 Claude 模型。

后端既有原生 Claude 协议路径,也有 Claude 与 OpenAI Chat 之间的转换路径。DeepSeek 专用渠道会发送到上游 /anthropic/v1/messages;不同渠道对高级字段的保留能力不同。

接口与鉴权

项目 值
地址 https://api.wisgate.cn/v1/messages
方法 POST
内容类型 application/json
推荐鉴权头 x-api-key: YOUR_API_KEY
兼容鉴权头 Authorization: Bearer YOUR_API_KEY
协议版本头 anthropic-version: 2023-06-01
Anthropic SDK base URL https://api.wisgate.cn,不手工追加 /v1

两种鉴权头选择一种;入站中间件在 Messages 路径会优先用非空 x-api-key。请使用 WisGate API Key。

基本调用

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

响应结构示例:

{
  "id": "msg_example",
  "type": "message",
  "role": "assistant",
  "model": "deepseek-v4-flash",
  "content": [{"type":"text","text":"API 是程序之间交换信息的接口。"}],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {"input_tokens":24,"output_tokens":16}
}

遍历 content,仅将 type=text 的 text 拼接为普通正文。数组也可能包含工具或 thinking 块,不能假定全部是文本。不同上游可能返回额外字段。

请求参数

参数 类型 要求与含义
model string 必填,WisGate 模型名
messages array 必填且非空,消息 role 使用 user / assistant
messages[].content string / array 文本或内容块
max_tokens integer 按标准调用显式提供正整数;不要依赖渠道默认补值
system string / array 顶层系统指令,不要在 messages 中添加 system role
stream boolean 是否返回 SSE
temperature、top_p number 可选采样控制,具体支持依赖模型
top_k integer 原生协议字段;OpenAI 桥接不保证保留
stop_sequences string[] 停止序列
tools array 客户端工具定义,使用 input_schema
tool_choice object 工具选择;原生渠道与桥接渠道支持不同
thinking object 模型相关,不应套用 Claude 的预算范围到 DeepSeek
metadata object 可选扩展;跨协议转换不保证保留

格式参考 Anthropic Messages。网关可解析字段不代表模型接受全部参数。

多轮消息

下一次请求发送完整历史,并继续提供所需 system:

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

流式调用

curl --fail-with-body -N https://api.wisgate.cn/v1/messages \
  -H "x-api-key: $WISGATE_API_KEY" \
  -H 'anthropic-version: 2023-06-01' \
  -H 'Content-Type: application/json' \
  -d '{"model":"deepseek-v4-flash","max_tokens":1024,"messages":[{"role":"user","content":"用三句话介绍杭州。"}],"stream":true}'

正常流的基本生命周期:message_start → 多组 content_block_start/delta/stop → message_delta → message_stop。也可能出现 ping、error;不要使用 Chat 的 [DONE] 作为唯一结束标志。

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"杭州"}}

text_delta.text 用于正文;input_json_delta.partial_json 用于按 index 拼接工具参数,块结束后解析。message_delta.usage 的输出用量按累计值更新,不要逐事件相加。协议事件参考 Anthropic 流式文档。

工具声明与回传

第一轮请求示例:

{
  "model": "deepseek-v4-flash",
  "max_tokens": 1024,
  "messages": [{"role":"user","content":"查询杭州天气。"}],
  "tools": [{
    "name": "get_weather",
    "description": "查询城市天气",
    "input_schema": {
      "type": "object",
      "properties": {"city":{"type":"string"}},
      "required": ["city"]
    }
  }]
}

若 stop_reason=tool_use,从 assistant 的 content 读取 tool_use 块,校验后执行函数。下一轮把该 assistant 内容原样保留,再以 user 消息发送 tool_result:

{
  "model": "deepseek-v4-flash",
  "max_tokens": 1024,
  "messages": [
    {"role":"user","content":"查询杭州天气。"},
    {"role":"assistant","content":[{"type":"tool_use","id":"toolu_example","name":"get_weather","input":{"city":"杭州"}}]},
    {"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_example","content":"{\"temperature_c\":24}"}]}
  ]
}

天气为示意数据。真实返回若包含文本、thinking 或签名块,应遵循目标上游要求保留完整内容。多个 tool_use 需要分别返回匹配 ID 的结果;工具不是网关代为执行。

Python 与 TypeScript SDK

Python(安装 anthropic):

import os
from anthropic import Anthropic

client = Anthropic(api_key=os.environ["WISGATE_API_KEY"], base_url="https://api.wisgate.cn")
message = client.messages.create(
    model="deepseek-v4-flash",
    max_tokens=1024,
    messages=[{"role":"user","content":"解释什么是 API。"}],
)
print("".join(block.text for block in message.content if block.type == "text"))

Node.js(安装 @anthropic-ai/sdk):

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({ apiKey: process.env.WISGATE_API_KEY, baseURL: "https://api.wisgate.cn" });
const stream = await client.messages.create({
  model: "deepseek-v4-flash",
  max_tokens: 1024,
  messages: [{ role: "user", content: "解释什么是 API。" }],
  stream: true,
});
for await (const event of stream) {
  if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
    process.stdout.write(event.delta.text);
  }
}

兼容范围与排错

情况 说明
stop_reason=end_turn 正常回复结束
stop_reason=max_tokens 达到预算,输出可能不完整
stop_reason=stop_sequence 命中停止序列
stop_reason=tool_use 进入工具往返流程
usage 主要字段为 input_tokens/output_tokens;缓存字段依赖上游,不套用 Chat 字段名
system 无效 检查是否错误地放在 messages 的 system role 中
返回 401/403 检查 WisGate Key 与模型权限
参数丢失 检查是否走 Claude→OpenAI 桥接,不能假定高级参数完全兼容

Claude→OpenAI 桥接当前映射基础消息、system、stop_sequences、函数工具和结果,但没有完整复制 tool_choice、top_k、metadata 等语义。原生路径与桥接路径不能共用“全部 Anthropic 特性可用”的承诺。

不在本页承诺范围:Messages Batches、/v1/messages/count_tokens、Claude 内置服务端工具、PDF/citations、prompt caching、computer use、beta 特性及所有图片输入形式。代码中存在部分相关字段不代表整个流程可用。

Messages 业务错误通常为 {"type":"error","error":{"type":"...","message":"..."}};更早的鉴权或限流中间件可能返回通用网关错误。HTTP 流开始后需处理事件中的错误及异常中断。