التحكّم في التدفّق
إلى جانب الوكلاء والمشغّلات، يوفّر betool عُقد تحكّم لهيكلة منطق الـpipeline.
الشرط (Condition)
توجّه عقدة condition الـexchanges إلى مخرجات متعدّدة بناءً على مُسنَد (predicate).
التهيئة:
- خانة الإدخال — ما يُقيَّم (
exchange.intent،webhook.payload.type…) - الفروع — لكل قيمة (أو شرط منطقي)، مخرج مُسمّى
- الفرع الافتراضي — إلزامي (fail-safe)
الاستخدام النموذجي: التوجيه بناءً على النيّة التي يكتشفها وكيل تصنيف، أو بناءً على حالة HTTP التي يُعيدها operator.
الحلقة (Loop)
تكرّر عقدة loop على مجموعة. التهيئة:
- خانة المجموعة — القائمة المُراد التكرار عليها
- متغيّر التكرار — الاسم المحلي للعنصر الحالي
- الحدّ — أقصى عدد للتكرارات (حارس أمان)
عند كل تكرار، يُنفَّذ الرسم البياني الفرعي الداخلي على العنصر الحالي. وتُجمَّع المخرجات في قائمة.
الحلقة غير المحدودة قنبلة موقوتة. اضبط دائمًا الحدّ الأقصى. وسيرفض المحرّر النشر دونه.
عامل التصفية (Filter)
تزيل عقدة filter الـexchanges التي لا تحقّق مُسنَدًا. مفيد لإزالة الضوضاء قبل تكبّد تكاليف LLM لاحقة.
مثال: تصفية رسائل البريد التي يكون حقل from فيها ضمن قائمة حظر، أو الـwebhooks حيث type != "order.created".
الموافقة البشرية (confirmation)
تُوقِف عقدة confirmation الـpipeline مؤقتًا وتنتظر إنسانًا للموافقة أو الرفض من واجهة الإدارة.
التهيئة:
- السؤال — ما يُطلَب من المراجِع (مع عناصر نائبة للسياق)
- الفروع —
approved/rejected(واختياريًا خيارات مخصّصة) - المهلة (Timeout) — إذا لم يُستلَم ردّ، وجّه إلى الفرع الافتراضي
- الإشعار — من يُنبَّه (البريد الإلكتروني، Mattermost، Slack)
حالات استخدام نموذجية:
- تأكيد مكالمة صادرة عالية القيمة.
- التحقق من بريد إلغاء قبل الإرسال.
- الموافقة على ردّ حسّاس قبل النشر.
يحفظ السجلّ اسم المراجِع والطابع الزمني — قابل للتتبّع بالكامل لأغراض التدقيق.
أفضل الممارسات
- صِل المخرج الافتراضي دائمًا. الـexchange الذي يقع في فراغ يبقى في
processingويحجب الطابور. - حافظ على بساطة الشروط. الشرط بـ12 فرعًا إشارة إلى أنك تحتاج إلى وكيلين متتاليين بدل منطق مكثّف.
- حُدّ من الحلقات المتداخلة. حلقة داخل حلقة داخل حلقة تعني تكاليف تنفجر. فضّل تحويل المجموعة في الأعلى بدلًا من ذلك.