الدرس 03 · تخطيط

دع الوكيل يدير تقدمه بنفسه

"يمكن للوكيل تتبع التقدم الذي يحرزه - ويمكنني رؤيته." اسمح للنموذج بإنشاء قائمته الخاصة، ثم استخدم آلية صغيرة للسماح له بالتذكر لتحديث القائمة.

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

التخطيط الذاتي المنظم

غالبًا ما يتعين على Claude Code القيام بعدة خطوات عند العمل: grep للعثور على المراجع ← قراءة بعض الملفات ← تغيير الكود ← إجراء الاختبارات. إذا تركت النموذج "يتقدم من خلال الشعور"، فسترى أنه يعمل بشكل جيد في الخطوات القليلة الأولى، ثم يبدأ في النسيان في المنتصف، ويستسلم أخيرًا في منتصف الطريق.

الحل لـ s03 هو منحه أداة واضحة: يقوم النموذج بضبط أداة todo الخاصة به لحشو عناصر المهمة فيه، وTodoManager يتحقق من البنية، ويستمر، ويعيد العرض الحالي. وهذا له ميزتان:

  • يضطر النموذج إلى توضيح "ما يجب فعله" - فمجرد كتابته يساعده على توضيح تفكيره.
  • يمكن للبشر رؤية ما يفكر فيه. تجربة التصحيح أفضل بعشر مرات.
عرض # TODO، كل عنصر منظم
[ ] #1: grep "TODO" عبر src/
[>] #2: قراءة src/app.py وإدراج التعليقات # قيد التقدم
[ ] #3: إنشاء تخفيض موجز
[ ] #4: اكتب إلى TODO_LIST.md

(0/4 مكتمل)

القاعدة الصعبة: لا يوجد سوى تقدم واحد في كل مرة

TodoManager.update() يوجد فحص:

if in_progress_count > 1:
    raise ValueError("يمكن تنفيذ مهمة واحدة فقط في كل مرة")

قد يبدو الأمر قاسيًا، لكنه في الواقع يساعد النموذج. إذا سمحت بثلاثة "أفعال" في نفس الوقت، فسوف يبدأ القتال في كل مكان ولن ينهي أيًا منها أبدًا. التقدم القسري في مهمة واحدة، يضطر إلى إكمال كل مهمة قبل فتح المهمة التالية.

تسمح لك الأداة أدناه بالعمل كنموذج، وإرسال حمولات المهام المختلفة، ومعرفة أي منها اجتاز التحقق وأي منها تم رفضه.

تذكير تذمر: لا توجد تحديثات لمدة 3 جولات متتالية؟ كزة ذلك

حتى لو تم توفير أداة المهام، فسيظل النموذج "ينسى" أحيانًا تحديث القائمة - لقد قام بالكثير من الأشياء، ولكن in_progress لا يزال عالقًا في العنصر 2. تعتبر الخطوة في s03 عدادًا بسيطًا للغاية:

rounds_since_todo = 0
بينما صحيح:
    الاستجابة = LLM (الرسائل والأدوات)
    ...
    used_todo = أي(b.name == "todo" لـ ب في tool_uses)
    rounds_since_todo = 0 إذا استخدمت_todo آخر rounds_since_todo + 1
    if rounds_since_todo >= 3:
        results.append({"type":"text", "text":"<reminder>تحديث جميع المهام.</reminder>"})

عندما يصل العدد إلى 3، قم بتضمين تذكير في الجولة التالية من رسائل المستخدم. عندما يراها النموذج، فإنه سوف يضبط المهام بشكل غريزي. يهدف هذا إلى استخدام وسائل هندسية لتحويل القيد الناعم ("يُرجى تحديثه باستمرار") إلى حافز قسري.

ما اسم هذا الروتين؟

في دوائر تصميم الوكيل، يسمى هذا التخطيط الذاتي المنظم مع الوكزات الناعمة - مما يمنح النموذج حالة منظمة يجب أن يكتب إليها، مع استكمالها بتذكيرات انتهازية. يستخدم كلود كود نمطًا مشابهًا في الكود الحقيقي، ولكنه أكثر تحفظًا (تردد منخفض، صياغة محايدة).

لماذا لا تكتب فقط "تحديث المهام في كل خطوة" في موجه النظام؟ الكتابة ممكنة، ولكن طاعة النموذج للتعليمات العامة في موجه النظام ستنخفض مع إطالة المحادثة. يعد تقسيم التعليمات إلى "تذكيرات يتم إعادة إدخالها باستمرار" أكثر استقرارًا.
تفاعلي

Widget 1 · كانبان · اضغط على ما يجب عمله للتطور

انقر فوق الخطوة لترى كيف يقوم النموذج بدفع المهمة من معلقة إلى قيد التقدم حتى تكتمل. لاحظ أنه يوجد دائمًا تقدم واحد فقط في كل جولة.

[ ] pending
[>] in_progress
[x] completed
准备开始…
تفاعلي

Widget 2 · التحقق من الصحة · أي من حمولات المهام الخمس التي تم تمريرها؟

قم بتمرير مصفوفة عناصر عندما يستدعي النموذج أداة todo. سيقوم TodoManager بتشغيل سلسلة من عمليات التحقق: النص ليس فارغًا، والحالة قانونية، وواحدة قيد التقدم على الأكثر، والعدد الإجمالي ≥ 20. انقر لتحديد ما إذا تم تمرير كل حمولة أو رفضها.

答对 0 / 5
تفاعلي

Widget 3 · Nag Counter · ماذا سيحدث إذا لم يتم تحديث المهام لمدة 3 جولات متتالية؟

انقر فوق "التالي" لمعرفة ما إذا كان العداد يقوم بتشغيل حقن التذكير. تحدد كل جولة بشكل عشوائي "اتصل بما يجب" أو "لا تتصل" - يتقلب أداء النموذج في الواقع أيضًا بهذه الطريقة.

rounds_since_todo: 0