本轮运行报错“tool_addition blocks can only be in system messages”,请帮我检查是不是某个插件导致的消息顺序问...

2026年10月22日 13:47 15.78 秒 success

错误信息

本轮运行报错“tool_addition blocks can only be in system messages”,请帮我检查是不是某个插件导致的消息顺序问题,并修复它

AI 解决方案

1. 🌐 错误翻译


原文:tool_addition blocks can only be in system messages
译文:tool_addition 块只能出现在系统消息中

2. 🎯 原因分析


  • 根本原因:tool_addition(工具补充信息块)被放置在了非系统消息中,违反了消息类型的强制约束,大概率是插件在拼接消息时,把本应归入系统消息的工具定义错误地插入到了用户消息、助手消息或工具响应消息中。

  • 上下文定位:消息构造环节,插件在组装对话上下文时未区分消息角色,导致工具相关的内容错放位置。
  • 3. 💡 解决方案


    // 修复前(错误示例,插件拼接时错放位置)
    messages.push({
      role: "user",
      content: "帮我查一下天气",
      // 错误:tool_addition 出现在非系统消息中
      tool_addition: [{ name: "weather", description: "查询天气" }]
    })
    
    // 修复后(正确做法,工具块统一归入系统消息)
    messages.push({
      role: "system",
      content: "你是一个天气助手,可调用工具查询天气信息",
      // 正确:tool_addition 仅在系统消息中定义
      tool_addition: [{ name: "weather", description: "查询天气" }]
    })
    
    messages.push({
      role: "user",
      content: "帮我查一下天气"
    })
    

    4. 🛡️ 预防措施


  • 统一消息组装逻辑:在插件中单独封装消息构建方法,强制tool_addition只能添加到role: "system"的消息对象里,非系统消息构建时自动过滤该字段。

  • 添加开发期校验:使用ESLint自定义规则或TypeScript类型约束,禁止非系统消息对象中包含tool_addition属性,提前拦截错误用法。