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

أسوأ خطأ برمجي في وكيل البرمجة ليس الانهيار.

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

بالنسبة لك، هذه هي المحادثة نفسها. أما بالنسبة للنظام، فإن إكمال المهمة يعني غالباً انتهاء الجلسة، فيبدأ النظام من الصفر.

أثناء بناء CliGate، أدركت أنني خلطت بين ثلاث طبقات مختلفة:

هذه ليست نفس الشيء.

المحادثة هي مساحة طويلة الأمد للتحدث. جلسة وقت التشغيل هي خيط العمل لتلك المحادثة. الدور هو عملية تشغيل واحدة داخل تلك الجلسة.

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

يبدو التدفق المعطل كالتالي: المستخدم يطلب مهمة -> تبدأ جلسة وقت التشغيل -> تكتمل المهمة -> تقوم المحادثة بمسح الجلسة النشطة -> تبدأ المتابعة التالية جلسة جديدة تماماً.

هذا يفسد المتابعات القصيرة مثل:

إذا قام النظام بفصل الجلسة فوراً، فسيتعين عليك إعادة ذكر كل شيء. الوكيل يعمل، لكن المحادثة تبدو غير واقعية.

لقد أصلحت هذا بجعل النموذج صريحاً:

توقفت عن معاملة إكمال المهمة على أنه نهاية للجلسة. هذا التغيير البسيط يحسن تجربة المنتج بالكامل.

في CliGate، لا تبدأ جلسة جديدة إلا إذا:

هذا يتماشى مع طريقة تفكير البشر. يتوقع المستخدم أن تعمل علامة تبويب الدردشة الواحدة كخيط محادثة واحد مستمر. وهذا أمر حيوي في تطبيقات الهاتف المحمول مثل Telegram أو Feishu.

المنطق الجديد بسيط:

هذا يجعل الوكيل يبدو كزميل عمل بدلاً من مجرد أداة لتنفيذ الأوامر.

إذا كنت تبني وكلاء برمجة، تذكر هذا: المحادثة هي الوحدة الدائمة. جلسة وقت التشغيل هي العامل القابل لإعادة الاستخدام. الدور هو الشيء الذي ينتهي عند النجاح أو الفشل.

افصل هذه الطبقات الثلاث. ستصبح متابعاتك أخيراً ذات طابع حواري.

المصدر: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2

مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi