Skip to content

OpenClaw 的 Bot 循环保护默认在 60 秒窗口内允许同一对机器人交换最多 20 条事件,超出后自动抑制 60 秒。你可以在 channels.defaults.botLoopProtection 设置全局参数,再通过渠道、账户或群组级配置覆盖。当前支持此保护的渠道有 Discord、Slack、Matrix 和 Google Chat,其他渠道若无法可靠识别机器人身份则不应启用。配置时注意 allowBots 必须先开启才能接收机器人消息。

OpenClaw 机器人循环保护配置与渠道覆盖

当渠道启用 allowBots 后,OpenClaw 会接收其他机器人发送的消息。此时成对循环保护(pair loop protection)机制会阻止两个机器人身份无限互相回复。

该保护由核心渠道轮次内核(channel-turn kernel)实施。每个支持的渠道将自身入站事件映射为通用事实:账号或范围、会话 ID、发送方机器人 ID、接收方机器人 ID。内核随后双向跟踪参与者组合,应用一个滑动窗口预算,当预算超限后抑制该组合一段时间。

循环保护默认参数

成对循环保护在渠道允许机器人消息进入调度时生效。内置默认值为:

  • maxEventsPerWindow: 20 — 同一对机器人在窗口内最多交换 20 次事件
  • windowSeconds: 60 — 滑动窗口长度(秒)
  • cooldownSeconds: 60 — 超过预算后的抑制时长(秒)

此保护不影响正常人类消息、单机器人部署、自我消息过滤或未超出预算的单轮机器人回复。

怎么配置全局默认参数

channels.defaults.botLoopProtection 中设置一次,即可为所有支持保护的渠道提供统一基线。渠道和账户级别的覆盖仍可独立调整。

json5
{
  channels: {
    defaults: {
      botLoopProtection: {
        maxEventsPerWindow: 20,
        windowSeconds: 60,
        cooldownSeconds: 60,
      },
    },
  },
}

enabled: false 仅在你明确允许机器人之间不自动抑制的渠道策略下使用。

按渠道或账户覆盖参数

支持保护的渠道可在共享默认值之上叠加自身配置。优先级顺序为(从高到低):

  • channels.<channel>.<room-or-space>.botLoopProtection(当渠道支持每会话覆盖时)
  • channels.<channel>.accounts.<account>.botLoopProtection(当渠道支持账户时)
  • channels.<channel>.botLoopProtection(当渠道支持顶层默认值时)
  • channels.defaults.botLoopProtection
  • 内置默认值
json5
{
  channels: {
    defaults: {
      botLoopProtection: {
        maxEventsPerWindow: 20,
      },
    },
    discord: {
      botLoopProtection: {
        maxEventsPerWindow: 8,
      },
      accounts: {
        molty: {
          allowBots: "mentions",
          botLoopProtection: {
            maxEventsPerWindow: 5,
            cooldownSeconds: 90,
          },
        },
      },
    },
    slack: {
      allowBots: "mentions",
      botLoopProtection: {
        maxEventsPerWindow: 8,
      },
    },
    matrix: {
      allowBots: "mentions",
      groups: {
        "!roomid:example.org": {
          botLoopProtection: {
            maxEventsPerWindow: 5,
          },
        },
      },
    },
    googlechat: {
      allowBots: true,
      groups: {
        "spaces/AAAA": {
          botLoopProtection: {
            maxEventsPerWindow: 5,
          },
        },
      },
    },
  },
}

支持循环保护的渠道

  • Discord:原生 author.bot 事实,按 Discord 账户、频道和机器人组合键值。
  • Slack:为已接受的机器人消息提供原生 bot_id 事实,按 Slack 账户、频道和机器人组合键值。
  • Matrix:已配置的 Matrix 机器人账户,按 Matrix 账户、房间和机器人组合键值。
  • Google Chat:为已接受的机器人消息提供原生 sender.type=BOT 事实,按账户、空间和机器人组合键值。

未能提供可靠入站机器人身份的渠道应继续使用正常的自我消息和访问策略过滤器,在能识别双方机器人身份之前不应启用此保护。

更多插件实现细节请参见 SDK 运行时


常见问题

如何完全关闭机器人循环保护?

channels.defaults.botLoopProtection 中设置 enabled: false 即可关闭全局保护。注意即使关闭,如果某个渠道或账户级别仍有单独配置,仍可能启用保护。

哪些渠道支持 bot-to-bot 循环保护?

目前支持 Discard、Slack、Matrix 和 Google Chat。其他渠道(如 Telegram、WhatsApp)无法可靠识别双方机器人身份,不应启用此保护。

如何调整一对机器人之间的冷却时间?

通过 cooldownSeconds 参数调整,可在 channels.defaults.botLoopProtection 设置全局值,也可在具体渠道、账户或群组配置中覆盖。默认值为 60 秒。