Get started

Захист від циклів ботів

Захист від циклів ботів

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

Захист застосовується основним обробником вхідних відповідей. Кожен канал із підтримкою перетворює власну вхідну подію на узагальнені факти: обліковий запис або область, ідентифікатор розмови, ідентифікатор бота-відправника та ідентифікатор бота-отримувача. Потім ядро відстежує пару учасників в обох напрямках, застосовує ліміт ковзного вікна та блокує пару на час охолодження після перевищення ліміту.

Типові значення

Захист від циклів між парами активний, коли канал дозволяє повідомленням, створеним ботами, доходити до диспетчеризації. Вбудовані типові значення:

  • 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, щоб дізнатися подробиці реалізації Plugin.

Was this useful?
On this page

On this page