𝗠𝗲𝗿𝗲 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗻𝗲 𝗧𝗮𝘀𝗸 𝗽𝘂𝗿𝗮 𝗸𝗮𝗿 𝗹𝗶𝘆𝗮. 𝗧𝗵𝗿𝗲𝗮𝗱 𝗸𝘆𝗼𝗻 𝗸𝗵𝗮𝘁𝗺 𝗵𝗼 𝗴𝗮𝘆𝗮?
एक कोडिंग एजेंट में सबसे बुरा बग क्रैश होना नहीं है।
यह तब होता है जब पहला टास्क सफल हो जाता है लेकिन अगला मैसेज ऐसा लगता है जैसे एजेंट को amnesia (भूलने की बीमारी) हो गई हो। आप एक टास्क मांगते हैं। एजेंट उसे पूरा करता है। फिर आप कहते हैं: "बटन को हरा कर दो।"
आपके लिए, यह वही बातचीत है। लेकिन सिस्टम के लिए, एक पूरा हुआ टास्क अक्सर इसका मतलब होता है कि सेशन खत्म हो गया है। सिस्टम फिर से शुरुआत से शुरू करता है।
CliGate बनाते समय, मुझे एहसास हुआ कि मैंने तीन अलग-अलग लेयर्स को मिला दिया था:
- चैट बातचीत (The chat conversation)
- रनटाइम सेशन (The runtime session)
- वर्तमान निष्पादन टर्न (The current execution turn)
ये तीनों एक ही चीज़ नहीं हैं।
बातचीत (Conversation) बात करने के लिए एक लंबे समय तक चलने वाला स्पेस है। रनटाइम सेशन (Runtime session) उस बातचीत के लिए वर्किंग थ्रेड है। एक टर्न (Turn) उस सेशन के भीतर एक सिंगल रन है।
जब कोई टास्क पूरा होता है, तो केवल टर्न ही समाप्त होना चाहिए। सेशन सक्रिय (active) रहना चाहिए।
टूटा हुआ फ्लो इस प्रकार है: यूज़र टास्क मांगता है -> रनटाइम सेशन शुरू होता है -> टास्क पूरा होता है -> बातचीत सक्रिय सेशन को क्लियर कर देती है -> अगला फॉलो-अप एक बिल्कुल नया सेशन शुरू करता है।
इससे इस तरह के छोटे फॉलो-अप्स टूट जाते हैं:
- retry that
- do the same for this file
- explain the error
- continue
यदि सिस्टम तुरंत सेशन को अलग कर देता है, तो आपको सब कुछ फिर से बताना पड़ता है। एजेंट काम तो करता है, लेकिन बातचीत बनावटी लगती है।
मैंने मॉडल को स्पष्ट (explicit) बनाकर इसे ठीक किया:
- बातचीत स्थायी (persistent) होती है।
- रनटाइम सेशन डिफ़ॉल्ट रूप से sticky होते हैं।
- पूरे हुए या विफल हुए टास्क केवल वर्तमान टर्न को बंद करते हैं।
- नए सेशन केवल तभी शुरू होते हैं जब यूज़र पूछे या मॉडल बदल जाए।
मैंने टास्क पूरा होने को सेशन की समाप्ति मानना बंद कर दिया। इस छोटे से बदलाव से पूरे प्रोडक्ट का अनुभव बेहतर हो जाता है।
CliGate में, एक नया सेशन केवल तभी शुरू होता है जब:
- अभी तक कोई सेशन न हो।
- यूज़र एक नया सेशन मांगे।
- मॉडल बदलने से पुराना सेशन असंगत (incompatible) हो जाए।
यह इंसानों के सोचने के तरीके से मेल खाता है। एक यूज़र उम्मीद करता है कि एक चैट टैब एक निरंतर चलने वाले थ्रेड की तरह काम करे। Telegram या Feishu जैसे मोबाइल ऐप्स पर यह बहुत महत्वपूर्ण है।
नया लॉजिक सरल है:
- पहला मैसेज एक रनटाइम सेशन बनाता है।
- बाद के मैसेज उसी सेशन का उपयोग करते रहते हैं।
- काम पूरा होने पर थ्रेड खत्म नहीं होता है।
- केवल स्पष्ट कमांड ही नया सेशन शुरू करते हैं।
यह एजेंट को केवल एक कमांड लॉन्चर के बजाय एक सहकर्मी (coworker) जैसा महसूस कराता है।
यदि आप कोडिंग एजेंट बनाते हैं, तो इसे याद रखें: बातचीत (Conversation) एक टिकाऊ इकाई (durable unit) है। रनटाइम सेशन (Runtime session) एक पुन: प्रयोज्य वर्कर (reusable worker) है। टर्न (Turn) वह चीज़ है जो सफलता या विफलता पर समाप्त होती है।
इन तीन परतों को अलग करें। आपके फॉलो-अप्स आखिरकार बातचीत की तरह महसूस होंगे।
स्रोत: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi