𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗙𝗶𝗻𝗶𝘀𝗵𝗲𝗱 𝗧𝗵𝗲 𝗧𝗮𝘀𝗸. 𝗪𝗵𝘆 𝗗𝗶𝗱 𝗧𝗵𝗲 𝗧𝗵𝗿𝗲𝗮𝗱 𝗗𝗶𝗲?
میرا کوڈنگ ایجنٹ ٹاسک مکمل کر چکا ہے۔ تھریڈ کیوں ختم ہو گیا؟
کوڈنگ ایجنٹ میں سب سے برا بگ کریش (crash) نہیں ہوتا۔
بلکہ یہ تب ہوتا ہے جب پہلا ٹاسک کامیاب ہو جائے لیکن اگلا پیغام ایسا لگے جیسے ایجنٹ سب کچھ بھول گیا ہو۔ آپ ایک ٹاسک کے لیے کہتے ہیں۔ ایجنٹ اسے مکمل کر لیتا ہے۔ پھر آپ کہتے ہیں: "بٹن کو سبز کر دو۔"
آپ کے لیے، یہ وہی گفتگو ہے۔ لیکن سسٹم کے لیے، ایک مکمل شدہ ٹاسک کا مطلب اکثر یہ ہوتا ہے کہ سیشن ختم ہو گیا ہے۔ سسٹم بالکل شروع سے آغاز کرتا ہے۔
CliGate بناتے وقت، مجھے احساس ہوا کہ میں نے تین مختلف تہوں (layers) کو آپس میں ملا دیا ہے:
- چیٹ گفتگو (The chat conversation)
- رن ٹائم سیشن (The runtime session)
- موجودہ ایگزیکیوشن ٹرن (The current execution turn)
یہ ایک ہی چیز نہیں ہیں۔
گفتگو بات چیت کے لیے ایک طویل مدتی جگہ ہے۔ رن ٹائم سیشن اس گفتگو کے لیے ورکنگ تھریڈ ہے۔ ایک ٹرن اس سیشن کے اندر ایک واحد رن (run) ہے۔
جب کوئی ٹاسک مکمل ہوتا ہے، تو صرف ٹرن ختم ہونا چاہیے۔ سیشن کو فعال (active) رہنا چاہیے۔
خراب بہاؤ (flow) کچھ اس طرح نظر آتا ہے: صارف ٹاسک کے لیے کہتا ہے -> رن ٹائم سیشن شروع ہوتا ہے -> ٹاسک مکمل ہوتا ہے -> گفتگو فعال سیشن کو صاف کر دیتی ہے -> اگلا فالو اپ ایک بالکل نیا سیشن شروع کرتا ہے۔
یہ مختصر فالو اپس کو توڑ دیتا ہے جیسے:
- اسے دوبارہ کریں (retry that)
- اسی فائل کے لیے بھی یہی کریں (do the same for this file)
- غلطی کی وضاحت کریں (explain the error)
- جاری رکھیں (continue)
اگر سسٹم فوری طور پر سیشن کو الگ کر دیتا ہے، تو آپ کو ہر چیز دوبارہ بتانی پڑتی ہے۔ ایجنٹ کام تو کرتا ہے، لیکن گفتگو مصنوعی محسوس ہوتی ہے۔
میں نے ماڈل کو واضح کر کے اسے درست کیا:
- گفتگو مستقل (persistent) ہوتی ہے۔
- رن ٹائم سیشنز ڈیفالٹ کے طور پر برقرار (sticky) رہتے ہیں۔
- مکمل یا ناکام شدہ ٹاسک صرف موجودہ ٹرن کو بند کرتے ہیں۔
- نئے سیشنز صرف تب شروع ہوتے ہیں جب صارف کہے یا اگر ماڈل تبدیل ہو۔
میں نے ٹاسک کی تکمیل کو سیشن کے خاتمے کے طور پر دیکھنا بند کر دیا۔ اس معمولی تبدیلی سے پورے پروڈکٹ کا احساس بہتر ہو جاتا ہے۔
CliGate میں، ایک نیا سیشن صرف تب شروع ہوتا ہے اگر:
- ابھی تک کوئی سیشن موجود نہ ہو۔
- صارف نئے کے لیے کہے۔
- ماڈل کی تبدیلی پرانے سیشن کو ناقابل مطابقت (incompatible) بنا دے۔
یہ انسانی سوچ کے مطابق ہے۔ ایک صارف توقع کرتا ہے کہ ایک چیٹ ٹیب ایک جاری رہنے والے تھریڈ کی طرح کام کرے۔ Telegram یا Feishu جیسی موبائل ایپس پر یہ بہت ضروری ہے۔
نیا لاجک سادہ ہے:
- پہلا پیغام ایک رن ٹائم سیشن تخلیق کرتا ہے۔
- بعد کے پیغامات اسی سیشن کو استعمال کرتے رہتے ہیں۔
- تکمیل تھریڈ کو ختم نہیں کرتی۔
- صرف واضح کمانڈز ہی نیا سیشن شروع کرتی ہیں۔
یہ ایجنٹ کو محض ایک کمانڈ لانچر کے بجائے ایک ساتھی (coworker) کے طور پر محسوس کرواتا ہے۔
اگر آپ کوڈنگ ایجنٹس بنا رہے ہیں، تو یہ یاد رکھیں: گفتگو ایک پائیدار اکائی (durable unit) ہے۔ رن ٹائم سیشن ایک دوبارہ استعمال ہونے والا ورکر (reusable worker) ہے۔ ٹرن وہ چیز ہے جو کامیابی یا ناکامی پر ختم ہو جاتی ہے۔
ان تین تہوں کو الگ کریں۔ آپ کے فالو اپس آخر کار ایک حقیقی گفتگو کا احساس دلائیں گے۔
ماخذ: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
اختیاری لرننگ کمیونٹی: https://t.me/GyaanSetuAi