Get started

Защита от зацикливания бота

OpenClaw может принимать сообщения, написанные другими ботами, в каналах, поддерживающих allowBots. Когда этот путь включен, защита от циклов между парами не позволяет двум ботам бесконечно отвечать друг другу.

Защита применяется основным обработчиком входящих ответов. Каждый поддерживающий канал преобразует входящее событие в универсальные данные: учетную запись или область действия, идентификатор беседы, идентификатор бота-отправителя и идентификатор бота-получателя. Ядро отслеживает пару участников в обоих направлениях (A → B и B → A считаются одной парой), применяет лимит скользящего окна и блокирует пару на период восстановления после превышения лимита.

Значения по умолчанию

Защита от циклов между парами активна всегда, когда канал позволяет сообщениям от ботов поступать на диспетчеризацию. Встроенные значения по умолчанию:

Ключ По умолчанию Значение
enabled true Защита активна для поддерживающих ее каналов.
maxEventsPerWindow 20 Число событий, которыми пара ботов может обменяться в пределах окна.
windowSeconds 60 Длительность скользящего окна.
cooldownSeconds 60 Время блокировки после превышения парой лимита.

Защита не влияет на сообщения от людей, развертывания с одним ботом, фильтрацию собственных сообщений и ответы ботов, не превышающие лимит.

Настройка общих значений по умолчанию

Задайте channels.defaults.botLoopProtection один раз, чтобы установить одинаковые базовые параметры для всех поддерживающих каналов. Переопределения для каналов, учетных записей и комнат по-прежнему позволяют настраивать отдельные поверхности.

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

Задавайте enabled: false только тогда, когда политика канала намеренно разрешает беседы между ботами без автоматической блокировки.

Переопределение для канала, учетной записи или комнаты

Поддерживающие каналы послойно применяют собственную конфигурацию поверх общих значений по умолчанию, отдельно для каждого ключа. Приоритет от наиболее узкой области к наиболее широкой:

  1. channels.<channel>.<room-or-space>.botLoopProtection, если канал поддерживает переопределения для отдельных бесед
  2. channels.<channel>.accounts.<account>.botLoopProtection, если канал поддерживает учетные записи
  3. channels.<channel>.botLoopProtection, если канал поддерживает значения по умолчанию верхнего уровня
  4. channels.defaults.botLoopProtection
  5. встроенные значения по умолчанию
json5
{  channels: {    defaults: {      botLoopProtection: {        maxEventsPerWindow: 20,      },    },    discord: {      botLoopProtection: {        maxEventsPerWindow: 8,      },      accounts: {        secondary: {          allowBots: "mentions",          botLoopProtection: {            maxEventsPerWindow: 5,            cooldownSeconds: 90,          },        },      },    },    googlechat: {      allowBots: true,      groups: {        "spaces/AAAA": {          botLoopProtection: {            maxEventsPerWindow: 5,          },        },      },    },    matrix: {      allowBots: "mentions",      groups: {        "!roomid:example.org": {          botLoopProtection: {            maxEventsPerWindow: 5,          },        },      },    },    slack: {      allowBots: "mentions",      botLoopProtection: {        maxEventsPerWindow: 8,      },    },  },}

Поддержка каналами

  • Discord: собственные данные author.bot, сгруппированные по учетной записи Discord, каналу и паре ботов.
  • Google Chat: собственные данные sender.type=BOT для принятых сообщений от ботов, сгруппированные по учетной записи, пространству и паре ботов.
  • Matrix: настроенные учетные записи ботов Matrix, сгруппированные по учетной записи Matrix, комнате и настроенной паре ботов.
  • Slack: собственные данные bot_id для принятых сообщений от ботов, сгруппированные по учетной записи Slack, каналу и паре ботов.

Каналы, не предоставляющие надежный идентификатор входящего бота, продолжают использовать обычные фильтры собственных сообщений и политик доступа. Им не следует включать эту защиту, пока они не смогут идентифицировать обоих участников пары ботов.

Подробности реализации плагина см. в разделе Среда выполнения SDK.

Was this useful?
On this page

On this page