لقد أنهى وكيل البرمجة الخاص بي المهمة. لماذا انقطع تسلسل المحادثة؟
أسوأ خطأ برمجي في وكيل البرمجة ليس الانهيار.
بل هو عندما تنجح المهمة الأولى ولكن تبدو الرسالة التالية وكأنها فقدان للذاكرة. تطلب مهمة ما، فينهيها الوكيل، ثم تقول: "اجعل الزر أخضر".
بالنسبة لك، هذه هي المحادثة نفسها. أما بالنسبة للنظام، فإن إكمال المهمة يعني غالباً انتهاء الجلسة، فيبدأ النظام من الصفر.
أثناء بناء CliGate، أدركت أنني خلطت بين ثلاث طبقات مختلفة:
- محادثة الدردشة
- جلسة وقت التشغيل
- دور التنفيذ الحالي
هذه ليست نفس الشيء.
المحادثة هي مساحة طويلة الأمد للتحدث. جلسة وقت التشغيل هي خيط العمل لتلك المحادثة. الدور هو عملية تشغيل واحدة داخل تلك الجلسة.
عندما تكتمل المهمة، يجب أن ينتهي "الدور" فقط، بينما يجب أن تظل الجلسة نشطة.
يبدو التدفق المعطل كالتالي: المستخدم يطلب مهمة -> تبدأ جلسة وقت التشغيل -> تكتمل المهمة -> تقوم المحادثة بمسح الجلسة النشطة -> تبدأ المتابعة التالية جلسة جديدة تماماً.
هذا يفسد المتابعات القصيرة مثل:
- أعد المحاولة
- افعل الشيء نفسه لهذا الملف
- اشرح الخطأ
- استمر
إذا قام النظام بفصل الجلسة فوراً، فسيتعين عليك إعادة ذكر كل شيء. الوكيل يعمل، لكن المحادثة تبدو غير واقعية.
لقد أصلحت هذا بجعل النموذج صريحاً:
- المحادثات مستمرة.
- جلسات وقت التشغيل تظل مرتبطة بشكل افتراضي.
- المهام المكتملة أو الفاشلة تغلق "الدور" الحالي فقط.
- لا تبدأ جلسات جديدة إلا إذا طلب المستخدم ذلك أو إذا تغير النموذج.
توقفت عن معاملة إكمال المهمة على أنه نهاية للجلسة. هذا التغيير البسيط يحسن تجربة المنتج بالكامل.
في CliGate، لا تبدأ جلسة جديدة إلا إذا:
- لم تكن هناك جلسة بعد.
- طلب المستخدم جلسة جديدة.
- أدى تغيير النموذج إلى جعل الجلسة القديمة غير متوافقة.
هذا يتماشى مع طريقة تفكير البشر. يتوقع المستخدم أن تعمل علامة تبويب الدردشة الواحدة كخيط محادثة واحد مستمر. وهذا أمر حيوي في تطبيقات الهاتف المحمول مثل Telegram أو Feishu.
المنطق الجديد بسيط:
- الرسالة الأولى تنشئ جلسة وقت التشغيل.
- الرسائل اللاحقة تستمر في استخدام تلك الجلسة.
- الإكمال لا يقطع تسلسل المحادثة.
- الأوامر الصريحة فقط هي التي تبدأ جلسة جديدة.
هذا يجعل الوكيل يبدو كزميل عمل بدلاً من مجرد أداة لتنفيذ الأوامر.
إذا كنت تبني وكلاء برمجة، تذكر هذا: المحادثة هي الوحدة الدائمة. جلسة وقت التشغيل هي العامل القابل لإعادة الاستخدام. الدور هو الشيء الذي ينتهي عند النجاح أو الفشل.
افصل هذه الطبقات الثلاث. ستصبح متابعاتك أخيراً ذات طابع حواري.
المصدر: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi