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

بروتوكول المصافحة بين عميلين

يحتاج الوكلاء أيضًا إلى "إبرام العقود" مع بعضهم البعض. request_id هو رقم العقد.

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

لماذا الاتفاق؟

في s09، يمكن send_message إرسال أي محتوى. ولكن عندما يريد وكيلان التوصل إلى توافق في الآراء حول شيء ما (مثل "أريد إيقاف العمل، هل يمكنني ذلك؟")، فإن مجرد إرسال سلسلة لا يكفي - فأنت بحاجة إلى:

  • يحتوي الطلب على هوية واضحة (request_id) حتى تكون الاستجابة دقيقة.
  • جهاز الحالة: معلق → تمت الموافقة عليه | مرفوضة، والعواقب المترتبة على كل دولة واضحة.
  • الحقول المتسقة: يعرف كلا الطرفين ما تعنيه الموافقة: صحيح.

ولهذا السبب يوجد shutdown_request / shutdown_response / plan_approval / plan_approval_response.

العملية برمتها لبروتوكول إيقاف التشغيل

يريد القائد أن تخرج أليس من العمل:

القائد:
  # أرسل طلب إيقاف التشغيل، ويسجل الخادم request_id
  req_id = uuid4()[:8]
  Shutdown_requests[req_id] = {"target": "alice", "status": "معلق"}
  إرسال ("alice", "shutdown_request", extra={"request_id": req_id})

أليس:
  # اقرأ صندوق البريد في الحلقة التالية وشاهد Shutdown_request
  # القرار: إنهاء العمل قبل العودة والموافقة
  tool_use("shutdown_response", request_id=req_id, موافقة=صحيح)

الرصاص:
  # تلقي Shutdown_response، وتحديث المتتبع إلى الوضع المعتمد
  Shutdown_requests[req_id]["status"] = "approved"
  # اكتشف مؤشر ترابط أليس قبول إيقاف التشغيل وقام بتعيين الحالة = إيقاف التشغيل للخروج من الحلقة

اغلاق ولايات ميكرونيزيا الموحدة التصور

راقب كل خطوة من خطوات آلة الحالة. يمكن لأليس أيضًا أن ترفض - قائلة "أنا أقوم بعمل حاسم ولا أستطيع التوقف الآن".

الموافقة على الخطة · نفس النموذج، مجال مختلف

يرسل زميل الفريق خطة قبل إطلاق خطوة كبيرة ويرجى القيادة للحصول على الموافقة:

أليس:
  tool_use("plan_approval", Plan="أخطط لإعادة كتابة جميع وحدات المصادقة باستخدام jwt")
  # تستمر أليس في وضع الخمول وتنتظر الرصاص

الرصاص:
  # راجع طلب الاستجابة للموافقة على خطة أليس
  tool_use("plan_approval", request_id="...", موافقة=خطأ,
           ردود الفعل="لا تلمس المصادقة بعد، سنجري إعادة هيكلة شاملة في الشهر المقبل")

بالنظر إلى كود مصدر s10، ستجد: يستخدم البروتوكولان نفس وضع تتبع request_id - يتم تغيير أسماء القاموس فقط (shutdown_requests مقابل plan_requests). هذا هو "نموذج واحد، مجالين".

لماذا لا يتم تجريد فئة أساسية للبروتوكول العام؟ s10 ليس مجردًا عن عمد. السبب: يوجد الآن بروتوكولان فقط، وفوائد التجريد ليست واضحة بعد؛ إذا كتبت اثنين بشكل واضح، يمكن فهم كل منهما بشكل مستقل. لن يفوت الأوان لتحسين البروتوكولين الرابع والخامس (قاعدة الثلاثة).
تفاعلي

Widget 1 · اغلاق ولايات ميكرونيزيا الموحدة · انتقل من خلال آلة الدولة بأكملها

انقر على "التالي" للانتقال إلى خطوة أبعد ومعرفة كيف ينشئ request_id علاقة مقابلة بين الوكيلين.

🧑‍💼 Lead
👩‍💻 Alice
shutdown_requests 状态表
{}
تفاعلي

Widget 2 · request_id Association · لا تحصل على عقد خاطئ

هناك طلبات متعددة معلقة في نفس الوقت - انقر على الرد لمعرفة الطلب الذي تم تحديثه. هذا هو مفتاح تزامن البروتوكول.

待响应的请求
模拟的响应(点击触发)
تفاعلي

Widget 3 · تصميم البروتوكول · البروتوكول الثالث الخاص بك

مما يتيح لك سيناريو جديدًا، قم بتطبيق نمط request_id لتصميم المصافحة. اختر الخيار الصحيح للتمرير.

答对 0 / 5