Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].functio...

2026年06月20日 22:54 57.48 秒 success

错误信息

Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].function_declarations[1].***.properties[0].value': Cannot find field. Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].function_declarations[1].***.properties[1].value': Cannot find field. Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].function_declarations[7].***.properties[2].value': Cannot find field. Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].function_declarations[11].***.properties[4].value': Cannot find field. Invalid JSON payload received. Unknown name "const" at 'tools[0].function_declarations[11].***.properties[6].value.any_of[1]': Cannot find field. (request id: 20260620225222205203705Jvpc7OJc)

AI 解决方案

🔍 错误分析

#### 1. 🌐 错误翻译

原文:Invalid JSON payload received. Unknown name "propertyNames" at 'tools[0].function_declarations[1].***.properties[0].value': Cannot find field. Invalid JSON payload received. Unknown name "const" at 'tools[0].function_declarations[11].***.properties[6].value.any_of[1]': Cannot find field.
译文:收到的JSON载荷无效。在‘tools[0].function_declarations[1].***.properties[0].value’处发现未知名称“propertyNames”:找不到该字段。收到的JSON载荷无效。在‘tools[0].function_declarations[11].***.properties[6].value.any_of[1]’处发现未知名称“const”:找不到该字段。

#### 2. 🎯 原因分析
根本原因是你发送给API(很可能是类似OpenAI或Google Gemini的函数调用功能)的JSON请求体结构不符合其服务端定义的Schema。具体来说:

  • "propertyNames" 不被识别:这个字段是JSON Schema规范的一部分,用于限制对象属性名称的模式。但目标API的参数Schema定义不支持不需要这个字段,服务端无法在对应位置找到它。

  • "const" 不被识别"const" 也是JSON Schema的一个关键字,用于指定某个字段必须等于的特定值。同样,API的参数Schema未包含此字段定义
  • 错误发生在你的 tools 数组中 function_declarationsparameters 定义里。你提交的参数描述结构比API实际支持的结构更“丰富”或更“严格”,导致服务端在解析时遇到未知字段。

    #### 3. 💡 解决方案
    你需要从每个出错的 function_declarationsparameters 定义中,移除API不支持的字段。请检查并修正你的代码:

    // 修复前(示例,包含不支持的字段)
    const tools = [
      {
        function_declarations: [
          // ... 其他声明
          {
            name: "your_function",
            description: "描述",
            parameters: {
              type: "object",
              properties: {
                some_param: {
                  type: "object",
                  properties: { /* ... */ },
                  propertyNames: { /* ... */ }, // ❌ 这个字段不被支持,需要移除
                }
              }
            }
          },
          // ... 其他声明
          {
            name: "another_function",
            description: "描述",
            parameters: {
              type: "object",
              properties: {
                config: {
                  type: "object",
                  properties: { /* ... */ },
                  any_of: [
                    { /* ... */ },
                    { const: "some_value" } // ❌ 这个字段不被支持,需要修改或移除
                  ]
                }
              }
            }
          }
        ]
      }
    ];
    
    // 修复后(移除不支持的字段)
    const tools = [
      {
        function_declarations: [
          // ... 其他声明
          {
            name: "your_function",
            description: "描述",
            parameters: {
              type: "object",
              properties: {
                some_param: {
                  type: "object",
                  properties: { /* ... */ }
                  // ✅ 已移除 `propertyNames` 字段
                }
              }
            }
          },
          // ... 其他声明
          {
            name: "another_function",
            description: "描述",
            parameters: {
              type: "object",
              properties: {
                config: {
                  type: "object",
                  properties: { /* ... */ }
                  // ✅ 方案1:移除整个 `any_of` 定义,改为简单的类型或枚举定义
                  // ✅ 方案2:如果 `any_of` 里的元素只是想说明是特定值,请使用 `enum` 字段代替:
                  // enum: ["some_value"]
                }
              }
            }
          }
        ]
      }
    ];
    

    具体操作步骤:

  • 仔细阅读你所使用的API(如Google AI Studio, OpenAI等)关于函数/工具调用的官方文档,特别是 “参数(Parameters)”部分支持哪些JSON Schema字段

  • 从你的 parameters 定义中,删除所有文档中未提及的字段,例如 propertyNamesconstif/then/else 等高级验证关键字。

  • 将你的参数定义简化为只包含 type, properties, required, enum, description 等最常见的字段。
  • #### 4. 🛡️ 预防措施

  • 查阅官方文档:在构建复杂的函数定义时,务必以官方文档中的示例和支持的字段列表为准,避免使用标准JSON Schema中但API未实现的特性。

  • 使用官方SDK/工具:优先使用API提供商的官方SDK(如 openai 包、@google/generative-ai 包)来构建请求,它们通常会帮你处理或验证参数结构,减少手动构造错误。

  • 简化参数结构:对于API调用场景,函数参数定义应尽可能清晰、简单。避免使用复杂的JSON Schema验证逻辑,这可能会导致兼容性问题。优先使用 enum 列举可选值,而非复杂的条件约束。