Appearance
Responses API Beta 支持通过 reasoning 参数启用模型的链式推理能力,effort 级别从 minimal 到 high 控制推理深度。启用后响应会包含 reasoning 类型的 item,含 encrypted_content(完整推理内容,加密存储)和 summary(推理摘要数组)。usage.output_tokens_details.reasoning_tokens 记录推理消耗的 token 数。Streaming 模式下可通过 response.reasoning.delta 事件实时查看推理进展。
Beta API:该 API 处于 beta 阶段,可能存在破坏性变更。
Responses API Beta 支持高级推理能力,允许模型展示内部推理过程,并通过可配置的 effort 级别控制推理深度。
Reasoning 配置
使用 reasoning 参数配置推理行为:
javascript
const response = await fetch('https://openrouter.ai/api/v1/responses', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_OPENROUTER_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'openai/o4-mini',
input: 'What is the meaning of life?',
reasoning: {
effort: 'high'
},
max_output_tokens: 9000,
}),
});
const result = await response.json();
console.log(result);Reasoning Effort 级别
effort 参数控制模型投入推理的计算量:
| Effort 级别 | 说明 |
|---|---|
minimal | 最低计算量,基础推理 |
low | 轻量推理,适合简单问题 |
medium | 均衡推理,适合中等复杂度 |
high | 深度推理,适合复杂问题 |
复杂推理示例
对于复杂的数学或逻辑推理问题:
javascript
const response = await fetch('https://openrouter.ai/api/v1/responses', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_OPENROUTER_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'openai/o4-mini',
input: [
{
type: 'message',
role: 'user',
content: [
{
type: 'input_text',
text: 'Was 1995 30 years ago? Please show your reasoning.',
},
],
},
],
reasoning: {
effort: 'high'
},
max_output_tokens: 9000,
}),
});Streaming Reasoning
开启 streaming 可实时查看推理过程:
javascript
const response = await fetch('https://openrouter.ai/api/v1/responses', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_OPENROUTER_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'openai/o4-mini',
input: 'Solve this step by step: If a train travels 60 mph for 2.5 hours, how far does it go?',
reasoning: {
effort: 'medium'
},
stream: true,
max_output_tokens: 9000,
}),
});
const reader = response.body?.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
for (const line of chunk.split('\n')) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') return;
try {
const parsed = JSON.parse(data);
if (parsed.type === 'response.reasoning.delta') {
console.log('Reasoning:', parsed.delta);
}
} catch (e) {
// Skip invalid JSON
}
}
}
}带 Reasoning 的响应格式
启用 reasoning 后,响应的 output 数组会包含一个 reasoning 类型的 item:
json
{
"id": "resp_1234567890",
"object": "response",
"created_at": 1234567890,
"model": "openai/o4-mini",
"output": [
{
"type": "reasoning",
"id": "rs_abc123",
"encrypted_content": "gAAAAABotI9-FK1PbhZhaZk4yMrZw3XDI1AWFaKb9T0NQq7LndK6zaRB...",
"summary": [
"First, I need to determine the current year",
"Then calculate the difference from 1995",
"Finally, compare that to 30 years"
]
},
{
"type": "message",
"id": "msg_xyz789",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Yes. In 2025, 1995 was 30 years ago.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 15,
"output_tokens": 85,
"output_tokens_details": {
"reasoning_tokens": 45
},
"total_tokens": 100
},
"status": "completed"
}reasoning item 包含:
encrypted_content:完整推理内容(加密,OpenRouter 内部保留)summary:推理摘要数组,供应用展示给用户
usage.output_tokens_details.reasoning_tokens 记录推理消耗的 token 数,便于成本估算。
最佳实践
- 选择合适的 effort 级别:复杂问题用
high,简单任务用low节省成本 - 关注 token 消耗:reasoning 会增加 token 用量,通过
reasoning_tokens字段监控 - 优先使用 streaming:推理链较长时,streaming 能提供更好的用户体验
- 提供充分上下文:给模型足够的上下文,有助于推理质量
常见问题
Q: encrypted_content 中的内容我可以解密吗?
A: 不可以。encrypted_content 是 OpenRouter 内部加密的完整推理内容,用于多轮对话中的推理链传递,不提供用户解密。如果需要展示推理过程给用户,使用 summary 数组即可。
Q: reasoning 会额外收费吗?
A: reasoning 消耗的 token 会计入 output_tokens,因此会增加费用。具体费率取决于所选模型。reasoning_tokens 字段可帮助你追踪推理消耗。
Q: 所有模型都支持 reasoning 吗?
A: 不是。reasoning 能力取决于模型本身是否支持,通常是 o1、o3、o4 系列等推理模型。普通模型传入 reasoning 参数可能被忽略或报错。