Skip to content

Responses API Beta 支持通过 reasoning 参数启用模型的链式推理能力,effort 级别从 minimalhigh 控制推理深度。启用后响应会包含 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 数,便于成本估算。

最佳实践

  1. 选择合适的 effort 级别:复杂问题用 high,简单任务用 low 节省成本
  2. 关注 token 消耗:reasoning 会增加 token 用量,通过 reasoning_tokens 字段监控
  3. 优先使用 streaming:推理链较长时,streaming 能提供更好的用户体验
  4. 提供充分上下文:给模型足够的上下文,有助于推理质量

常见问题

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 参数可能被忽略或报错。