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

الوكيل الذي يجد عملا بنفسه

"الوكيل يجد العمل بنفسه." ليست هناك حاجة لبشر لإرسال الأوامر، وسوف يستغرق العمل نفسه من لوحة المهام.

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

من "الاستيقاظ" إلى "العثور على وظيفتك الخاصة"

زميل فريق 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"أنا أليس. مستمر."})

يُسمى هذا الوضع إعادة حقن الهوية - فهو يستخدم جولة حوار مصطنعة "لإخبار النموذج من هو" حتى يتمكن من استعادة إحساسه بالشخصية.

تفاعلي

Widget 1 · ماسح المهام · 3 وكلاء يستحوذون على 3 مهام

أليس / بوب / تشارلي جميعهم خاملون. انقر فوق فحص لمعرفة من الذي يطالب بالمهمة الأولى التي لم تتم المطالبة بها حسب الترتيب الأبجدي.

.tasks/ 目录
Teammates 状态
所有人都 idle,等着扫
تفاعلي

Widget 2 · انحراف الهوية · بعد الضغط، هل لا يزال الوكيل يتذكر نفسه؟

مقارنة إجابة الوكيل بسؤال "من أنت؟" قبل وبعد ضغط سياق المحاكاة. ماذا يحدث بدون إعادة حقن الهوية؟

没有 identity 重注入
有 identity 重注入
تفاعلي

Widget 3 · الحكم الذاتي مقابل المساعدة · ما هي الأدوار المناسبة للاستقلالية؟

قرر ما إذا كنت تريد السماح لهذا الدور بتشغيل دورة مستقلة أو البقاء في وضع الاستعداد بشكل سلبي. فكر في "تكلفة فقدان السيطرة" و"تكرار التدخل البشري".

答对 0 / 5