AI এজেন্টদের জন্য PRG প্যাটার্ন
AI এজেন্টরা একটি পুরনো সমস্যার সম্মুখীন হচ্ছে। এটি ঠিক সেই একই বাগ (bug) যা ৯০-এর দশকে ওয়েব ফর্মগুলোকে অকেজো করে দিয়েছিল।
পুরনো ওয়েব যুগে, একজন ব্যবহারকারী একটি ফর্ম সাবমিট করতেন। যদি তিনি রিফ্রেশ বাটনে ক্লিক করতেন, তবে ব্রাউজার ডেটাটি পুনরায় সাবমিট করত। এর ফলে দুটি অর্ডার, দুটি চার্জ বা দুটি ইমেল চলে আসত।
এর সমাধান ছিল Post/Redirect/Get (PRG) প্যাটার্ন।
এর লজিক বা যুক্তিটি সহজ:
- ব্যবহারকারী একটি POST রিকোয়েস্ট পাঠান।
- সার্ভার কাজটি প্রসেস করে।
- সার্ভার একটি নতুন URL-এ 302 Redirect পাঠায়।
- ব্রাউজার একটি GET রিকোয়েস্টের মাধ্যমে সেই রিডাইরেক্ট অনুসরণ করে।
এখন রিফ্রেশ করলে শুধুমাত্র রেজাল্ট পেজটি রিলোড হয়। এটি কাজটি পুনরায় করে না।
AI এজেন্টরা এই বাগটিকে একটি নতুন স্তরে নিয়ে এসেছে।
যখন একটি এজেন্ট কার্ড চার্জ করতে বা কোনো রেকর্ড তৈরি করতে কোনো টুল কল করে, তখন সমস্যা দেখা দেয়। নেটওয়ার্ক ড্রপ হতে পারে, কোনো কন্টেইনার রিস্টার্ট হতে পারে, অথবা রেট লিমিট (rate limit) কার্যকর হতে পারে। এজেন্ট জানে না যে তার শেষ কলটি সফল হয়েছিল কি না। তাই, এটি পুনরায় চেষ্টা (retry) করে।
কোনো সমাধান না থাকলে, এজেন্ট ডুপ্লিকেট অর্ডার তৈরি করে এবং গ্রাহকদের ভুলভাবে চার্জ করে ফেলে, যা তাদের ক্ষুব্ধ করে তোলে।
আপনাকে idempotency key ব্যবহার করে আপনার এজেন্টিক পাইপলাইনে (agentic pipelines) PRG প্যাটার্ন প্রয়োগ করতে হবে।
idempotency key হলো আপনার রিডাইরেক্ট। এটি কাজ (action) এবং ফলাফলকে (result) আলাদা করে।
এটি কীভাবে প্রয়োগ করবেন:
- প্রতিটি মিউটেটিং (mutating) টুলকে অবশ্যই একটি
idempotency keyগ্রহণ করতে হবে। - প্রথম প্রচেষ্টার আগেই কী (key) তৈরি করুন।
- কী-টি টাইমস্ট্যাম্প থেকে নয়, বরং ব্যবহারকারীর উদ্দেশ্য (user intent) থেকে তৈরি করুন।
- সার্ভারকে অবশ্যই পরীক্ষা করতে হবে যে সে আগে এই কী-টি দেখেছে কি না।
- যদি কী-টি আগে থেকেই থাকে, তবে কাজটি পুনরায় না চালিয়ে সংরক্ষিত ফলাফলটি (stored result) রিটার্ন করুন।
দীর্ঘ সময়ের কাজের জন্য, শুধুমাত্র একটি কী যথেষ্ট নয়। আপনার প্রয়োজন চেকপয়েন্টিং (checkpointing)।
চেকপয়েন্টিং প্রতিটি ধাপে স্টেট (state) সংরক্ষণ করে। যদি একটি ২০ মিনিটের কাজের মাঝপথে এজেন্ট ক্র্যাশ করে, তবে এটি যেখান থেকে থেমেছিল সেখান থেকেই আবার শুরু করতে পারে। এটি শুরু থেকে শুরু করে না।
আপনি যদি কেবল একটি কাজ করতে পারেন, তবে প্রতিটি টুল কল যেন দুবার চালানো নিরাপদ হয় তা নিশ্চিত করুন।
আপনার এজেন্টগুলোকে এই পাঁচটি পরীক্ষা দিয়ে তৈরি করুন:
- প্রতিটি টুল কি একটি
idempotency keyগ্রহণ করে? - কী-টি কি সময়ের পরিবর্তে উদ্দেশ্যের ওপর ভিত্তি করে তৈরি?
- প্রতিটি রিট্রাই-তে কি একই কী পুনরায় ব্যবহার করা হচ্ছে?
- ডুপ্লিকেট কী-এর জন্য সার্ভার কি সংরক্ষিত ফলাফল রিটার্ন করে?
- দীর্ঘ সময়ের কাজের জন্য কি মধ্যবর্তী ধাপগুলো সংরক্ষণ করা হয়?
প্যাটার্নটি একই। শুধু স্তরটি পরিবর্তিত হয়েছে।
