本文区分三种协议:NiceRouter 的 OpenAI 兼容 Chat Completions、OpenAI 官方 Responses API、Anthropic 官方 Messages API。字段名和语义不同,不能混用。
重要:模型内部进行推理,不代表 API 会返回原始思维链。 应只使用协议明确提供的思考摘要或思考块,并始终把最终答案作为业务主输出。
请求地址:POST /v1/chat/completions。
NiceRouter 的兼容响应中:
choices[0].message.content,流式为 choices[0].delta.content。choices[0].message.reasoning_content,流式通常为 choices[0].delta.reasoning_content。reasoning_content 是 NiceRouter/上游兼容扩展,不是 OpenAI 官方 Chat Completions 的标准字段。客户端必须允许其缺失、为空或分多个流式片段返回。{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "(渠道返回的思考信息)",
"content": "这是最终答案。"
},
"finish_reason": "stop"
}
]
}
message = response["choices"][0]["message"]
answer = message.get("content", "")
reasoning = message.get("reasoning_content") # 可选,可能为 None
data: {"choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"(思考片段)","content":""}}]}
data: {"choices":[{"index":0,"delta":{"content":"这是最终答案。"}}]}
data: [DONE]
处理流式响应时,应分别累积 delta.reasoning_content 与 delta.content;收到 [DONE] 后结束。不要依赖思考字段判断响应是否完成。
部分 Gemini 兼容适配可能使用 reasoning,部分逆向或旧适配可能把内容以 <think>...</think> 混在文本中。这些都不是 OpenAI 或 Anthropic 官方字段,只能按当前渠道实测兼容。
OpenAI 官方推理模型优先使用 POST /v1/responses。推理配置放在 reasoning 对象中:
{
"model": "gpt-5.4",
"input": "比较两个方案并给出结论",
"reasoning": {
"effort": "medium",
"summary": "auto",
"context": "auto",
"mode": "standard"
}
}
OpenAI 官方确实提供顶层 reasoning 对象,但它属于 Responses API,并不是旧版 /v1/completions 的参数。当前官方 SDK 类型仅标注适用于 GPT-5 与 o-series 推理模型。
reasoning.effort:控制推理投入。当前类型为 none、minimal、low、medium、high、xhigh、max;并非每个模型支持全部值。reasoning.summary:请求可公开的推理摘要,可用 auto、concise、detailed;这不是原始思维链。reasoning.context:控制后续轮次把哪些 reasoning items 重新呈现给模型,可用 auto、current_turn、all_turns;响应中为实际生效模式。reasoning.mode:控制推理执行模式,官方已知值为 standard、pro;实际支持依模型,响应中为实际生效模式。reasoning.generate_summary:已弃用,仅为兼容旧客户端;应改用 reasoning.summary。output 中 type: "reasoning" 的项目可包含 summary;摘要项为 {"type":"summary_text","text":"..."}。encrypted_content 是供无状态、多轮上下文延续使用的加密推理内容,不是展示给用户的可读思考文本。type: "message" 项的 output_text 中;不要把 reasoning item 当作最终答案。官方 Responses 结构示意:
{
"output": [
{
"type": "reasoning",
"summary": [
{"type": "summary_text", "text": "推理摘要"}
]
},
{
"type": "message",
"content": [
{"type": "output_text", "text": "最终答案"}
]
}
]
}
Chat Completions 中可见 usage.completion_tokens_details.reasoning_tokens,它是用量统计,不是可展示的思考内容。
Anthropic 官方使用 POST /v1/messages。扩展思考通过顶层 thinking 配置。支持方式取决于具体 Claude 模型:
{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"thinking": {
"type": "adaptive"
},
"messages": [
{"role": "user", "content": "比较两个方案并给出结论"}
]
}
{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"thinking": {
"type": "enabled",
"budget_tokens": 2048
},
"messages": [
{"role": "user", "content": "比较两个方案并给出结论"}
]
}
固定预算模式下,budget_tokens 至少为 1024,且必须小于 max_tokens。官方新类型还提供 display: "summarized" | "omitted";是否可用以具体模型和渠道为准。
Anthropic 响应的 content 是有序内容块数组:
{
"content": [
{
"type": "thinking",
"thinking": "(返回的思考内容或摘要)",
"signature": "..."
},
{
"type": "text",
"text": "最终答案"
}
]
}
type: "thinking" 块包含 thinking 和 signature。type: "redacted_thinking" 与加密 data;客户端应原样保留用于后续上下文,不要尝试解密或展示。type: "text" 块。thinking_delta,文本增量类型是 text_delta。| 模型 ID | 官方规范状态 | NiceRouter 兼容接口的处理方式 |
|---|---|---|
gpt-5.4 | OpenAI 官方 SDK/规范列出的模型;官方推理控制使用 Responses API 的 reasoning 对象 | 调用 /v1/chat/completions 时,按 NiceRouter 实际响应读取可选 reasoning_content;不要假定等同官方 reasoning item |
gpt-5.5 | 当前已查到的 OpenAI 官方 SDK模型列表未列出该 ID | 仅在 NiceRouter 控制台或 /v1/models 确认存在时使用;参数和返回字段必须实测 |
claude-opus-4-7 | Anthropic 官方 SDK列出的模型;官方 Messages API 使用 thinking 和内容块 | NiceRouter /v1/messages 是否完整透传 thinking、signature、redacted_thinking 需实测;OpenAI 兼容接口可能映射为 reasoning_content |
/v1/models 中存在模型 ID,只证明当前渠道暴露了该 ID,不能证明它支持某个推理参数或返回某种思考字段。
API Key 只放环境变量,不要写进脚本、文档或仓库。对每个模型分别验证非流式和流式请求:
export NICEROUTER_API_KEY='你的 API Key'
export MODEL='gpt-5.4'
curl -sS https://api.nicerouter.com/v1/chat/completions \
-H "Authorization: Bearer $NICEROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d "{\"model\":\"$MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"计算 27×43,只给出最终结果。\"}],\"stream\":false}"
检查:
model。stream 改为 true 后,增量事件结构是否一致。