𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗙𝗶𝗻𝗶𝘀𝗵𝗲𝗱 𝗧𝗵𝗲 𝗧𝗮𝘀𝗸. 𝗪𝗵𝘆 𝗗𝗶𝗱 𝗧𝗵𝗲 𝗧𝗵𝗿𝗲𝗮𝗱 𝗗𝗶𝗲?
ഒരു കോഡിംഗ് ഏജന്റിലെ ഏറ്റവും മോശം ബഗ് ഒരു ക്രാഷ് (crash) അല്ല.
ആദ്യത്തെ ടാസ്ക് വിജയിക്കുമ്പോഴും അടുത്ത മെസ്സേജ് അയക്കുമ്പോൾ ഏജന്റിന് എല്ലാം മറന്നുപോയതുപോലെ തോന്നുന്നതാണ് ഏറ്റവും വലിയ പ്രശ്നം. നിങ്ങൾ ഒരു ടാസ്ക് ആവശ്യപ്പെടുന്നു. ഏജന്റ് അത് പൂർത്തിയാക്കുന്നു. തുടർന്ന് നിങ്ങൾ പറയുന്നു: "ബട്ടൺ പച്ച നിറമാക്കൂ."
നിങ്ങൾക്ക് ഇത് ഒരേ സംഭാഷണമാണ്. എന്നാൽ സിസ്റ്റത്തെ സംബന്ധിച്ചിടത്തോളം, ഒരു ടാസ്ക് പൂർത്തിയാകുക എന്നാൽ സെഷൻ (session) അവസാനിച്ചു എന്നാണ് അർത്ഥം. സിസ്റ്റം വീണ്ടും പൂജ്യത്തിൽ നിന്ന് തുടങ്ങുന്നു.
CliGate നിർമ്മിക്കുന്നതിനിടെ, ഞാൻ മൂന്ന് വ്യത്യസ്ത തലങ്ങളെ (layers) തമ്മിൽ കൂട്ടിക്കലർത്തി എന്ന് ഞാൻ തിരിച്ചറിഞ്ഞു:
- ചാറ്റ് സംഭാഷണം (The chat conversation)
- റൺടൈം സെഷൻ (The runtime session)
- നിലവിലെ എക്സിക്യൂഷൻ ടേൺ (The current execution turn)
ഇവ ഒന്നുപോലെയല്ല.
ഒരു സംഭാഷണം എന്നത് സംസാരിക്കാനായി നിലനിൽക്കുന്ന ഒരു ഇടമാണ്. ഒരു റൺടൈം സെഷൻ എന്നത് ആ സംഭാഷണത്തിനായുള്ള വർക്കിംഗ് ത്രെഡ് (working thread) ആണ്. ഒരു ടേൺ എന്നത് ആ സെഷനുള്ളിലെ ഒരു ഒറ്റപ്പെട്ട റൺ (run) ആണ്.
ഒരു ടാസ്ക് പൂർത്തിയാകുമ്പോൾ, ആ ടേൺ മാത്രമേ അവസാനിക്കാവൂ. സെഷൻ സജീവമായി തുടരണം.
തകരാറുള്ള പ്രക്രിയ ഇപ്രകാരമാണ്: യൂസർ ഒരു ടാസ്ക് ആവശ്യപ്പെടുന്നു -> റൺടൈം സെഷൻ ആരംഭിക്കുന്നു -> ടാസ്ക് പൂർത്തിയാകുന്നു -> സംഭാഷണം സജീവമായ സെഷനെ ക്ലിയർ ചെയ്യുന്നു -> അടുത്ത ഫോളോ-അപ്പ് ഒരു പുതിയ സെഷൻ ആരംഭിക്കുന്നു.
ഇത് താഴെ പറയുന്ന ചെറിയ ഫോളോ-അപ്പുകളെ തടസ്സപ്പെടുത്തുന്നു:
- അത് വീണ്ടും ചെയ്യുക (retry that)
- ഈ ഫയലിനും അതുപോലെ ചെയ്യുക (do the same for this file)
- പിശക് വിശദീകരിക്കുക (explain the error)
- തുടരുക (continue)
സിസ്റ്റം ഉടൻ തന്നെ സെഷൻ വിച്ഛേദിക്കുകയാണെങ്കിൽ, നിങ്ങൾ എല്ലാം വീണ്ടും പറയേണ്ടി വരും. ഏജന്റ് പ്രവർത്തിക്കുന്നുണ്ടെങ്കിലും, സംഭാഷണം സ്വാഭാവികമായി തോന്നില്ല.
മോഡലിനെ കൂടുതൽ വ്യക്തമാക്കിക്കൊണ്ട് ഞാൻ ഇത് പരിഹരിച്ചു:
- സംഭാഷണങ്ങൾ നിലനിൽക്കുന്നവയാണ് (Conversations are persistent).
- റൺടൈം സെഷനുകൾ ഡിഫോൾട്ട് ആയി നിലനിൽക്കുന്നവയാണ് (Runtime sessions are sticky by default).
- പൂർത്തിയായതോ പരാജയപ്പെട്ടതോ ആയ ടാസ്ക്കുകൾ നിലവിലെ ടേൺ മാത്രമേ അവസാനിപ്പിക്കുന്നുള്ളൂ.
- ഉപയോക്താവ് ആവശ്യപ്പെടുകയോ അല്ലെങ്കിൽ മോഡൽ മാറുകയോ ചെയ്താൽ മാത്രമേ പുതിയ സെഷനുകൾ ആരംഭിക്കൂ.
ടാസ്ക് പൂർത്തിയാകുന്നതിനെ സെഷന്റെ അവസാനമായി കാണുന്നത് ഞാൻ നിർത്തി. ഈ ചെറിയ മാറ്റം ഉൽപ്പന്നത്തിന്റെ മൊത്തത്തിലുള്ള അനുഭവം മെച്ചപ്പെടുത്തുന്നു.
CliGate-ൽ, താഴെ പറയുന്ന സാഹചര്യങ്ങളിൽ മാത്രമേ പുതിയ സെഷൻ ആരംഭിക്കൂ:
- ഇതുവരെ ഒരു സെഷൻ ഇല്ലെങ്കിൽ.
- ഉപയോക്താവ് പുതിയൊരെണ്ണം ആവശ്യപ്പെട്ടാൽ.
- മോഡലിലെ മാറ്റം പഴയ സെഷനെ അനുയോജ്യമല്ലാതാക്കിയാൽ.
ഇത് മനുഷ്യരുടെ ചിന്താരീതിക്ക് അനുയോജ്യമാണ്. ഒരു ചാറ്റ് ടാബ് ഒരു തുടർച്ചയായ സംഭാഷണമായിരിക്കുമെന്ന് ഉപയോക്താവ് പ്രതീക്ഷിക്കുന്നു. Telegram അല്ലെങ്കിൽ Feishu പോലുള്ള മൊബൈൽ ആപ്പുകളിൽ ഇത് വളരെ പ്രധാനമാണ്.
പുതിയ ലോജിക് ലളിതമാണ്:
- ആദ്യത്തെ മെസ്സേജ് ഒരു റൺടൈം സെഷൻ സൃഷ്ടിക്കുന്നു.
- പിന്നീടുള്ള മെസ്സേജുകൾ അതേ സെഷൻ തന്നെ ഉപയോഗിക്കുന്നു.
- ടാസ്ക് പൂർത്തിയാകുന്നത് ത്രെഡിനെ (thread) മുറിക്കില്ല.
- വ്യക്തമായ കമാൻഡുകൾ നൽകിയാൽ മാത്രമേ പുതിയ സെഷൻ ആരംഭിക്കൂ.
ഇത് ഏജന്റിനെ വെറുമൊരു കമാൻഡ് ലോഞ്ചർ എന്നതിലുപരി ഒരു സഹപ്രവർത്തകൻ (coworker) പോലെ തോന്നിപ്പിക്കുന്നു.
നിങ്ങൾ കോഡിംഗ് ഏജന്റുകൾ നിർമ്മിക്കുകയാണെങ്കിൽ, ഇത് ഓർക്കുക: സംഭാഷണമാണ് (conversation) നിലനിൽക്കുന്ന അടിസ്ഥാന ഘടകം. റൺടൈം സെഷൻ (runtime session) എന്നത് വീണ്ടും ഉപയോഗിക്കാവുന്ന ഒരു തൊഴിലാളിയാണ്. വിജയത്തിലോ പരാജയത്തിലോ അവസാനിക്കുന്നത് ടേൺ (turn) ആണ്.
ഈ മൂന്ന് പാളികളെ വേർതിരിക്കുക. നിങ്ങളുടെ ഫോളോ-അപ്പുകൾ ഒടുവിൽ ഒരു സംഭാഷണം പോലെ തോന്നും.
സ്രോതസ്സ്: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
ഓപ്ഷണൽ ലേണിംഗ് കമ്മ്യൂണിറ്റി: https://t.me/GyaanSetuAi