Skip to content

为 Chat Completions 请求选择推理参数

GenStudio 的 Chat Completions 接口兼容 OpenAI 请求形态,但推理参数不是一个统一字段。接入前先确认模型系列,再决定当前请求的控制参数、响应解析字段和多轮历史回传方式。

如果只需要快速判断参数,请先看本页速查。需要完整代码和工具调用历史处理时,再进入对应模型系列页面。

按模型系列确定参数来源

先用模型系列决定参数来源。生产代码优先使用模型系列自己的参数;只有在目标模型验证过效果后,再把平台通用开关写入业务请求。

按模型系列选择原生参数

同一个请求字段不能套用到所有模型。选错字段时,模型可能忽略参数、返回 400,或返回没有推理字段的正常回答。

本组文档的模型系列页面优先使用模型提供方原生参数。平台通用 enable_thinking 只作为兼容选项,见通用开关使用范围

  • GLM:当前请求使用 thinking.type,响应读取 reasoning_content,历史保留使用 thinking.clear_thinking。查看使用 GLM 的 thinking 参数
  • Kimi:当前请求使用 thinking.type,响应读取 reasoning_content,历史保留使用 thinking.keep。查看使用 Kimi 的 thinking 参数
  • MiniMax:reasoning_split 只控制返回形态;推理内容可能在 reasoning_details,也可能在 content<think> 中;历史回传优先保留完整 assistant 消息。查看使用 MiniMax 的 reasoning_split
  • DeepSeek:当前请求使用 thinking.typereasoning_effort,响应读取 reasoning_content;工具调用历史中需要回传推理字段。查看使用 DeepSeek 的 thinking 参数
  • Qwen 文本模型:当前请求使用 enable_thinking,部分模型支持 thinking_budget;响应读取 reasoning_content,部分模型支持 preserve_thinking。查看使用 Qwen 文本模型的 enable_thinking
  • Qwen-VL:多模态请求中使用 enable_thinking,响应读取 reasoning_content;历史保留规则以 Qwen-VL 页面为准。查看使用 Qwen-VL 的 enable_thinking
  • MiMo:当前请求使用 thinking.type,响应读取 reasoning_content;工具调用历史中需要回传推理字段。查看使用 MiMo 的 thinking.type

检查默认思考是否符合预期

先用默认行为判断是否必须显式传参。生产代码需要稳定行为时,仍应设置对应模型系列的推理参数。

  • GLM:glm-5.1glm-5glm-4.7 默认开启思考;glm-4.6 是混合或自动思考行为。
  • Kimi:kimi-k2-thinking 强制思考;kimi-k2.6kimi-k2.5 默认开启,可显式关闭。
  • Qwen 开放混合模型:qwen3-8bqwen3-14bqwen3-32bqwen3-30b-a3b 默认可见推理只在流式响应中返回。
  • Qwen qwen3-235b-a22b:默认在非流式和流式响应中都返回可见推理内容。
  • Qwen instruct、coder、next instruct 模型:qwen3-235b-a22b-instruct-2507qwen3-coder-480b-a35b-instructqwen3-next-80b-a3b-instruct 接受推理参数,但默认不返回可见推理内容。
  • Qwen thinking 后缀模型:qwen3-next-80b-a3b-thinking 默认返回可见推理内容。
  • Qwen-VL:qwen3-vl-235b-a22b-instruct 默认不返回可见推理;qwen3-vl-235b-a22b-thinking 默认返回可见推理内容。
  • DeepSeek、MiMo、MiniMax:按目标模型验证默认行为;接入时优先显式设置该模型系列的原生参数。

提醒:没有返回 reasoning_contentreasoning_details<think>,只表示这次响应没有可见推理内容,不一定表示模型没有内部推理。

只在验证后使用通用 enable_thinking

部分模型接受 enable_thinking 参数。它接受布尔值,但不是所有模型系列的统一协议。

使用时按下面的范围处理:

  • Qwen 文本模型和 Qwen-VL 本来就使用 enable_thinking,按对应模型系列页面接入。
  • GLM、Kimi、DeepSeek、MiMo、MiniMax 等模型系列优先使用各自页面中的原生参数。
  • 如果要在非 Qwen 模型上使用 enable_thinking,先对目标模型发送一次等价请求,确认它能改变可见推理内容后再写入业务代码。

接入请求、响应和历史消息

选定参数后,还需要同时处理响应字段和历史消息。当前请求开关只影响这一次生成;多轮对话和工具调用还取决于 assistant 消息中的推理字段是否按原样回传。

设置当前请求的推理开关

当前请求的控制参数只影响这一次模型生成。它不自动修复历史消息,也不等同于历史推理内容保留策略。

  • GLM、Kimi、MiMo、DeepSeek 使用 thinking.type
language-python
extra_body = {"thinking": {"type": "enabled"}}
  • Qwen 文本模型和 Qwen-VL 使用 enable_thinking 参数:
language-python
extra_body = {"enable_thinking": True}
  • MiniMax 的 reasoning_split 主要控制推理内容返回在哪里,不是通用开关:
language-python
extra_body = {"reasoning_split": True}

如果某个模型是强制思考模型,不要把关闭思考作为正常路径写入业务逻辑。强制思考模型即使接受请求,也可能忽略关闭参数或返回与可切换模型不同的结果。

读取响应中的推理内容

应用侧应按模型系列读取推理字段,并允许字段缺失。很多 OpenAI SDK 类型不会静态声明 provider 扩展字段,Python 代码应使用动态访问方式。

language-python
message = response.choices[0].message

reasoning = getattr(message, "reasoning_content", None)
reasoning_details = getattr(message, "reasoning_details", None)
content = message.content or ""

if reasoning:
    print(reasoning)
elif reasoning_details:
    print(reasoning_details)
elif "<think>" in content:
    print(content)

流式响应中也按同样的字段名读取 delta。如果 choices 为空,或某个 chunk 只携带 usage 信息,应跳过该 chunk。

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="")

回传历史中的推理内容

只有当前请求参数还不够。多轮对话,尤其是工具调用,会把上一轮 assistant 消息放回 messages[]。如果上一轮 assistant 消息带有推理字段,回传策略会影响请求是否被接受和模型是否能延续上下文。

  • 普通多轮对话没有工具调用时,通常只需要回传面向用户的 assistant content。不要伪造没有返回过的推理字段。
  • assistant 同时返回 tool_callsreasoning_content 时,回传 assistant 消息时保留原始 reasoning_content,再追加 tool 消息。
  • GLM preserved thinking 需要在请求体中使用 thinking.clear_thinking: false,并原样回传已经存在的 reasoning_content
  • Kimi preserved thinking 需要在请求体中使用 thinking.keep,并原样回传已经存在的 reasoning_content
  • MiniMax 工具调用需要回传完整 assistant 消息,因为推理内容可能在 reasoning_detailscontent 中。
  • Qwen preserve_thinking 只在目标模型明确支持且经过验证时启用。

回传历史时不要重新排序、改写或补写推理内容。如果某一轮关闭了思考,assistant 消息没有 reasoning_content,保留它的缺失状态即可。

没有推理内容时检查请求和响应模式

请求返回 200 但没有推理内容时,先检查请求和模型行为,再判断是否是错误。

  • 确认模型是否默认关闭推理,是否需要显式设置 thinking.typeenable_thinking
  • 确认模型是否是强制思考模型。强制思考模型通常不需要显式开启。
  • 确认当前响应模式。流式响应需要从 delta 中拼接推理内容。
  • 检查 MiniMax 是否使用了 reasoning_split。未开启 split 时,推理可能在 content<think> 片段中。
  • 检查 Qwen-VL 是否使用了视觉请求形态,并以视觉模型验证结果为准。
  • 如果请求返回 400,先移除不属于该模型系列的推理参数,再按对应系列页面重新构造请求。

查看完整请求样例和回传规则

确定模型系列后,进入对应页面查看完整请求样例和历史回传规则。