माझ्या कोडिंग एजंटने टास्क पूर्ण केला. मग थ्रेड का संपला?
कोडिंग एजंटमधील सर्वात वाईट बग म्हणजे क्रॅश होणे हा नाही.
तो तेव्हा असतो जेव्हा पहिला टास्क यशस्वी होतो पण पुढचा मेसेज पाठवल्यावर असे वाटते की एजंट स्मृतीभ्रंश (amnesia) झाला आहे. तुम्ही एखादा टास्क सांगता. एजंट तो पूर्ण करतो. मग तुम्ही म्हणता: "बटण हिरवे करा."
तुमच्यासाठी, ही एकच चर्चा (conversation) आहे. पण सिस्टमसाठी, टास्क पूर्ण झाला याचा अर्थ अनेकदा सेशन संपले असा होतो. सिस्टम पुन्हा शून्यापासून सुरुवात करते.
CliGate तयार करताना मला जाणवले की मी तीन वेगवेगळ्या लेयर्स एकत्र केल्या होत्या:
- चॅट कन्वर्सेशन (The chat conversation)
- रनटाइम सेशन (The runtime session)
- सध्याचा एक्झिक्यूशन टर्न (The current execution turn)
या गोष्टी एकच नाहीत.
कन्वर्सेशन ही संवादासाठी असलेली एक दीर्घकाळ टिकणारी जागा आहे. रनटाइम सेशन हा त्या कन्वर्सेशनसाठी असलेला वर्किंग थ्रेड आहे. टर्न म्हणजे त्या सेशनमधील एक सिंगल रन आहे.
जेव्हा एखादा टास्क पूर्ण होतो, तेव्हा फक्त टर्न संपला पाहिजे. सेशन सक्रिय राहिले पाहिजे.
बिघडलेला फ्लो असा दिसतो: युजर टास्क सांगतो -> रनटाइम सेशन सुरू होते -> टास्क पूर्ण होतो -> कन्वर्सेशन सक्रिय सेशन क्लिअर करते -> पुढचा फॉलो-अप एका अगदी नवीन सेशनपासून सुरू होतो.
यामुळे खालीलसारखे छोटे फॉलो-अप्स मोडतात:
- ते पुन्हा करा (retry that)
- याचप्रमाणे या फाईलसाठी करा (do the same for this file)
- एरर स्पष्ट करा (explain the error)
- पुढे चालू ठेवा (continue)
जर सिस्टमने लगेच सेशन वेगळे केले, तर तुम्हाला सर्व काही पुन्हा सांगावे लागते. एजंट काम करतो, पण संवाद कृत्रिम वाटतो.
मी मॉडेलला स्पष्ट सूचना देऊन हे सुधारले:
- कन्वर्सेशन कायमस्वरूपी (persistent) आहेत.
- रनटाइम सेशन्स डीफॉल्टनुसार 'स्टिकी' (sticky) आहेत.
- पूर्ण झालेले किंवा अयशस्वी झालेले टास्क फक्त सध्याचा टर्न बंद करतात.
- युजरने विचारल्यास किंवा मॉडेल बदलल्यासच नवीन सेशन सुरू होते.
मी टास्क पूर्ण होणे म्हणजे सेशन संपणे असे मानणे थांबवले. या छोट्या बदलामुळे संपूर्ण प्रॉडक्टचा अनुभव सुधारतो.
CliGate मध्ये, नवीन सेशन फक्त तेव्हाच सुरू होते जेव्हा:
- अजून कोणतेही सेशन नसेल.
- युजरने नवीन सेशनसाठी विचारले असेल.
- मॉडेलमधील बदलामुळे जुने सेशन विसंगत (incompatible) झाले असेल.
हे मानवी विचार करण्याच्या पद्धतीशी जुळते. युजरला अपेक्षा असते की एक चॅट टॅब एका अखंड थ्रेडप्रमाणे काम करेल. टेलिग्राम किंवा 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