文本生成(Anthropic Messages 协议)

接口概述

使用 Anthropic Messages 格式进行纯文本对话生成。该协议与 OpenAI Chat Completions 有几处关键差异,接入前请留意:

  • 系统提示词走顶层 system 参数,不是 messages 数组里的 system 角色。
  • max_tokens 是必填参数,每个请求都要显式指定。
  • 开启思考模式时,响应里会多出 thinking 类型的内容块;取正文时按 content[].type 过滤即可。

接口地址

POST https://test.jw-info.com/v1/messages

请求头

请求头是否必填说明
Content-Typeapplication/json
x-api-key{API_KEY}(本协议原生认证头)
anthropic-version否(推荐)API 版本号,如 2023-06-01;携带它可保证行为稳定

本平台同时接受 Authorization: Bearer {API_KEY}——与 x-api-key 是同一把密钥的两种传法,不需要建两套密钥

请求参数

请求体(JSON):

参数名类型是否必填默认值说明
modelstring-模型名称,见下方「可用模型」与模型广场
messagesarray-对话消息列表,按时间顺序排列
systemstring / arraynull系统提示词,定义 AI 的角色和行为;支持纯文本字符串或内容块数组
max_tokensinteger-生成的最大 token 数(必填
temperaturefloat1.0采样温度,范围 [0, 1];越接近 0 输出越确定
top_pfloatnull核采样,范围 [0, 1]
top_kintegernull只保留概率最高的 top_k 个 token 参与采样
streambooleanfalse是否启用流式输出(SSE)
stop_sequencesarraynull停止词列表,遇到任一停止词即停止生成
toolsarraynull可用的工具/函数定义列表
tool_choiceobject{"type": "auto"}工具选择策略
thinkingobjectnull思考模式配置,如 {"type": "enabled", "budget_tokens": 1024}

messages 结构

字段类型说明
rolestring消息角色:user / assistant
contentstring / array消息内容,可以是纯文本字符串,也可以是内容块数组
role说明
user用户输入消息
assistantAI 历史回复消息,用于多轮对话

本协议没有 system 角色:系统提示词一律通过顶层 system 传入。

请求示例

示例 1:简单对话

{
  "model": "deepseek-v3.2",
  "max_tokens": 1024,
  "messages": [
    { "role": "user", "content": "你好,请用一句话介绍你自己" }
  ]
}

示例 2:带系统提示词的多轮对话

{
  "model": "qwen3.7-max",
  "system": "你是一个专业的 Python 编程助手,回答问题时请提供代码示例。",
  "max_tokens": 2048,
  "messages": [
    { "role": "user", "content": "如何在 Python 中读取 JSON 文件?" },
    { "role": "assistant", "content": "可以使用内置的 json 模块……" },
    { "role": "user", "content": "如果要写入 JSON 文件呢?" }
  ]
}

示例 3:开启思考模式

{
  "model": "deepseek-v4-pro",
  "system": "你是一个严谨的数学助手",
  "max_tokens": 4096,
  "thinking": { "type": "enabled", "budget_tokens": 1024 },
  "messages": [
    { "role": "user", "content": "请证明根号 2 是无理数" }
  ]
}

思考模式需要模型本身支持;开启后响应里会有 thinking 内容块,正文仍在 text 内容块里。

示例 4:流式输出

{
  "model": "deepseek-v3.2",
  "max_tokens": 512,
  "messages": [
    { "role": "user", "content": "写一首关于秋天的五言诗" }
  ],
  "stream": true
}

响应参数

非流式响应:

参数名类型说明
idstring本次请求的唯一标识符
typestring固定值 message
rolestring固定值 assistant
modelstring实际使用的模型名称
contentarray内容块数组
content[].typestring内容类型:text(正文)/ thinking(思考过程)/ tool_use(工具调用)
content[].textstringtypetext 时的文本内容
content[].thinkingstringtypethinking 时的思考内容(同块还带 signature 字段)
stop_reasonstring停止原因:end_turn(正常结束)/ max_tokens(达到长度限制)/ stop_sequence(遇到停止词)/ tool_use(触发工具调用)
stop_sequencestring触发停止的停止词(仅 stop_reasonstop_sequence 时出现)
usage.input_tokensinteger输入消耗的 token 数
usage.output_tokensinteger输出消耗的 token 数
usage.cache_read_input_tokensinteger命中缓存的输入 token 数(计费按缓存价)

流式响应事件(SSE)

请求体带 "stream": true 时按 SSE 返回,事件类型如下:

事件类型说明
message_start消息开始,含初始元数据(id、model、role)
content_block_start内容块开始,指示块类型(text / thinking / tool_use)
content_block_delta内容块增量,delta.text 为文本增量
content_block_stop内容块结束
message_delta消息增量,含 stop_reason 与最终 usage(input_tokens / output_tokens)
message_stop消息结束,流结束标记

message_start 里的 usage 可能是空对象,最终用量以 message_delta 为准

响应示例

非流式响应

{
  "id": "msg_01AbCdEfGhIjKlMnOp",
  "type": "message",
  "role": "assistant",
  "model": "deepseek-v3.2",
  "content": [
    { "type": "text", "text": "你好!我是 DeepSeek,很高兴为你服务。" }
  ],
  "stop_reason": "end_turn",
  "usage": { "input_tokens": 15, "output_tokens": 22 }
}

开启思考模式的响应

{
  "id": "msg_01XyZAbCdEfGhIjKl",
  "type": "message",
  "role": "assistant",
  "model": "deepseek-v4-pro",
  "content": [
    {
      "type": "thinking",
      "thinking": "要证明根号 2 是无理数,我准备采用反证法……",
      "signature": "abc123..."
    },
    {
      "type": "text",
      "text": "证明:假设 √2 是有理数……"
    }
  ],
  "stop_reason": "end_turn",
  "usage": { "input_tokens": 25, "output_tokens": 512 }
}

流式响应(节选)

event: message_start
data: {"type":"message_start","message":{"id":"msg_01AbCdEf","type":"message","role":"assistant","model":"deepseek-v3.2","content":[],"usage":{}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"你好"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":15,"output_tokens":5}}

event: message_stop
data: {"type":"message_stop"}

错误响应

统一返回 {"detail": "说明文字"}

HTTP常见情况
400请求体格式错误或参数无效(例如漏传必填的 max_tokens
401API Key 无效、缺失或已禁用
402账户余额不足
404模型未上架或已停用
502请求被模型拒绝,正文里带上模型给出的原始说明,其形状为 {"error": {"message": "...", "type": "invalid_request_error", "param": "...", "code": "..."}}param 指出出错字段)

完整状态码与排查建议见「错误码」页。

代码示例

cURL(非流式)

curl https://test.jw-info.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-你的密钥" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "deepseek-v3.2",
    "max_tokens": 1024,
    "system": "你是一个友好的助手",
    "messages": [
      { "role": "user", "content": "你好,请介绍一下你自己" }
    ]
  }'

cURL(流式)

curl https://test.jw-info.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-你的密钥" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "deepseek-v3.2",
    "max_tokens": 512,
    "stream": true,
    "messages": [
      { "role": "user", "content": "讲一个笑话" }
    ]
  }'

Python(非流式)

import requests

resp = requests.post(
    "https://test.jw-info.com/v1/messages",
    headers={
        "Content-Type": "application/json",
        "x-api-key": "sk-你的密钥",
        "anthropic-version": "2023-06-01",
    },
    json={
        "model": "deepseek-v3.2",
        "max_tokens": 1024,
        "system": "你是一个友好的助手",
        "messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
    },
)
data = resp.json()
if resp.status_code == 200:
    for block in data["content"]:
        if block["type"] == "text":
            print(block["text"])
    print("输入 token:", data["usage"]["input_tokens"])
    print("输出 token:", data["usage"]["output_tokens"])
    print("停止原因:", data["stop_reason"])
else:
    print("错误:", data.get("detail", "未知错误"))

Python(流式)

import json

import requests

resp = requests.post(
    "https://test.jw-info.com/v1/messages",
    headers={
        "Content-Type": "application/json",
        "x-api-key": "sk-你的密钥",
        "anthropic-version": "2023-06-01",
    },
    json={
        "model": "deepseek-v3.2",
        "max_tokens": 512,
        "messages": [{"role": "user", "content": "写一首关于春天的诗"}],
        "stream": True,
    },
    stream=True,
)

for line in resp.iter_lines():
    if not line or not line.startswith(b"data:"):
        continue
    event = json.loads(line[5:].strip())
    if event.get("type") == "content_block_delta":
        print(event["delta"].get("text", ""), end="", flush=True)
    elif event.get("type") == "message_delta":
        print("\n用量:", event.get("usage"))

可用模型

以下模型已实测支持本协议(模型名照模型广场的写法传入):

厂商模型名说明
通义千问qwen3.7-max旗舰模型,综合能力最强
通义千问qwen3.6-27b27B 参数模型,能力均衡
通义千问qwen3.6-35b-a3b35B 总参 / 3B 激活的 MoE 模型
通义千问qwen3-max通义千问 3 代旗舰模型
通义千问qwen-plus增强版,性价比之选
通义千问qwen3-coder-plus编程专用增强版
DeepSeekdeepseek-v4-proDeepSeek V4 旗舰版
DeepSeekdeepseek-v4-flashDeepSeek V4 轻量极速版
DeepSeekdeepseek-v3.2DeepSeek V3.2 版本
DeepSeekdeepseek-r1DeepSeek 推理增强模型
DeepSeekdeepseek-r1-0528DeepSeek R1 的 0528 版本
智谱AIglm-5.2GLM-5.2 旗舰模型
智谱AIglm-5.1GLM-5.1 版本
智谱AIglm-5.0GLM-5.0 版本
智谱AIglm-5-turboGLM-5 速度版
MiniMaxminimax-m2.7MiniMax M2.7 版本
MiniMaxminimax-m2.5MiniMax M2.5 版本
豆包doubao1.5-pro-32k豆包 1.5 Pro 32K 上下文版本

模型支持范围

本协议由模型侧支持,不是所有文本模型都支持(2026-09-17 全量实测:90 支文本模型里 73 支可用)。不支持的多为较早的第三方开源型号(如 qwen3-4b / qwen3-8b / qwen3-14bdeepseek-r1-distill-* 等),调用会返回 401 并提示「该模型不支持 anthropic 协议」——改用 /v1/chat/completions 调同一个模型即可,模型名与计费都不变。

计费

  • 按输入 / 输出 token 计费,与 /v1/chat/completions 同模型同价格:输入分「未命中缓存」与「命中缓存」两档单价,输出按输出单价。
  • 非流式在响应返回时结算;流式在流结束时按最终 usage 结算。
  • 账户余额不足时调用前直接返回 402,请管理员在控制台「费用中心」手工授信。
  • 响应本身不返回费用信息,每次费用记入控制台「费用中心」。

在模型广场查看支持「文本生成」的模型 →