type has to be either 'image_url' or 'text' at file:///E:/Users/Lenovo/AppData/L...

2026年04月01日 18:46 processing

错误信息

AI_APICallError: type has to be either 'image_url' or 'text' at file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/dist-DWBkLJID.js:1704:11 at async postToApi (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/dist-DWBkLJID.js:1599:24) at async OpenAICompatibleChatLanguageModel.doStream (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/dist-MiiZ7jiT.js:452:48) at async wrapStream (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:48641:32) at async fn (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:47507:17) at async file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:43861:19 at async _retryWithExponentialBackoff (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:44024:10) at async streamStep (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:47476:109) at async fn (file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:47782:5) at async file:///E:/Users/Lenovo/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BX3OZ3o6.js:43861:19

AI 解决方案

报错分析报告

1.错误翻译


原文:type has to be either 'image_url' or 'text'
译文:类型必须是 'image_url' 或 'text' 中的一个

2. 原因分析


  • 根本原因:调用AI API时,type参数传入了非允许值(需为'image_url''text')。

  • 发生位置postToApi函数异步调用链中(文件dist-DWBkLJID.js:1599),参数验证阶段触发错误。
  • 3. 解决方案


    // 修复示例:确保type参数符合API要求
    async function callAIAPI(payload) {
      // 校验并修正type参数
      const validTypes = ['image_url', 'text'];
      if (!validTypes.includes(payload.type)) {
        payload.type = 'text'; // 默认 fallback 到合法值,或根据业务调整
      }
    
      // 调用API(示例)
      return await fetch('/api/ai', {
        method: 'POST',
        body: JSON.stringify(payload)
      });
    }
    

    4. 预防措施


  • 最佳实践1:用枚举类型定义允许的参数值(如TypeScript的enum Type { ImageUrl = 'image_url', Text = 'text' }),避免硬编码错误。

  • 最佳实践2:调用API前用参数校验库(如zodjoi)验证输入,示例:z.object({ type: z.enum(['image_url', 'text']) })

  • 推荐工具:[Zod](https://zod.dev/)(轻量 schema 验证)、[TypeScript Enums](https://www.typescriptlang.org/docs/handbook/enums.html)(类型约束)。