الوكيل الذي يجد عملا بنفسه
"الوكيل يجد العمل بنفسه." ليست هناك حاجة لبشر لإرسال الأوامر، وسوف يستغرق العمل نفسه من لوحة المهام.
من "الاستيقاظ" إلى "العثور على وظيفتك الخاصة"
زميل فريق s09 / s10 هو سلبي: يحتاج شخص ما إلى إرسال رسالة عبر صندوق البريد قبل أن يبدأ العمل؛ عندما يتم ذلك، فإنه في وضع الخمول ويتم إيقاظه مرة أخرى. ص>
زميل فريق S11 المستقل نشط: لا يتوقف الأمر حقًا عندما لا يكون هناك عمل. سيقوم بمسح دليل .tasks/ كل 5 ثوانٍ - عندما يرى مهمة غير مملوكة، سيطالب بها claim_task ويبدأ العمل. ص>
دورة حياة زميل الفريق:
+-------+
| تفرخ |
+---+---+
|
ضد
+-------+
| العمل | <-- حلقة استخدام أداة LLM
+---+---+
|
| stop_reason != tool_use أو tool_use("idle")
ضد
+-------+
| الخمول | استطلاع كل 5 ثوانٍ، إجمالي 12 مرة = مهلة 60 ثانية
+---+---+
|
+--> أخبار جديدة في البريد الوارد؟ → استئناف العمل
|
+--> مسح .tasks/، تم العثور عليه غير مطالب به → مطالبة → استئناف العمل
|
+--> 60 ثانية لا شيء ينتظر → الحالة = إيقاف التشغيل، خروج الخيط
المطالبة التلقائية · "تلقي الأوامر" من لوحة المهام
الوظائف الأساسية:
def scan_unclaimed_tasks() -> القائمة: غير مُطالب به = [] لـ f في مرتبة(TASKS_DIR.glob("task_*.json")): المهمة = json.loads(f.read_text()) if (task.get("status") == "pending" و ليس Task.get("owner") و ليس Task.get("blockedBy")): لم تتم المطالبة به.إلحاق (مهمة) إرجاع لم تتم المطالبة به
ثلاثة مرشحات = معلق + لا يوجد مالك + لا يوجد حظر بواسطة. وكلاهما لا غنى عنه. ص>
يحتوي إجراء المطالبة نفسه على قفل (_claim_lock) لمنع وكيلين من الاستيلاء على نفس المهمة التي لم تتم المطالبة بها في نفس الوقت - اقرأ القفل مرة أخرى، وتحقق مما إذا كان المالك لا يزال فارغًا، ثم اكتب علامة "in_progress" + المالك على القرص. ص>
محاكاة وكلاء متعددين لمسح لوحة المهام في نفس الوقت
3 من أعضاء الفريق في حالة الخمول، و3 مهام في انتظار المطالبة بها. انقر فوق "مسح الجولة التالية" لمعرفة من يحصل عليها أولاً. ص>
إعادة حقن الهوية · مازلت تعرف من أنت بعد الضغط
ذكرs06 أن الضغط التلقائي سيستبدل الرسائل بالملخص. يمكن تشغيل العامل المستقل بسهولة بعد تشغيله لساعات - بعد الضغط، لا يعرف النموذج اسمه أو دوره. ص>
خدعة S11: عند المطالبة بمهمة جديدة، إذا كانت قيمة len(messages) ≥ 3 (تشير إلى أنه تم ضغطها للتو)، قم بإدراج كتلة الهوية تلقائيًا في الرأس:
if len(messages) <= 3: messages.insert(0, { "الدور": "المستخدم"، "content": f"<identity>أنت "أليس"، الدور: مبرمج، الفريق: فريقي. واصل عملك.</identity>", }) messages.insert(1, {"role":"assistant", "content": f"أنا أليس. مستمر."})
يُسمى هذا الوضع إعادة حقن الهوية - فهو يستخدم جولة حوار مصطنعة "لإخبار النموذج من هو" حتى يتمكن من استعادة إحساسه بالشخصية. ص>