ModelSiteAPI

Qwen(通义千问)模型

qwen3.7-max / qwen3.7-plus / qwen3.8-max / qwen3-vl-plus 按场景的调用示例:思考、工具调用、JSON 输出、联网搜索、图片与视频理解、缓存

Qwen 系列通过 /v1/chat/completions 与 /v1/messages 两种格式调用。平台对请求体透传:Qwen 专属参数(enable_thinking、thinking_budget、top_k、enable_search 等)原样转发,由上游模型决定是否生效。本页按场景组织,场景划分参照阿里云百炼官方文档(深度思考、联网搜索、视觉理解、结构化输出、函数调用、上下文缓存等),但是否支持以平台实际接入的上游为准,不以官方为准。

每个场景标注证据:

  • 已实测(线上测试账号,2026-10-19):用线上账号真实调用过,响应取自真实输出(id、时间戳已替换为占位符)。
  • 依官方文档(未实测):只对照了官方文档,没有真实请求确认。

支持的模型

平台模型 id说明上下文窗口最大输出能力标签
qwen3.8-maxQwen3.8 旗舰,文本 + 图像 / 视频理解1,000,000131,072对话、流式、视觉、工具调用、思考、缓存
qwen3.7-maxQwen3.7 旗舰,文本1,000,000131,072对话、流式、工具调用、思考、缓存
qwen3.7-plusQwen3.7 均衡款,文本 + 图像 / 视频理解1,000,000131,072对话、流式、视觉、工具调用、思考、缓存
qwen3-vl-plusQwen3-VL 视觉理解262,14432,768对话、流式、视觉、工具调用、思考、缓存

能力标签以 GET /v1/models 返回为准。qwen3.7-max 的标签不含 vision,不能传图片(实测会报错,见「图片与视频输入」)。

平台不会替你开启或关闭思考。平台不会默认注入 enable_thinking、thinking_budget、reasoning_effort 或 temperature。你不传就由上游默认决定:官方文档写明 qwen3.8-max、qwen3.7-max、qwen3.7-plus 默认开启思考;qwen3-vl-plus 官方未写明默认值。需要确定的行为,就显式传 enable_thinking。

用 enable_thinking 控制 Qwen 的思考,不要用 thinking。OpenAI 与 Anthropic 两种格式下,都用顶层的 enable_thinking / thinking_budget(Python SDK 放进 extra_body)。你传的 thinking 平台会原样转发(adaptive 除外,不转发),但不会替你换算成 enable_thinking、thinking_budget 或 reasoning_effort;qwen3.7-plus 的上游会校验 thinking.type(只认 enabled / disabled / auto),其余模型是否识别未验证,请不要依赖。

场景总览

场景官方是否提供我们的情况示例
深度思考(开关 enable_thinking、读取思考内容)是支持思考模式
思考预算 thinking_budget、强度 reasoning_effort、保留思考 preserve_thinking是部分支持:依官方文档,未实测思考模式 注意事项
流式输出是部分支持:同一条管线,Qwen 上未单独实测流式输出
函数调用(含并行调用)是支持工具调用
工具调用参数流式(tool_stream)是部分支持:依官方文档,未实测工具调用 注意事项
结构化输出:json_object是支持JSON 输出
结构化输出:json_schema是(部分模型)支持(qwen3.7-max 已实测;qwen3-vl-plus 官方不在支持名单)JSON Schema
联网搜索(enable_search)是部分支持:基础搜索已实测;搜索来源、搜索策略等选项未实测,Chat Completions 官方不返回搜索来源联网搜索
图片理解(单图)是部分支持:qwen3-vl-plus 已实测;qwen3.8-max、qwen3.7-plus 依官方(未实测);qwen3.7-max 不支持图片与视频输入
多图、视频理解、OCR、目标定位、文档解析是部分支持:依官方文档,未实测图片与视频输入
上下文缓存:隐式缓存是支持(自动,无参数)上下文缓存
上下文缓存:显式缓存(cache_control)是部分支持:依赖尚未发布的更新,线上目前不生效上下文缓存
Anthropic 格式调用是(官方 Anthropic 兼容)部分支持:同一条管线,Qwen 上未单独实测Anthropic 格式
tool_choice: "required"官方说明 Qwen 不支持不支持无
思考模式下指定具体函数官方说明不支持不支持;先 enable_thinking: false见工具调用
长文本文件问答(qwen-long 文件 ID)是(独立模型)未接入:平台没有文件上传入口,也没有该模型无
角色扮演专用模型是(独立模型)未接入无
批处理(Batch)是不支持:平台不提供批处理无
qwen3.7-max 的图片输入无(文本模型)不支持:实测返回 400见图片与视频输入

思考模式

证据:已实测(线上测试账号,2026-10-19),qwen3.8-max(开启)与 qwen3.7-plus(关闭)。

何时用:推理、代码、数学等需要多步思考的任务开启;简单对话关闭,省延迟和 token。enable_thinking 不是 OpenAI 标准字段,Python SDK 放进 extra_body,原生 HTTP 放请求体顶层。

请求

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

# 开启思考
resp = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[{"role": "user", "content": "9.11 和 9.9 哪个大?一句话回答。"}],
    max_tokens=1500,
    extra_body={"enable_thinking": True},
)
msg = resp.choices[0].message
print(getattr(msg, "reasoning_content", None))  # 思考过程
print(msg.content)                              # 最终回答

# 关闭思考
resp = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[{"role": "user", "content": "用一句话解释量子纠缠"}],
    max_tokens=300,
    extra_body={"enable_thinking": False},
)

响应(开启思考,qwen3.8-max):思考过程在 reasoning_content,回答在 content,思考 token 在 usage.completion_tokens_details.reasoning_tokens。

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.8-max",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "9.9 更大。",
        "refusal": null,
        "reasoning_content": "We need answer user's simple Chinese question: \"9.11 和 9.9 哪个大?一句话回答。\" Need answer one sentence. Need be careful: numeric comparison 9.11 vs 9.9. 9.9 = 9.90, so 9.9 larger than 9.11. Need final one sentence in Chinese."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 78,
    "completion_tokens": 90,
    "total_tokens": 168,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 78
    },
    "completion_tokens_details": {
      "reasoning_tokens": 81,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0,
      "text_tokens": 90
    }
  }
}

响应(关闭思考,qwen3.7-plus):没有 reasoning_content,reasoning_tokens 为 0。

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.7-plus",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "量子纠缠是指两个或多个粒子形成一种特殊的关联状态,使得无论它们相距多远,对其中一个粒子的测量会瞬间决定另一个粒子的状态。",
        "refusal": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 17,
    "completion_tokens": 31,
    "total_tokens": 48,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 17
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

注意事项

  • thinking_budget(依官方文档,未实测):整数,思考部分最多使用的 token 数,达到后模型直接输出回答;官方支持 Qwen3.8 / 3.7 / 3.6 / 3.5 / Qwen3-VL,默认是模型的最大思维链长度;放 extra_body。
  • reasoning_effort(依官方文档,未实测):官方只明确列出 qwen3.8 系列,取值 xhigh(默认)、medium、low,none 关闭思考;不能与 thinking_budget 同时设置。qwen3.7-max、qwen3.7-plus、qwen3-vl-plus 官方未列出此参数,请不要依赖。
  • preserve_thinking(依官方文档,未实测):布尔,默认 false;为 true 时把历史 assistant 消息里的 reasoning_content 一并作为输入,官方要求必须原样回传,历史思考会计入输入 token 并计费。平台会把历史里的 reasoning_content 转发给上游,客户端需要自己把上一轮返回的思考内容放回历史。
  • 采样:temperature 范围 [0, 2),默认值因模型与是否思考而异,官方建议 temperature 与 top_p 只设一个;top_k 官方默认 20,非 OpenAI 字段,放 extra_body;平台不做范围校验,超范围的值原样交给上游。
  • max_completion_tokens 是总输出上限,含思考与回答,思考模型推荐用它;qwen3-vl-plus 官方未列入支持范围,请用 max_tokens;两者都传时平台只转发 max_completion_tokens。

流式输出

证据:依官方文档(未实测);流式管线与 DeepSeek、GLM 页的实测响应一致。

何时用:边生成边显示,思考模型尤其推荐(思考耗时长,非流式容易超时)。传 stream: true;思考在 delta.reasoning_content,回答在 delta.content。

请求

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

stream = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[{"role": "user", "content": "数到五,用逗号分隔。"}],
    max_tokens=1000,
    stream=True,
    extra_body={"enable_thinking": True},
)
reasoning, content = "", ""
for chunk in stream:
    if not chunk.choices:
        continue
    d = chunk.choices[0].delta
    if getattr(d, "reasoning_content", None):
        reasoning += d.reasoning_content
    elif d.content:
        content += d.content
print(content)

响应:SSE 数据块的结构与其他模型相同(见 DeepSeek 页的流式响应),最后会带 usage。

注意事项

  • 流式请求没传 stream_options 时,网关自动加 include_usage。
  • 官方提示:思考模式耗时长,长提示词请开启流式或把客户端超时设到 180 秒以上。

工具调用

证据:已实测(线上测试账号,2026-10-19),qwen3.7-plus,只测了第一轮(模型返回工具调用);回传工具结果的第二轮依官方文档(未实测)。

何时用:让模型决定调用你定义的函数;parallel_tool_calls: true 时一次返回多个独立的调用。模型本身不执行函数:由你的代码执行后,把结果以 role: "tool" 消息(带对应 tool_call_id)放回历史再请求。

第一轮请求

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get weather of a location, the user should supply a location first.",
        "parameters": {
            "type": "object",
            "properties": {"location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"}},
            "required": ["location"],
        },
    },
}]
messages = [{"role": "user", "content": "查询北京和上海现在的天气。"}]
resp = client.chat.completions.create(
    model="qwen3.7-plus", messages=messages, tools=tools,
    parallel_tool_calls=True, max_tokens=500,
    extra_body={"enable_thinking": False},
)
msg = resp.choices[0].message
messages.append(msg)  # 把带 tool_calls 的 assistant 消息放回历史

第一轮响应:同时返回两个 tool_calls(北京、上海)。

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.7-plus",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "我来为您查询北京和上海的天气。\n\n",
        "refusal": null,
        "tool_calls": [
          {
            "id": "call_xxxx",
            "type": "function",
            "function": {
              "name": "get_weather",
              "arguments": "{\"location\": \"北京\"}"
            }
          },
          {
            "id": "call_xxxx",
            "type": "function",
            "function": {
              "name": "get_weather",
              "arguments": "{\"location\": \"上海\"}"
            },
            "index": 1
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 300,
    "completion_tokens": 60,
    "total_tokens": 360,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 300
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

第二轮(依官方文档,未实测):对每个 tool_calls 各追加一条 role: "tool" 消息,tool_call_id 一一对应,再请求一次;官方提示总结工具结果时去掉 tool_choice,否则会再次返回工具调用。

for call in msg.tool_calls:
    messages.append({"role": "tool", "tool_call_id": call.id, "content": "晴,26℃"})
resp = client.chat.completions.create(
    model="qwen3.7-plus", messages=messages, tools=tools, max_tokens=500,
    extra_body={"enable_thinking": False},
)
print(resp.choices[0].message.content)

注意事项

  • tool_choice:官方默认 auto;none 禁用工具;required 官方说明 Qwen 模型不支持;指定具体函数在思考模式下不支持,需要强制调用某个工具时先 enable_thinking: false。
  • parallel_tool_calls 官方默认 false,设为 true 才并行调用;只适合互相独立的任务,有依赖的调用要串行循环。
  • tool_stream(依官方文档,未实测):布尔,默认 false,仅与 stream: true 配合,让工具参数增量流出;官方只列了部分 qwen3.8 / 3.7 档位,放 extra_body。
  • n 设置 tools 时必须为 1。
  • Anthropic 格式 tool_choice: {"type": "none"} 转成 tool_choice: "none";disable_parallel_tool_use: true 转成 parallel_tool_calls: false。

JSON 输出

证据:已实测(线上测试账号,2026-10-19),qwen3.7-max,关闭思考。

何时用:需要稳定的 JSON,例如信息抽取。设置 response_format: {"type": "json_object"};提示词里必须明确出现 JSON 字样,否则请求报错(官方)。

请求

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

resp = client.chat.completions.create(
    model="qwen3.7-max",
    messages=[
        {"role": "system", "content": "提取姓名和年龄,以 JSON 输出,格式:{\"name\": \"...\", \"age\": 0}"},
        {"role": "user", "content": "大家好,我叫张三,今年 20 岁。"},
    ],
    response_format={"type": "json_object"},
    extra_body={"enable_thinking": False},
)
print(json.loads(resp.choices[0].message.content))

响应

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.7-max",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"name\": \"张三\", \"age\": 20}",
        "refusal": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 54,
    "completion_tokens": 13,
    "total_tokens": 67,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

注意事项

  • 官方提示:不要给结构化输出设 max_tokens,可能把 JSON 截断;字段名与类型在多次调用间可能变化,下游使用前要校验。
  • 思考模式下 json_object 可能不返回严格 JSON,建议关闭思考。

JSON Schema

证据:已实测(线上测试账号,2026-10-19),qwen3.7-max,关闭思考。

何时用:需要精确控制字段、类型的自动化解析。response_format 用 json_schema,建议 strict: true 且 additionalProperties: false;提示词里不需要出现 JSON 字样。官方只对 Qwen3.7-Plus、Qwen3.7-Max、Qwen3.8-Max 等部分系列开放,qwen3-vl-plus 不在名单内。

请求

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

resp = client.chat.completions.create(
    model="qwen3.7-max",
    messages=[{"role": "user", "content": "大家好,我叫张三,今年 20 岁。"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "user_info",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {"name": {"type": "string"}, "age": {"type": "integer"}},
                "required": ["name", "age"],
                "additionalProperties": False,
            },
        },
    },
    extra_body={"enable_thinking": False},
)
print(resp.choices[0].message.content)

响应(这次返回的键顺序是 age、name,与上面 json_object 那次不同,说明约束确实由 Schema 驱动)

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.7-max",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"age\": 20, \"name\": \"张三\"}",
        "refusal": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 26,
    "completion_tokens": 14,
    "total_tokens": 40,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

注意事项

  • 严格模式下 multipleOf、uniqueItems、contains、patternProperties、propertyNames 等关键字会返回 400(官方)。
  • 图片、视频、音频输入不支持 json_schema,会退回 json_object,Schema 不被强制(官方)。

证据:已实测(线上测试账号,2026-10-19),qwen3.7-max,只测了最基础的 enable_search: true;其余选项依官方文档(未实测)。

何时用:问题依赖实时信息(天气、新闻、行情)。enable_search 是非 OpenAI 字段,Python SDK 放 extra_body;开启后模型自己判断是否需要搜索。

请求

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

resp = client.chat.completions.create(
    model="qwen3.7-max",
    messages=[{"role": "user", "content": "今天杭州的天气怎么样?一句话。"}],
    max_tokens=500,
    extra_body={"enable_search": True, "enable_thinking": False},
)
print(resp.choices[0].message.content)

响应:注意 prompt_tokens 是 4270,而问题本身只有十几个 token:搜索到的网页内容会作为输入注入提示词,并按输入 token 计费。

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3.7-max",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "今天杭州多云,气温23~31℃。",
        "refusal": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 4270,
    "completion_tokens": 12,
    "total_tokens": 4282,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

注意事项

  • 开启搜索会显著增加输入 token,成本要自己评估。
  • 依官方文档(未实测)的其他选项:search_options.forced_search(每次都搜索)、search_strategy(turbo 默认 / max / agent / agent_max,agent 类每次调用额外收费)、enable_search_extension(天气、股票等垂域)、freshness、assigned_site_list 等。这些字段平台都会原样转发,是否生效以上游为准。
  • 官方说明 OpenAI 兼容的 Chat Completions 不返回搜索来源和角标(enable_source / enable_citation 只有 DashScope 原生接口支持)。
  • 官方提示 Qwen3.8 的多模态接口不支持 agent 策略;搜索时思考模型也可以开启 enable_search。

图片与视频输入

证据:已实测(线上测试账号,2026-10-19),qwen3-vl-plus(单图)与 qwen3.7-max(确认不支持);qwen3.8-max、qwen3.7-plus 以及多图、视频、OCR、定位等依官方文档(未实测)。

何时用:看图问答、描述、OCR、图表分析、截图转代码、多图对比、视频理解。图片放在 content 数组里,image_url.url 可以是公网 URL 或 Base64 Data URL。能力标签含 vision 的模型才能传图:qwen3.8-max、qwen3.7-plus、qwen3-vl-plus。

单图请求(qwen3-vl-plus,一张纯红色 64x64 PNG)

import base64
from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

b64 = base64.b64encode(open("red.png", "rb").read()).decode()
resp = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
        {"type": "text", "text": "这张图是什么颜色?一句话。"},
    ]}],
    max_tokens=200,
)
print(resp.choices[0].message.content)

响应:usage.prompt_tokens_details.image_tokens 是图片占用的 token。qwen3-vl-plus 在这次请求里没有开启思考(官方默认关闭),所以 reasoning_content 为空字符串。

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "created": 1760000000,
  "model": "qwen3-vl-plus",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "这张图是纯红色。",
        "refusal": null,
        "reasoning_content": ""
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 81,
    "completion_tokens": 7,
    "total_tokens": 88,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 15,
      "image_tokens": 66
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0,
      "text_tokens": 7
    }
  }
}

不支持的情况:qwen3.7-max 没有 vision 标签,传图片实测返回 400:

{
  "error": {
    "code": "api_error",
    "message": "The request could not be completed. (",
    "type": "api_error"
  }
}

其他视觉场景(依官方文档,未实测)

  • 多图:在 content 里放多个 image_url 块。qwen3.8-max、qwen3.7-plus 官方最多 2048 张,qwen3-vl-plus 最多 256 张,所有图片与文本的 token 总和须小于模型的最大输入。
  • 视频文件:用 video_url 块;图片序列当视频用 video 块(图片 URL 数组)。fps 控制抽帧,官方范围 0.1 到 10、默认 2.0,字段的放置方式以官方文档为准。视频文件时长官方限制:Qwen3.8 / 3.7 系列 2 秒到 2 小时,qwen3-vl-plus 2 秒到 1 小时。平台没有验证过视频的传入方式与大小,请先用短样例验证。
  • OCR、信息抽取、解题、截图转代码、目标定位、文档解析:都是在图片输入基础上改提示词,不需要额外参数;官方提示通用对话尽量不要用 system 消息,把指令放在用户消息里。
resp = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[{"role": "user", "content": [
        {"type": "video_url", "video_url": {"url": "https://example.com/demo.mp4"}},
        {"type": "text", "text": "概括这段视频,并给出关键事件的时间点。"},
    ]}],
    max_tokens=1000,
    extra_body={"enable_thinking": False},
)

注意事项

  • 图片限制(官方):宽高均大于 10 像素,长短边比不超过 200:1;4K 以下支持 BMP、JPEG、PNG、TIFF、WEBP、HEIC,4K 到 8K 仅 JPEG、PNG;单张不超过 20 MB。
  • 平台与上游网关另有请求体大小上限,大图、长视频请先小规模实测。
  • qwen3-vl-plus 官方默认关闭思考,qwen3.8-max、qwen3.7-plus 默认开启;需要确定行为请显式传 enable_thinking。

上下文缓存

证据:已实测(线上测试账号,2026-10-19),qwen3.7-max:隐式缓存命中已实测;显式缓存依赖尚未发布的更新,线上目前实测不生效。

何时用:同一份长文档、长系统提示反复提问,或多轮对话。

隐式缓存(自动):不可关闭,没有请求参数,命中不保证;官方最少约 1024 token,命中通常按输入价的约 20% 计费(因模型而异);把重复内容放提示词开头、变化的内容放末尾。命中数在 usage.prompt_tokens_details.cached_tokens。

请求:同一份约 3,300 token 的系统提示,先后问不同的问题。

from openai import OpenAI

client = OpenAI(base_url="https://api.modelsite.ai/v1", api_key="sk-ms-xxxxxxxx")

KNOWLEDGE = "……一份很长的制度文档(几千 token)……"

for q in ["退货期限是几天?一句话", "退款几个工作日到账?一句话"]:
    resp = client.chat.completions.create(
        model="qwen3.7-max",
        messages=[
            {"role": "system", "content": "你是客服助手,根据下面的制度回答。\n" + KNOWLEDGE},
            {"role": "user", "content": q},
        ],
        max_tokens=60,
        extra_body={"enable_thinking": False},
    )
    print(resp.choices[0].message.content, resp.usage.prompt_tokens_details.cached_tokens)

响应(只摘出 usage):3316 个输入 token 里 2304 个命中缓存。

{
  "usage": {
    "prompt_tokens": 3316,
    "completion_tokens": 8,
    "total_tokens": 3324,
    "prompt_tokens_details": {
      "cached_tokens": 2304
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

这次实测的请求里给系统消息的内容块带了 cache_control 标记,但 usage 里没有 cache_creation_input_tokens,命中来自隐式缓存,说明标记没有触发显式缓存。

显式缓存(cache_control: {"type": "ephemeral"},依赖尚未发布的更新):官方规则是在 messages 的 content 块上加标记,只支持 ephemeral、有效期 5 分钟、每个请求最多 4 个标记、缓存块至少 1024 token、标记只能放在 content 里;创建缓存按输入价 125% 计费,命中通常 10%;用量在 cache_creation_input_tokens 与 cached_tokens。线上目前会去掉请求里的这类标记,显式缓存不生效,待更新发布后才会转发。显式缓存与隐式缓存互斥,单个请求只能用一种。

Anthropic 格式

证据:依官方文档(未实测);同一条管线在 DeepSeek 与 MiniMax 上做过实测,Qwen 上未单独实测。

何时用:客户端只能说 /v1/messages。调用方式与鉴权见 Messages 页(SDK 用 auth_token,不是 api_key)。

请求

from anthropic import Anthropic

client = Anthropic(base_url="https://api.modelsite.ai", auth_token="sk-ms-xxxxxxxx")

resp = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1500,
    messages=[{"role": "user", "content": "用一句话解释量子纠缠"}],
    extra_body={"enable_thinking": True},
)
for block in resp.content:
    if block.type == "thinking":
        print("思考:", block.thinking)
    elif block.type == "text":
        print("回答:", block.text)

注意事项

  • 用顶层 enable_thinking / thinking_budget 控制思考,不要用 Anthropic 的 thinking 字段(见页首提示)。
  • top_k 在 Anthropic 格式下可直接用标准的顶层字段;stop_sequences 对应 stop;metadata.user_id 对应 user。

参数速查

参数说明
enable_thinking、thinking_budget、preserve_thinkingQwen 专属,放 extra_body,平台原样转发
reasoning_effort官方只明确列出 qwen3.8 系列,不能与 thinking_budget 同时设置
thinking平台原样转发,不换算;adaptive 不转发;qwen3.7-plus 上游只认 enabled / disabled / auto
top_k、repetition_penalty、seed非 OpenAI 字段,放 extra_body;top_k 官方默认 20
max_completion_tokens / max_tokens前者含思考;qwen3-vl-plus 用 max_tokens;两个都传只转发 max_completion_tokens
tool_choiceauto / none / 指定函数(非思考);required 不支持
parallel_tool_calls、tool_stream官方默认 false,放 extra_body(tool_stream)
n1 到 4,设置 tools 时必须为 1
response_formattext / json_object / json_schema(部分模型)
enable_search、search_options联网搜索,放 extra_body
vl_high_resolution_images、fps视觉相关;字段形态以官方文档为准,上游是否生效未验证
cache_control显式缓存标记,线上目前被去掉,见上下文缓存
未知顶层字段、extra_body 里的键原样平铺转发
developer 角色转为 system

其他:reasoning 对象(OpenRouter 风格)由平台自己处理,转换后的字段对 Qwen 未必生效,要开关思考请用 enable_thinking;reasoning.exclude: true 或 include_reasoning: false 会在响应里去掉思考内容,思考 token 仍计费。

官方文档

本页内容