400 {"error":{"type":"<nil>","message":"Provider API error: ..content.1.tool_use...

2026年04月14日 10:04 processing

错误信息

API Error: 400 {"error":{"type":"<nil>","message":"Provider API error: ..content.1.tool_use.id: String should match pattern '^[a-zA-Z0-9_-]+$' (request id: 20260414095138711797916ct2TaWSU)"},"type":"error"} ❌ 处理失败:Command failed with exit code 1 (exit code: 1) Error output: Check stderr output for details

AI 解决方案

报错分析报告

1.错误翻译


原文:content.1.tool_use.id: String should match pattern '^[a-zA-Z0-9_-]+$'
译文:content.1.tool_use.id:字符串应匹配模式'^[a-zA-Z0-9_-]+$'(即仅含字母、数字、下划线、连字符)

2. 原因分析


  • 根本原因:请求中content[1].tool_use.id字段的值包含非法字符(非a-zA-Z0-9_-),违反API格式要求。

  • 发生位置:发送给Provider API的请求体content.1.tool_use.id字段。
  • 3.解决方案


    // 修复后的代码(JavaScript示例:生成合规ID并校验)
    function generateValidToolUseId() {
      // 用时间戳+随机合法字符生成ID(确保无特殊字符)
      const timestamp = Date.now().toString(36); // 36进制缩短长度
      const randomPart = Math.random().toString(36).substr(2, 6)
        .replace(/[^a-zA-Z0-9_-]/g, ''); // 过滤非法字符
      return `${timestamp}_${randomPart}`; // 用下划线连接(符合模式)
    }
    
    // 使用示例
    const toolUseId = generateValidToolUseId();
    // 发送前校验(双重保险)
    if (!/^[a-zA-Z0-9_-]+$/.test(toolUseId)) {
      throw new Error("tool_use.id格式错误");
    }
    

    4. 预防措施


  • 规范生成逻辑:ID生成时直接限制字符集(如仅用a-zA-Z0-9_-),避免后期清洗。

  • 前置校验:请求发送前用正则/^[a-zA-Z0-9_-]+$/校验tool_use.id,拦截非法值。
  • 推荐工具:用VS Code的「Regex Previewer」插件实时验证正则,或用Postman预请求脚本自动校验参数。