OpenRouter 平台功能

OpenRouter 平台功能

Response Healing

3 分钟阅读

响应修复(Response Healing)

自动修复格式错误的 JSON 响应

响应修复(Response Healing)插件会自动校验并修复 AI 模型返回的格式错误 JSON。当模型返回不完美的格式——缺少括号、多余逗号、Markdown 包裹,或文本与 JSON 混杂——该插件会尝试修复响应,使你获得有效、可解析的 JSON。

概述

响应修复提供:

  • 自动 JSON 修复:补全缺失的括号、逗号、引号,并修复其他语法错误
  • Markdown 提取:从 Markdown 代码块中提取 JSON

工作原理

当你使用带有 type: "json_schema"type: "json_object"response_format,并在 plugins 数组中加入响应修复插件时,该插件会在非流式请求中激活。完整实现见下文完整示例

可修复的问题

响应修复插件可处理 LLM 响应中的常见问题:

JSON 语法错误

输入: 缺少右括号

{"name": "Alice", "age": 30

输出: 已修复

{"name": "Alice", "age": 30}

Markdown 代码块

输入: 被 Markdown 包裹

```json
{"name": "Bob"}
```

输出: 已提取

{"name": "Bob"}

文本与 JSON 混杂

输入: JSON 前有文本

这是你要的数据:
{"name": "Charlie", "age": 25}

输出: 已提取

{"name": "Charlie", "age": 25}

多余逗号

输入: 无效的多余逗号

{"name": "David", "age": 35,}

输出: 已修复

{"name": "David", "age": 35}

未加引号的键

输入: JavaScript 风格

{name: "Eve", age: 40}

输出: 已修复

{"name": "Eve", "age": 40}

完整示例

const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <OPENROUTER_API_KEY>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'google/gemini-2.5-flash',
    messages: [
      {
        role: 'user',
        content: '生成一条包含名称、价格和描述的商品信息'
      }
    ],
    response_format: {
      type: 'json_schema',
      json_schema: {
        name: 'Product',
        schema: {
          type: 'object',
          properties: {
            name: {
              type: 'string',
              description: '商品名称'
            },
            price: {
              type: 'number',
              description: '美元价格'
            },
            description: {
              type: 'string',
              description: '商品描述'
            }
          },
          required: ['name', 'price']
        }
      }
    },
    plugins: [
      { id: 'response-healing' }
    ]
  }),
});

const data = await response.json();
const product = JSON.parse(data.choices[0].message.content);
// 插件会尝试修复格式错误的 JSON 语法
console.log(product.name, product.price);

限制

仅适用于非流式请求

响应修复仅应用于非流式请求。

无法修复所有 JSON

部分格式错误的 JSON 响应可能仍然无法修复。尤其是当响应被 max_tokens 截断时,插件将无法修复。