এজেন্টদের জন্য একটি নিরাপদ ডেলিভারি পাইপলাইন তৈরি করা
বেশিরভাগ এজেন্ট ডেমো একটি গুরুত্বপূর্ণ প্রশ্ন এড়িয়ে যায়। কীভাবে আপনি একটি স্বায়ত্তশাসিত (autonomous) সিস্টেমকে আপনার পক্ষ থেকে কোনো কিছু পাঠানোর অনুমতি দেবেন, যাতে কোনো কাজ ডাবল-সেন্ড (double-sending) না হয় বা অননুমোদিত কোনো কাজ চলে না যায়?
ডাবল-সেন্ড কোনো বিরল ত্রুটি নয়। যখন কোনো ওয়ার্কার (worker) কাজ চলাকালীন ক্র্যাশ করে, তখন একটি সাধারণ কিউ (queue)-এর ডিফল্ট আচরণই হলো এটি। একটি ওয়ার্কার একটি মেসেজ পাঠায় এবং তারপর সফলভাবে রেকর্ড করার আগেই ক্র্যাশ করে। সিস্টেম মনে করে কাজটি ব্যর্থ হয়েছে এবং নতুন একটি ওয়ার্কারকে পুনরায় চেষ্টা করতে বলে। গ্রাহক দুটি ইমেল পান এবং আপনি একটি সাপোর্ট টিকিট পান।
আপনি প্রতিটি ক্র্যাশ প্রতিরোধ করতে পারবেন না। কাজ সম্পন্ন করা এবং তা রেকর্ড করার মধ্যবর্তী সময়ের ক্র্যাশের কথা মাথায় রেখেই আপনাকে ডিজাইন করতে হবে।
বাস্তব প্রভাব ফেলতে পারে এমন যেকোনো এজেন্ট আউটপুটের জন্য এই ছয়-ধাপের পাইপলাইনটি ব্যবহার করুন:
• Produce: এজেন্ট সম্পূর্ণ আর্টিফ্যাক্টটি (artifact) তৈরি করে। এটি এখনও কিছু পাঠায় না। • Persist: প্রথমে ইনটেন্ট (intent) এবং আর্টিফ্যাক্টটি স্থায়ী স্টোরেজে (durable storage) লিখে রাখুন। • Score: আউটপুটের সাথে একটি কনফিডেন্স স্কোর (confidence score) যুক্ত করুন। • Review: কম কনফিডেন্স সম্পন্ন আইটেমগুলো মানুষের কাছে পাঠান। • Approve: একটি fail-closed গেট ব্যবহার করুন। মানুষ স্পষ্টভাবে অনুমতি না দেওয়া পর্যন্ত সিস্টেম সমস্ত পাঠানো ব্লক করে রাখবে। • Send and Attest: একটি লিজের (lease) অধীনে আইটেমটি পাঠান, তারপর একটি প্রমাণের রসিদ (evidence receipt) লিখে রাখুন।
প্রতিটি ধাপ অবশ্যই একটি আলাদা স্থায়ী ট্রানজিশন (durable transition) হতে হবে। স্টেট (state) আপনার ডাটাবেসে থাকবে, কোনো ওয়ার্কারের মেমরিতে নয়।
ডুপ্লিকেট রোধ করতে row-level leasing ব্যবহার করুন। Postgres-এ SELECT ... FOR UPDATE SKIP LOCKED ব্যবহার করুন। এটি নিশ্চিত করে যে এক সময়ে কেবল একজন ওয়ার্কার একটি টাস্কের মালিক হবে।
সবচেয়ে গুরুত্বপূর্ণ নিয়ম হলো আপনি কীভাবে মেয়াদোত্তীর্ণ লিজগুলো (expired leases) হ্যান্ডেল করেন। যদি কোনো ওয়ার্কার এক্সটার্নাল মেসেজ পাঠানোর সময় ক্র্যাশ করে, তবে সেটি স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা (retry) করবেন না। পরিবর্তে, কাজটি মানুষের পর্যালোচনার জন্য আটকে রাখুন। একটি দৃশ্যমান আটকে থাকা কাজ (stuck task) একটি অদৃশ্য ডাবল-সেন্ডের চেয়ে অনেক ভালো।
আপনাকে fail-closed নীতিগুলোও অনুসরণ করতে হবে:
- ডিফল্টভাবে সেন্ডিং বন্ধ থাকবে। একটি মাত্র ফ্ল্যাগ (flag) সমস্ত আউটবাউন্ড ট্রাফিক চালু করতে পারবে।
- পরিচয় যাচাই করা হবে। পাঠানোর মুহূর্তে সিস্টেমকে প্রেরকের ঠিকানা এবং ট্রান্সপোর্ট সিকিউরিটি যাচাই করতে হবে।
- প্রতিটি কাজের একটি রসিদ থাকবে। কোনো রেকর্ডহীন পাঠানো মানেই সেটি একটি ব্যর্থতা।
অভ্যন্তরীণ লগ (internal logs)-এর মতো কম গুরুত্বপূর্ণ কাজের জন্য এটি তৈরি করবেন না। এটি তখন ব্যবহার করুন যখন একটি ভুল অর্থ খরচ করে, আইনি সমস্যা তৈরি করে বা একটি সাপোর্ট টিকিটের প্রয়োজন হয়।
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
