Skip to content

使用 MiniMax 的 reasoning_split

MiniMax 的接入重点是选择推理内容返回形态,以及在工具调用后保留完整 assistant 消息。reasoning_split 控制 MiniMax 推理内容返回在哪里。

选择返回 reasoning_details 还是 <think>

先决定应用侧如何展示或存储推理内容。不同返回形态会改变解析代码和历史回传方式。

  • 设置 reasoning_split: true 时,推理内容返回在 reasoning_details。这种方式适合把推理内容和最终回答分开处理。
  • 不启用 split 时,推理内容可能出现在 content 的原生 <think> 片段中。这样更适合只保存完整模型消息,或需要兼容原生输出的应用。

MiniMax M2.7 目前不提供关闭思考的参数。reasoning_split 只控制推理内容返回在 reasoning_details 还是 content 中。如果不向用户展示推理,请在展示层过滤。

如果后续要做工具调用历史回传,优先保留完整 assistant 消息,而不是只抽取最终回答。

开启 reasoning_split 读取 reasoning_details

开启 split 后,应用侧读取 reasoning_details,最终回答仍在 content。以下 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",
)

response = client.chat.completions.create(
    model="minimax-m2.7",
    messages=[{"role": "user", "content": "What is 17 * 23? Give only the final answer."}],
    max_tokens=256,
    extra_body={"reasoning_split": True},
)

message = response.choices[0].message
reasoning = getattr(message, "reasoning_details", None)
print(reasoning)
print(message.content)

如果 reasoning_details 为空,不要立即判定请求失败。先确认模型是否实际生成了推理内容,以及是否使用了 split 模式。

用 curl 验证 reasoning_split 请求体

先用 curl 确认请求体中已经传入 reasoning_split: true。运行前先在当前终端设置 API_KEY 环境变量。以下 curl 命令适用于 bash/zsh 等 POSIX 风格 Shell(macOS/Linux、WSL、Git Bash)。如果使用 Windows PowerShell 或 CMD,请按对应 Shell 的语法调整命令。

language-shell
curl --request POST \
  --url "https://cloud.infini-ai.com/maas/v1/chat/completions" \
  --header "Accept: application/json, text/event-stream" \
  --header "Authorization: Bearer $API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "model": "minimax-m2.7",
    "messages": [
      {
        "role": "user",
        "content": "What is 17 * 23? Give only the final answer."
      }
    ],
    "max_tokens": 256,
    "reasoning_split": true
  }'

保留 <think> 内容所在的完整 assistant 消息

未启用 split 时,MiniMax 可能把原生 <think> 内容放在 content 中。此时不要在历史消息里删除 <think> 片段后再回传,因为这会改变模型看到的历史。

language-python
assistant_message = response.choices[0].message.model_dump(exclude_none=True)
messages.append(assistant_message)

如果需要面向用户隐藏 <think>,应在展示层过滤;不要改写要继续传给模型的历史消息。

工具调用后回传完整 assistant 消息

工具调用流程中,MiniMax 的推理内容可能位于不同字段。为了避免丢字段,回传 assistant 消息时保留模型返回的完整结构。

language-python
assistant_message = response.choices[0].message.model_dump(exclude_none=True)
messages.append(assistant_message)
messages.append(
    {
        "role": "tool",
        "tool_call_id": assistant_message["tool_calls"][0]["id"],
        "content": '{"weather": "Sunny"}',
    }
)

如果应用框架要求把 SDK 对象转成 dict,请确保 contenttool_callsreasoning_details 等扩展字段没有被过滤。

按对象处理 reasoning_details

reasoning_details 的结构可能不是纯字符串。应用侧应先按对象或数组保存,再按展示需求格式化。

language-python
reasoning_details = getattr(response.choices[0].message, "reasoning_details", None)
if reasoning_details:
    print(reasoning_details)

MiniMax split 模式的主要读取目标是 reasoning_details