code: 400 - {'error': {'message': 'Invalid schema for function \'browser_back\':...

2026年05月08日 21:01 processing

错误信息

Error code: 400 - {'error': {'message': 'Invalid schema for function \'browser_back\': null is not of type "array"', 'type': 'invalid_request_error', 'param': '', 'code': 'invalid_request_error'}}

AI 解决方案

错误分析

#### 1. 误翻译

原文:Invalid schema for function ‘browser_back’: null is not of type “array”
译文:函数 ‘browser_back’ 的schema无效:null不是“array”类型

#### 2 原因分析
在调用大语言模型API(如OpenAI、Azure等)时,你定义了一个名为 browser_back 的工具或函数。错误的根源在于,该函数的 parameters(参数)字段的值被设置为 null

根据API的规范,parameters 字段必须是一个 JSON Schema 对象,其核心结构是一个 properties 对象。因此,它的类型必须是 object,而不是 null 或其它类型。系统在验证请求时发现,你传入的 null 不符合 object 类型的要求,因此报错。

错误位置:在你的API请求体中,类似如下的结构定义:

{
  "tools": [{
    "type": "function",
    "function": {
      "name": "browser_back",
      "parameters": null  // ❌ 错误!这里应该是`{}`或包含属性定义的对象
    }
  }]
}

#### 3.方案
你需要为 browser_back 函数提供一个正确的 parameters JSON Schema。

方案A:如果该函数不需要任何参数,将其设置为空对象 {}

# 示例:Python中定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "browser_back",
            "description": "让浏览器后退到上一个页面。",
            "parameters": {}  # ✅ 正确:空对象表示无参数
        }
    }
]

# 在调用API时使用这个tools列表
response = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[{"role": "user", "content": "请后退"}],
    tools=tools
)

方案B:如果该函数需要参数,则构建一个包含 type, properties, required 等字段的合法对象。

{
  "type": "object",
  "properties": {
    "steps": {
      "type": "integer",
      "description": "需要后退的页面步数"
    }
  },
  "required": ["steps"]
}

#### 4. 预防措施

  • 明确为无参数函数赋值:始终为函数的 parameters 字段赋予明确值。即使没有参数,也要使用空对象 {},而不是 null

  • 请求前进行验证:在发送API请求前,可以编写简单的校验逻辑或使用JSON Schema验证库,确保 parameters 字段符合基本的结构要求(至少是一个 object 类型)。
  • // 简单的前端/Node.js校验示例
    function validateToolSchema(tool) {
        if (tool.type === 'function') {
            if (typeof tool.function.parameters !== 'object' || tool.function.parameters === null) {
                throw new Error(`函数 ${tool.function.name} 的 parameters 必须是一个对象。`);
            }
        }
    }