আমি কীভাবে একটি তিন-স্তর বিশিষ্ট কন্টেন্ট কোয়ালিটি ল্যাডার তৈরি করেছি

প্রোগ্রাম্যাটিক ওয়েবসাইট স্কেল করা কঠিন। আপনি যদি আপনার কন্টেন্ট লেখার জন্য শুধুমাত্র AI-এর ওপর নির্ভর করেন, তবে API ডাউন হয়ে গেলে আপনার সাইট অচল হয়ে পড়বে।

আমি তিনটি ডিরেক্টরি সাইট চালু করেছি: Top AI Tools, Find Games Like, এবং Open Alternative To। আমি একটি তিন-স্তর বিশিষ্ট কন্টেন্ট ল্যাডার ব্যবহার করি যাতে একটি সক্রিয় AI কানেকশন না থাকলেও তারা সবসময় তথ্য প্রদর্শন করতে পারে।

সিস্টেমটি ডাটাবেসে model_used নামক একটি সিঙ্গেল কলাম ব্যবহার করে। এটি কোয়ালিটির তিনটি স্তর ট্র্যাক করে:

  • seeded-from-json: একটি ফাইল থেকে আসা মৌলিক ডাটা। এটি স্ট্রাকচার্ড কিন্তু খুব সামান্য তথ্যসমৃদ্ধ।
  • fallback-template: AI ব্যর্থ হলে বা API কী না থাকলে ব্যবহৃত একটি স্ট্যান্ডার্ড টেমপ্লেট। এটি প্রযুক্তিগতভাবে সঠিক কিন্তু এতে নিজস্বতা বা প্রাণবন্ততা নেই।
  • claude-haiku-4-5: কাঙ্ক্ষিত অবস্থা। এটি উচ্চমানের এডিটোরিয়াল সামারি এবং সূক্ষ্ম বিবরণ প্রদান করে।

আপগ্রেডগুলো পরিচালনা করার জন্য আমি একটি নির্দিষ্ট SQL কুয়েরি ব্যবহার করি। স্ক্রিপ্টটি দুটি জিনিস খোঁজে:

১. নতুন এন্ট্রি যেগুলোতে এখনও কোনো কন্টেন্ট নেই। ২. বিদ্যমান এন্ট্রি যেগুলোতে শুধুমাত্র নিম্নমানের seeded বা fallback কন্টেন্ট রয়েছে।

স্ক্রিপ্টটি এগুলোকে জনপ্রিয়তা অনুযায়ী সাজায়। এটি সবচেয়ে বেশি ভিজিট করা পেজগুলোকে আগে আপগ্রেড করে। এটি নিশ্চিত করে যে আপনার সর্বোচ্চ ট্রাফিক পাওয়া পেজগুলো দ্রুত সেরা কন্টেন্ট পায়।

প্রক্রিয়াটি সম্পূর্ণ স্বয়ংক্রিয় এবং idempotent। আমি একটি upsert প্যাটার্ন ব্যবহার করি। যদি একটি আপগ্রেড সফল হয়, তবে ডাটাবেস পুরনো fallback কন্টেন্টটিকে নতুন AI কন্টেন্ট দিয়ে ওভাররাইট করে দেয়। model_used কলামটি নিজেই আপডেট হয়ে যায়।

আমি Anthropic prompt caching-ও ব্যবহার করি। এটি প্রচুর টাকা এবং টোকেন সাশ্রয় করে। যেহেতু প্রতিটি এন্ট্রির জন্য আমার সিস্টেম প্রম্পট একই থাকে, তাই প্রথম কলটি ক্যাশ (cache) প্রস্তুত করে দেয়। একটি ব্যাচের পরবর্তী ৯৯টি কল সেই ক্যাশ থেকে অনেক কম খরচে সম্পন্ন হয়।

মূল আর্কিটেকচারাল সিদ্ধান্তসমূহ:

  • Error handling: যদি Claude ব্যর্থ হয়, সিস্টেম ক্র্যাশ করে না। এটি কেবল fallback টেমপ্লেটটি লিখে রাখে এবং পরবর্তী আইটেমে চলে যায়।
  • SEO safety: যদি কোনো পেজে মোটেও দরকারী কন্টেন্ট না থাকে, তবে আমি noindex ট্যাগ ব্যবহার করি। এটি গুগলকে খালি পেজ ইনডেক্স করা থেকে বিরত রাখে।
  • Static builds: আমি Astro-এর জন্য ডাটাবেসটিকে JSON ফাইল হিসেবে এক্সপোর্ট করি। এর মানে হলো ডাটাবেস বা AI API ডাউন থাকলেও আমার সাইট অনলাইনে থাকে।

এই সেটআপটি আমাকে সাইটের স্থিতিশীলতা ঝুঁকির মুখে না ফেলে দ্রুত কাজ করার সুযোগ দেয়।

উৎস: https://dev.to/morinaga/how-i-built-a-three-tier-content-quality-ladder-for-programmatic-directory-etl-483