/MainProcess] 22208184909825/agent-e80a0 agent invoke chat to retry again llm er...

2026年04月15日 09:07 processing

错误信息

[2025-09-03 11:10:25,969: ERROR/MainProcess] 22208184909825/agent-e80a0 agent invoke chat to retry again llm error: Error code: 400 - {'error': {'message': "Invalid schema for function 'self_intent_recognition_0': None is not of type 'array'. (request id: 20250903110948261917640BBDOPt2p)", 'type': 'openai_error', 'param': '', 'code': 'invalid_function_parameters'}}

AI 解决方案

报错分析报告

1.错误翻译


原文:Invalid schema for function 'self_intent_recognition_0': None is not of type 'array'.
译文:函数'self_intent_recognition_0'的Schema无效:None不是数组(array)类型。

2. 原因分析


  • 根本原因:调用函数self_intent_recognition_0时,某参数传递了None值,但该参数在Schema中被定义为数组(array)类型。

  • 发生位置:LLM函数调用的参数校验阶段(错误码400对应客户端参数错误),上下文是Agent重试调用Chat接口时的LLM校验失败。
  • 3.解决方案


    #### 修复方式1:调用时传递数组(替换None)
    import json
    
    # 原错误参数(传递None)
    # params = {"your_array_param": None}
    
    # 修复后:传递空数组(符合array类型要求)
    params = {"your_array_param": []}  
    
    # 调用LLM函数示例
    function_call_args = {
        "name": "self_intent_recognition_0",
        "arguments": json.dumps(params)
    }
    

    #### 修复方式2:调整函数Schema(设默认空数组)

    {
      "name": "self_intent_recognition_0",
      "parameters": {
        "type": "object",
        "properties": {
          "your_array_param": {  // 替换为实际出错参数名
            "type": "array",
            "items": {"type": "string"},  // 按实际需求调整item类型
            "default": [],  // 默认值设为空数组(避免None)
            "minItems": 0     // 允许空数组
          }
        },
        "required": []  // 若参数可选,设为非必填
      }
    }
    

    4.️ 预防措施


  • Schema设计规范:数组类型参数显式设置default: [](空数组),禁止默认None

  • 前置校验:调用前用JSON Schema工具(如Pythonjsonschema库、JSAJV)验证参数类型,拦截None传入数组参数。
  • 推荐工具jsonschema(Python)、AJV(JavaScript)、OpenAI Function Calling Schema校验器。