使用 Qwen 文本模型的 enable_thinking
本页说明 Qwen 文本模型请求形态中常见的 enable_thinking、thinking_budget 和 preserve_thinking 参数。可用模型、模型 ID 和参数支持范围可能变化,请以 GenStudio 模型广场和目标模型实测结果为准。
如果目标模型没有明确声明支持这些参数,请优先使用对应模型系列的原生推理参数,或先用最小请求验证后再写入业务代码。
判断是否适用 Qwen 兼容参数
Qwen 兼容文本请求通常使用与 messages 同级的 enable_thinking,不是 thinking.type。enable_thinking 接受布尔值。接入前先确认三件事:
- 目标模型是否明确支持 Qwen 兼容推理参数。
- 目标模型是否允许关闭思考;强制思考模型不应把关闭思考作为常规业务路径。
- 目标模型是否支持
thinking_budget或preserve_thinking,以及这些参数是否只适用于特定响应模式。
模型能力会随版本变化。对精确模型 ID 的控制参数,以上线前实测结果为准。
设置当前请求的 enable_thinking
开启推理时传 enable_thinking: true。如果目标模型支持限制思考长度,可以同时传 thinking_budget。以下 Python 示例使用 OpenAI SDK,并以 qwen3.6-27b 演示。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["API_KEY"],
base_url="https://cloud.infini-ai.com/maas/v1",
)
response = client.chat.completions.create(
model="qwen3.6-27b",
messages=[{"role": "user", "content": "What is 2 + 2? Give only the final answer."}],
max_tokens=256,
extra_body={
"enable_thinking": True,
"thinking_budget": 50,
},
)关闭推理时只传:
extra_body = {"enable_thinking": False}thinking_budget 先用于确认请求能否正常返回,并观察 token 用量。不要仅凭一次请求就判断它能稳定改善质量。
用 curl 验证 enable_thinking 请求体
先用 curl 请求确认与 messages 同级的 enable_thinking 是否被接受,并观察响应中是否出现 reasoning_content 或流式响应中的 delta.reasoning_content。运行前先在当前终端设置 API_KEY 环境变量。以下 curl 命令适用于 bash/zsh 等 POSIX 风格 Shell(macOS/Linux、WSL、Git Bash)。如果使用 Windows PowerShell 或 CMD,请按对应 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.6-27b",
"messages": [
{
"role": "user",
"content": "What is 2 + 2? Give only the final answer."
}
],
"max_tokens": 256,
"enable_thinking": true,
"stream": true
}'如果目标模型不接受 thinking_budget,先移除该字段,只验证 enable_thinking。如果目标模型不接受 enable_thinking,请改用该模型系列的原生推理参数。
在视觉请求中使用 Qwen 推理参数
如果目标 Qwen 模型同时支持图像输入,enable_thinking、thinking_budget 等参数仍放在与 messages 同级的位置。图像和文本放在同一条用户消息的 content 数组中,image_url.url 使用带前缀的 Base64 数据。
completion = client.chat.completions.create(
model="qwen3.6-27b",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{base64_image}",
},
},
{"type": "text", "text": "Answer briefly: what is shown?"},
],
}
],
max_tokens=1536,
stream=True,
extra_body={
"enable_thinking": True,
"thinking_budget": 50,
},
)如果目标模型支持更高分辨率图像输入,可以在实测通过后增加 vl_high_resolution_images: True。视觉请求建议优先使用流式响应,并从 delta.reasoning_content 观察是否返回可见推理内容。
读取响应中的推理内容
Qwen 兼容模型返回可见推理内容时,通常使用 reasoning_content。该字段可能缺失,尤其是关闭推理、模型默认不返回可见推理,或当前响应模式不返回可见推理时。
message = response.choices[0].message
reasoning = getattr(message, "reasoning_content", None)
if reasoning:
print(reasoning)
print(message.content)流式响应中通常从 delta.reasoning_content 拼接推理内容。
选择响应模式
按目标模型选择响应模式。不同 Qwen 兼容模型的可见推理字段并不一致:
- 有些模型只在流式响应中返回可见推理内容。
- 有些模型在非流式和流式响应中都返回可见推理内容。
- 有些模型接受推理参数,但不会返回可见推理内容。
没有返回 reasoning_content 不一定表示请求没有启用思考,只表示该模型或响应模式没有返回可见推理字段。如果业务需要展示、记录或回传推理内容,优先验证流式响应,并从 delta.reasoning_content 拼接推理内容。非流式响应更适合只需要最终回答的场景,除非目标模型已确认会在非流式响应中返回可见推理内容。
仅在支持时回传历史推理内容
只有目标模型明确支持 preserved thinking,并且业务需要工具调用或 agent 历史连续性时,才启用 preserve_thinking。
如果使用 preserved thinking,应保留模型原始返回的 reasoning_content。HTTP 请求被接受只表示请求形态可用,不等于一定证明模型使用了历史推理内容。接入前应分别验证「带历史 reasoning_content 且 preserve_thinking: true」、「不带历史 reasoning_content 且 preserve_thinking: true」以及「省略 preserve_thinking」三种请求。
如果当前可用模型列表中没有明确支持该能力的目标模型,应先只记录应用侧审计数据,不要把该字段作为必需历史协议。
排查 enable_thinking 和 thinking_budget
排查时按请求形态逐步缩小范围。
- 确认目标模型明确支持 Qwen 兼容推理参数。
- 对强制思考模型,不要用关闭思考作为健康检查。
- 如果传入
thinking_budget后返回 400,先移除该字段,只验证enable_thinking。 - 如果视觉请求返回图片格式错误,确认
image_url.url使用带 MIME 前缀的 Base64 数据;不要把远程 URL 当成通用输入格式。 - 如果视觉请求返回图片宽高限制错误,请换用正常尺寸的测试图,不要用 1x1 像素图片作为健康检查。
- 如果传入
vl_high_resolution_images后返回 400,先移除该字段,只验证基础图像输入和enable_thinking。 - 如果响应没有
reasoning_content,检查enable_thinking是否实际开启,并确认当前响应模式是否返回可见推理内容。
需要手工确认请求时,构造和业务代码相同的 curl 请求,再对照服务端返回字段。