Skip to content

使用 Qwen-VL 的 enable_thinking

Qwen-VL 是视觉语言模型。它使用与 messages 同级的 enable_thinking,但请求内容应按多模态消息构造,不能直接复用 Qwen 文本模型样例。enable_thinking 接受布尔值。

用多模态消息构造视觉请求

只有请求包含图片、截图或视觉理解任务时,才按 Qwen-VL 推理规则处理。纯文本任务优先使用 Qwen 文本模型页面的请求形态。

Qwen-VL 请求中的 messages[].content 应是数组,包含 image_url 和文本指令。以下 Python 示例使用 OpenAI SDK。

language-python
IMAGE_URL = "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": IMAGE_URL}},
            {"type": "text", "text": "Describe the image in one short sentence."},
        ],
    }
]

如果请求只包含字符串 content,它不能覆盖视觉推理的主要接入路径。

为视觉请求选择默认或关闭思考

对 thinking 后缀的 Qwen-VL 模型,通常不需要显式开启思考。下面的完整 Python 请求示例使用 OpenAI SDK。

language-python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["API_KEY"],
    base_url="https://cloud.infini-ai.com/maas/v1",
)

stream = client.chat.completions.create(
    model="qwen3-vl-235b-a22b-thinking",
    messages=messages,
    max_tokens=1536,
    stream=True,
)

对混合思考 Qwen-VL 模型,只有在模型明确支持关闭时,才传 enable_thinking: false

language-python
extra_body = {"enable_thinking": False}

当前接入应优先使用 thinking 后缀模型完成强思考视觉任务。混合思考模型显式开启后是否返回可见推理内容,应按目标模型验证。

用 curl 验证多模态 enable_thinking 请求体

先用流式 curl 请求确认多模态消息数组和 enable_thinking 字段同时存在。运行前先在当前终端设置 API_KEY 环境变量。以下 curl 命令适用于 bash/zsh 等 POSIX 风格 Shell(macOS/Linux、WSL、Git Bash)。如果使用 Windows PowerShell 或 CMD,请按对应 Shell 的语法调整命令。

language-shell
curl -N --request POST \
  --url "https://cloud.infini-ai.com/maas/v1/chat/completions" \
  --header "Accept: text/event-stream" \
  --header "Authorization: Bearer $API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "model": "qwen3-vl-235b-a22b-thinking",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "image_url",
            "image_url": {
              "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
            }
          },
          {
            "type": "text",
            "text": "Answer briefly: what is shown?"
          }
        ]
      }
    ],
    "max_tokens": 1536,
    "enable_thinking": true,
    "stream": true
  }'

如果目标模型已经是 thinking 后缀模型,并且业务代码不需要显式保留开关字段,可以删除 enable_thinking,但应保留同样的多模态消息结构。

选择 instruct 或 thinking 后缀模型

模型 ID 决定是否能稳定返回可见推理内容。

  • qwen3-vl-235b-a22b-instruct 适合需要混合思考能力的视觉任务;流式请求可被接受但没有返回可见推理,非流式显式开启推理可能返回 400。
  • qwen3-vl-235b-a22b-thinking 适合需要视觉推理过程的请求;非流式和流式响应都返回可见推理内容。

qwen3-vl-235b-a22b-instruct 的非流式请求如果传入 enable_thinking: true,或传入 thinking_budget: 50,可能返回类似以下错误:

language-text
HTTP 400: InternalError.Algo.InvalidParameter:
The thinking_budget parameter must be a positive integer and not greater than 0

这是模型和响应模式组合限制。需要稳定可见推理时,优先选择 thinking 后缀模型。

用流式响应读取视觉推理

视觉推理可能生成较长推理内容。使用流式响应可以更早读取推理和最终回答。

language-python
for chunk in stream:
    if not chunk.choices:
        continue

    delta = chunk.choices[0].delta
    reasoning = getattr(delta, "reasoning_content", None)
    if reasoning:
        print(reasoning, end="")

    text = getattr(delta, "content", None)
    if text:
        print(text, end="")

如果只收到最终回答而没有推理字段,先确认模型是否为 thinking 后缀模型,再检查请求是否真的包含 image_url

没有 reasoning_content 时检查模型和请求形态

没有 reasoning_content 不一定是请求失败。按以下顺序检查:

  • 模型是否是混合思考模型。混合模型可能不返回可见推理内容。
  • 请求是否为多模态消息数组,而不是纯文本字符串。
  • 是否使用了流式响应,并从 delta.reasoning_content 拼接。
  • 是否需要改用 thinking 后缀模型来获得稳定可见推理。

如果请求返回 400,先移除显式 enable_thinking: true,再重试目标模型请求。

分别验证文本请求和视觉请求

Qwen 文本模型和 Qwen-VL 共享部分字段名,但请求内容和返回形态不同。

  • 文本模型的测试结果只代表文本请求。
  • 视觉请求应保留 image_url 加文本的消息形态,这样测试结果才能代表 Qwen-VL 接入。

需要同时支持文本和视觉时,分别维护 Qwen 文本模型和 Qwen-VL 的请求构造逻辑。