Get started

محافظت در برابر حلقهٔ ربات

OpenClaw می‌تواند در کانال‌هایی که از allowBots پشتیبانی می‌کنند، پیام‌های نوشته‌شده توسط ربات‌های دیگر را بپذیرد. هنگامی که این مسیر فعال باشد، محافظت در برابر حلقهٔ جفتی مانع می‌شود دو هویت ربات به‌طور نامحدود به یکدیگر پاسخ دهند.

این محافظ توسط اجراکنندهٔ اصلی پاسخ ورودی اعمال می‌شود. هر کانال پشتیبان، رویداد ورودی خود را به داده‌های عمومی نگاشت می‌کند: حساب یا دامنه، شناسهٔ مکالمه، شناسهٔ ربات فرستنده و شناسهٔ ربات گیرنده. هسته جفت مشارکت‌کنندگان را در هر دو جهت ردیابی می‌کند (A به B و B به A یک جفت محسوب می‌شوند)، یک سهمیهٔ پنجرهٔ لغزان اعمال می‌کند و پس از تجاوز از سهمیه، جفت را برای یک دورهٔ توقف موقت سرکوب می‌کند.

پیش‌فرض‌ها

محافظت در برابر حلقهٔ جفتی هرگاه کانالی اجازه دهد پیام‌های نوشته‌شده توسط ربات به مرحلهٔ توزیع برسند، فعال است. پیش‌فرض‌های داخلی:

کلید پیش‌فرض معنا
enabled true محافظ برای کانال‌هایی که از آن پشتیبانی می‌کنند فعال است.
maxEventsPerWindow 20 تعداد رویدادهایی که یک جفت ربات می‌تواند درون پنجره مبادله کند.
windowSeconds 60 طول پنجرهٔ لغزان.
cooldownSeconds 60 مدت سرکوب پس از تجاوز جفت از سهمیه.

این محافظ بر پیام‌های نوشته‌شده توسط انسان، استقرارهای تک‌رباتی، فیلترکردن پیام‌های خود ربات یا پاسخ‌های رباتی که زیر سهمیه باقی می‌مانند تأثیری ندارد.

پیکربندی پیش‌فرض‌های مشترک

channels.defaults.botLoopProtection را یک‌بار تنظیم کنید تا همهٔ کانال‌های پشتیبان خط مبنای یکسانی داشته باشند. کانال‌ها همچنین ممکن است بازنویسی‌های محدودتری ارائه دهند؛ Feishu عمداً فقط از همین خط مبنای مشترک استفاده می‌کند.

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: true,          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، کانال و جفت ربات.
  • Feishu: داده‌های بومی sender_type=bot برای پیام‌های گروهی پذیرفته‌شدهٔ نوشته‌شده توسط ربات، کلیدگذاری‌شده بر اساس حساب Feishu، گفت‌وگو و جفت ربات. Feishu فقط از channels.defaults.botLoopProtection استفاده می‌کند.
  • Google Chat: داده‌های بومی sender.type=BOT برای پیام‌های پذیرفته‌شدهٔ نوشته‌شده توسط ربات، کلیدگذاری‌شده بر اساس حساب، فضا و جفت ربات.
  • Matrix: حساب‌های ربات Matrix پیکربندی‌شده، کلیدگذاری‌شده بر اساس حساب Matrix، اتاق و جفت ربات پیکربندی‌شده.
  • Slack: داده‌های بومی bot_id برای پیام‌های پذیرفته‌شدهٔ نوشته‌شده توسط ربات، کلیدگذاری‌شده بر اساس حساب Slack، کانال و جفت ربات.

کانال‌هایی که هویت قابل‌اعتمادی از ربات ورودی ارائه نمی‌دهند، همچنان از فیلترهای معمول پیام خود ربات و خط‌مشی دسترسی استفاده می‌کنند. آن‌ها نباید تا زمانی که بتوانند هر دو مشارکت‌کنندهٔ جفت ربات را شناسایی کنند، این محافظ را فعال کنند.

برای جزئیات پیاده‌سازی Plugin به زمان اجرای SDK مراجعه کنید.

Was this useful?
On this page

On this page