الدرس 09 · تعاون

وكلاء متعددون يتواصلون عبر صناديق بريد ملفية

من subagent إلى teammate: لمرة واحدة ← دائم؛ مجهول ← له اسم؛ بلا تواصل ← صندوق بريد ملفي.

⏱ ~12 د · 📝 3 مكونات تفاعلية · 🧑‍💻 مبني على shareAI-lab · s09_agent_teams.py

ما الفرق بين Subagent و Teammate؟

subagent في S04 بسيط ومباشر: أطلق ← نفّذ ← أعد الملخص ← أُنهي. لمرة واحدة، بلا اسم، لا تواصل ثنائي بين الأب والابن.

teammate في s09 وكيل مستقل له اسم، يمكن إعادة استدعائه، يستطيع استقبال الرسائل وإرسالها:

subagent (s04):  spawn -> execute -> return -> destroyed
teammate (s09):  spawn -> work -> idle -> work -> ... -> shutdown

الاثنان لهما استخدامات مختلفة:

  • subagent مناسب لـ «تنفيذ استكشاف محدد» (مثل مراجعة PR).
  • teammate مناسب لـ «الاضطلاع بدور مستمر» (مثل مراجع دائم يُستدعى عند كل commit جديد).

صندوق البريد ملف JSONL

كيف يتواصل أعضاء الفريق؟ يستخدم s09 أبسط آلية: ملف JSONL بنمط append-only.

.team/
  config.json          # 团队花名册
  inbox/
    alice.jsonl        # 给 alice 的信都 append 到这里
    bob.jsonl
    lead.jsonl

الإرسال: open("alice.jsonl", "a").write(msg)؛ القراءة: قراءة الملف بأكمله وتحليل JSONL ثم truncate للتفريغ (دلالات drain).

لماذا ملفات لا queue في الذاكرة؟ الملفات دائمة بطبيعتها. سواء أُعيد تشغيل الوكيل، أو انهارت العملية، أو حتى أُعيد تشغيل الجهاز — الرسائل باقية. إضافة إلى ذلك يمكن قراءتها وgrep فيها، مما يجعل تجربة التصحيح ممتازة.

شاهد رحلة رسالة من lead إلى alice

المكوّن التالي يتيح لك إرسال رسالة إلى alice ومشاهدة ما يجري على القرص خطوة بخطوة.

5 أنواع رسائل

s09 يُعرّف 5 أنواع رسائل (VALID_MSG_TYPES)، لكن ينفّذ الأولين فقط، والثلاثة الباقية تُكتمل في درس بروتوكولات s10:

  • message — رسالة نصية عادية.
  • broadcast — إرسال لجميع زملاء الفريق ما عدا المُرسِل.
  • shutdown_request / shutdown_response — طلب/استجابة إيقاف تشغيل منظم (s10).
  • plan_approval_response — موافقة على خطة (s10).

لماذا الإعلان دون التنفيذ؟ لأن s09 يريد جعل «توسيع البروتوكول» نمطاً مفتوحاً — نوع الرسالة enum، وإضافة نوع جديد يتطلب فقط إدخالاً في القاموس ومعالج في روتر _exec.

تفاعلي

Widget 1 · Mail Flow · رسالة من lead إلى alice

اضغط Send وتتبع كل خطوة على نظام الملفات: lead.send → إضافة alice.jsonl → alice تقرأ inbox في الجولة التالية → truncate.

تفاعلي

Widget 2 · Team Config · من متصل وما حالته

ملف .team/config.json هو سجل الفريق. نفّذ بعض العمليات (spawn / message / shutdown) وشاهد كيف يتغير الملف.

العمليات
.team/config.json

        
تفاعلي

Widget 3 · Subagent vs Teammate · قرّر أيهما تستخدم

6 سيناريوهات لمهام، قرّر subagent (ينتهي عند الانتهاء) أم teammate (يستمر). فكّر هل المهمة «لمرة واحدة».

أصبت في 0 / 6