𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗙𝗶𝗻𝗶𝘀𝗵𝗲𝗱 𝗧𝗵𝗲 𝗧𝗮𝘀𝗸. 𝗪𝗵𝘆 𝗗𝗶𝗱 𝗧𝗵𝗲 𝗧𝗵𝗿𝗲𝗮𝗱 𝗗𝗶𝗲?
একটি কোডিং এজেন্টের সবচেয়ে খারাপ বাগ (bug) হলো ক্র্যাশ হওয়া নয়।
এটি তখন ঘটে যখন প্রথম কাজটি সফল হয় কিন্তু পরবর্তী মেসেজটি দেখে মনে হয় যেন এজেন্টের স্মৃতিভ্রম হয়েছে। আপনি একটি কাজের জন্য অনুরোধ করলেন। এজেন্ট সেটি শেষ করল। তারপর আপনি বললেন: "বাটনটি সবুজ করে দাও।"
আপনার কাছে এটি একই কথোপকথন। কিন্তু সিস্টেমের কাছে, একটি সম্পন্ন হওয়া কাজ মানেই প্রায়শই সেশন শেষ হয়ে যাওয়া। সিস্টেমটি একদম শুরু থেকে শুরু করে।
CliGate তৈরির সময় আমি বুঝতে পারলাম যে আমি তিনটি ভিন্ন লেয়ার (layer) গুলিয়ে ফেলেছিলাম:
- চ্যাট কথোপকথন (chat conversation)
- রানটাইম সেশন (runtime session)
- বর্তমান এক্সিকিউশন টার্ন (current execution turn)
এগুলো এক জিনিস নয়।
একটি কথোপকথন হলো কথা বলার জন্য একটি দীর্ঘস্থায়ী জায়গা। একটি রানটাইম সেশন হলো সেই কথোপকথনের জন্য একটি ওয়ার্কিং থ্রেড। একটি টার্ন হলো সেই সেশনের ভেতরে একটি একক রান।
যখন একটি কাজ সম্পন্ন হয়, তখন শুধুমাত্র টার্নটি শেষ হওয়া উচিত। সেশনটি অবশ্যই সক্রিয় থাকতে হবে।
ত্রুটিপূর্ণ ফ্লো (flow)টি দেখতে এরকম: ব্যবহারকারী একটি কাজের জন্য অনুরোধ করেন -> রানটাইম সেশন শুরু হয় -> কাজ সম্পন্ন হয় -> কথোপকথনটি সক্রিয় সেশনটি মুছে ফেলে -> পরবর্তী ফলো-আপ একটি সম্পূর্ণ নতুন সেশন শুরু করে।
এটি নিচের মতো ছোট ফলো-আপগুলোকে বাধাগ্রস্ত করে:
- retry that
- do the same for this file
- explain the error
- continue
যদি সিস্টেমটি সাথে সাথে সেশনটি বিচ্ছিন্ন করে দেয়, তবে আপনাকে সবকিছু আবার বলতে হবে। এজেন্ট কাজ করে ঠিকই, কিন্তু কথোপকথনটি কৃত্রিম মনে হয়।
আমি মডেলটিকে সুনির্দিষ্ট করার মাধ্যমে এটি ঠিক করেছি:
- কথোপকথনগুলো স্থায়ী (persistent)।
- রানটাইম সেশনগুলো ডিফল্টভাবে স্টিকি (sticky)।
- সম্পন্ন বা ব্যর্থ হওয়া কাজগুলো শুধুমাত্র বর্তমান টার্নটি বন্ধ করে।
- নতুন সেশন শুধুমাত্র তখনই শুরু হয় যদি ব্যবহারকারী অনুরোধ করেন বা মডেল পরিবর্তন করা হয়।
আমি কাজ সম্পন্ন হওয়াকে সেশনের মৃত্যু হিসেবে দেখা বন্ধ করেছি। এই সামান্য পরিবর্তনটি পুরো প্রোডাক্টের অনুভূতি উন্নত করে।
CliGate-এ, একটি নতুন সেশন শুধুমাত্র তখনই শুরু হয় যদি:
- এখনও কোনো সেশন না থাকে।
- ব্যবহারকারী একটি নতুন সেশনের জন্য অনুরোধ করেন।
- মডেল পরিবর্তন পুরনো সেশনটিকে অসামঞ্জস্যপূর্ণ (incompatible) করে তোলে।
এটি মানুষের চিন্তাভাবনার সাথে মিলে যায়। একজন ব্যবহারকারী আশা করেন একটি চ্যাট ট্যাব একটি চলমান থ্রেডের মতো কাজ করবে। Telegram বা Feishu-এর মতো মোবাইল অ্যাপের ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ।
নতুন লজিকটি সহজ:
- প্রথম মেসেজটি একটি রানটাইম সেশন তৈরি করে।
- পরবর্তী মেসেজগুলো সেই সেশনটি ব্যবহার করতে থাকে।
- কাজ সম্পন্ন হওয়া মানে থ্রেডটি হারিয়ে যাওয়া নয়।
- শুধুমাত্র সুনির্দিষ্ট কমান্ডগুলো একটি নতুন সেশন শুরু করে।
এটি এজেন্টকে একটি কমান্ড লঞ্চারের পরিবর্তে একজন সহকর্মীর মতো করে তোলে।
আপনি যদি কোডিং এজেন্ট তৈরি করেন, তবে এটি মনে রাখবেন: কথোপকথন হলো একটি টেকসই ইউনিট (durable unit)। রানটাইম সেশন হলো একটি পুনরায় ব্যবহারযোগ্য কর্মী (reusable worker)। টার্ন হলো সেই বিষয়টি যা সাফল্য বা ব্যর্থতার সাথে শেষ হয়ে যায়।
এই তিনটি স্তর আলাদা করুন। আপনার ফলো-আপগুলো অবশেষে কথোপকথনের মতো মনে হবে।
উৎস: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi