بروتوكول المصافحة بين عميلين
يحتاج الوكلاء أيضًا إلى "إبرام العقود" مع بعضهم البعض. request_id هو رقم العقد.
لماذا الاتفاق؟
في 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 ليس مجردًا عن عمد. السبب: يوجد الآن بروتوكولان فقط، وفوائد التجريد ليست واضحة بعد؛ إذا كتبت اثنين بشكل واضح، يمكن فهم كل منهما بشكل مستقل. لن يفوت الأوان لتحسين البروتوكولين الرابع والخامس (قاعدة الثلاثة).