انتقل إلى المحتوى الرئيسي

الوحدة 6 — التفويض والإشراف

الوكيل الذي يعمل وحده على مهمّة يقع في فخّ واحد: إن لم يعرف شيئًا، يخترعه. الفريق الحقيقيّ يحلّ هذه المشكلة بأسلوب بشريّ معروف: يسأل زميلًا أو يُفوّض مهمّة فرعيّة إلى المتخصّص فيها. CrewAI يعرض هذه الآليّة عبر حقل allow_delegation، لكنّ الاستعمال السيّئ يُنشئ حلقات نقاش لا تنتهي.

allow_delegation: الفكرة الأساسيّة

كلّ وكيل يحمل حقلًا اختياريًّا allow_delegation: bool (افتراضيًّا False في الإصدارات الحديثة، True في القديمة — تحقّق من إصدارك). حين يكون True، تُدرَج تلقائيًّا أداتان في مجموعة أدواته:

  • Delegate Work to Coworker: يسمح للوكيل بإرسال مهمّة فرعيّة إلى وكيل آخر بالاسم.
  • Ask Question to Coworker: يسمح بطرح سؤال مركّز على وكيل آخر والحصول على جواب دون تفويض عمل كامل.
redacteur = Agent(
role="محرّر تقنيّ",
goal="...",
backstory="...",
tools=[chercher_terme],
allow_delegation=True,
)

الآن المحرِّر يستطيع، إن التبس عليه معنى وظيفة، أن يطرح سؤالًا على المحلِّل: «هل تعني هذه الوظيفة أنّ الفوترة تحدث شهريًّا أم عند كلّ حدث؟» ويتلقّى جوابًا يستعمله في الكتابة.

متى نفعّل التفويض

فعّله:

  • في العمليّة الهرميّة، على وكلاء متخصّصين يحتاجون سؤال بعضهم بعضًا.
  • على الوكيل المسؤول الذي يوزّع العمل بحكم دوره.
  • في الفرق التي تختلف فيها المهامّ بحسب المدخلات، فلا يمكن كتابة كلّ مسار مسبقًا.

عطّله:

  • في العمليّة التتابعيّة البسيطة: المسار محدّد، والتفويض يفتح بابًا للانحراف.
  • على الوكلاء الضيقي الاختصاص جدًّا: مراجِع نحويّ لا يحتاج تفويض شيء لأحد.
  • حين تُقاس الكلفة بصرامة: كلّ تفويض نداء نموذج إضافيّ.

القاعدة الآمنة: ابدأ بـFalse لكلّ الوكلاء، وفعّله فقط حيث تُثبت الحاجة إليه.

الفخّ الأشهر: حلقة الأسئلة بين وكيلَين

المحلِّل يسأل المحرِّر: «كيف ترى وصف هذه الوظيفة؟». المحرِّر يسأل المحلِّل: «هل هي وظيفة أساسيّة أم ثانويّة؟». المحلِّل يعيد السؤال بصياغة أخرى. المحرِّر يُعيد. الفريق يستهلك عشرين نداء نموذج قبل أن يُقرّر أيّ منهما شيئًا.

هذا سيناريو حقيقيّ رأيناه أكثر من مرّة، خاصّة على gpt-4o-mini. أسبابه:

  1. أهداف متداخلة: الوكيلان يظنّان أنّهما مسؤولان عن نفس القرار.
  2. قصور المخرَج المتوقّع: expected_output غامض، فكلٌّ يسأل الآخر عن التوضيح.
  3. allow_delegation=True على كلّ الوكلاء: بدل هرم أوامر، صار حوارًا أفقيًّا بلا حَكَم.

العلاج:

  • تفعيل التفويض على وكيل مسؤول واحد فقط.
  • توضيح مسؤوليّة كلّ وكيل بحيث لا تتقاطع.
  • حدّ تكرار عبر max_iter على كلّ وكيل (نضبطه في الوحدة 9).

دور المسؤول في الفريق

في خيطنا الأحمر، الوكيل «مسؤول التحرير» هو الوحيد الذي يحمل allow_delegation=True. المحلِّل والمحرِّر والمراجِع لا يفوّضون، بل ينفّذون المهامّ المُسنَدة إليهم مباشرة. المسؤول:

  • يقرأ نتائج المحلِّل ويقرّر إن كانت كافية للانتقال إلى الكتابة.
  • يقرأ نتائج المراجِع ويحكم بين رأيه ورأي المحرِّر إن اختلفا.
  • يفوّض جولة تصحيح إلى المحرِّر إن كانت الملاحظات جوهريّة.
  • يُصدر القرار النهائيّ بأنّ الوثيقة جاهزة للتسليم.
responsable = Agent(
role="مسؤول التحرير",
goal="ضمان أنّ الوثيقة النهائيّة تُلبّي المعايير قبل التسليم للعميل",
backstory="مدير توثيق يوازن بين آراء الفريق ويقرّر متى تكون الوثيقة جاهزة",
llm=llm_leger,
allow_delegation=True,
max_iter=8,
verbose=True,
)

max_iter=8 هو الحاجز: بعد ثماني دورات داخليّة، المسؤول يجب أن يُقرّر ولا يُطيل.

نمط «الإنسان في الحلقة»

بعض الفرق تضيف حَكَمًا بشريًّا يوقف الفريق في نقاط محدّدة. CrewAI يعرض human_input=True على Task:

tache_finale = Task(
description="أصدِر القرار النهائيّ بأنّ الوثيقة جاهزة للتسليم.",
expected_output="قرار نصّيّ: جاهزة، أو ملاحظات محدّدة قبل التسليم.",
agent=responsable,
context=[tache_relecture, tache_redaction],
human_input=True,
)

عند الوصول إلى هذه المهمّة، التنفيذ يتوقّف في الطرفيّة وينتظر تعليقًا من المستخدم. مفيد جدًّا في الاختبار: نرى ما اقترحه الفريق ونعيد توجيهه قبل التسليم. في الإنتاج، يُستبدَل بواجهة مراجعة.

الأسئلة الجيّدة بين الوكلاء

حين يُفعَّل التفويض، جودة الأسئلة تحدّد الكلفة. سؤال جيّد يحمل سياقًا كافيًا للحصول على جواب مفيد من نداء واحد. سؤال سيّئ غامض، يُنتج جوابًا غامضًا، فيُنتج سؤالًا آخر.

في تعليمة الوكيل، أضف قاعدة صريحة: «حين تسأل زميلًا، اذكر ما تعرفه أصلًا وما ينقصك بالتحديد». هذه التعليمة القصيرة قلّصت متوسّط عدد الأسئلة من 5 إلى 1.6 على وثيقتنا الاختباريّة.

احترس من التفويض المتبادَل

حين يسمح كلا الوكيلَين بالتفويض للآخر، الفريق يصير حوارًا أفقيًّا. القاعدة الآمنة: هرميّة واضحة، ووكيل واحد فقط في القمّة يفوّض.

الخلاصة

  • allow_delegation=True يمنح الوكيل أداتَي تفويض وسؤال؛ يُفعَّل فقط حيث تُثبت الحاجة.
  • الفخّ الأشهر: حلقة أسئلة بين وكيلَين تنقصهما حدود واضحة أو مسؤول يحكم.
  • في الخيط الأحمر، وكيل واحد (المسؤول) يفوّض؛ الآخرون ينفّذون مباشرة.
  • human_input=True على مهمّة يوقف التنفيذ لمراجعة بشريّة قبل الاستكمال؛ ضروريّ في الاختبار.