একটি Retrieval-Augmented Generation (RAG) পাইপলাইনকে Jupyter notebook থেকে একটি লাইভ সার্ভিসে নিয়ে আসার চার মাস পর, লেখক পাঁচটি সুনির্দিষ্ট সিদ্ধান্তের কথা উল্লেখ করেছেন যা একটি সাধারণ ডেমোকে এমন একটি সিস্টেমে পরিণত করেছে যা ব্যবহারকারীরা প্রকৃতপক্ষে নির্ভর করতে পারে। এই পার্থক্যের প্রতিফলন দেখা যায় সংখ্যায়: টেক্সট স্প্লিট করার পদ্ধতিতে একটি সাধারণ পরিবর্তন রিট্রিভাল হিট রেট ৬১% থেকে বাড়িয়ে ৮৩%-এ নিয়ে গেছে, এবং ২০০টি রিয়েল কুয়েরি সম্বলিত একটি ছোট ইভ্যালুয়েশন সেট এখন গ্রাহকদের কাছে পৌঁছানোর আগেই বেশিরভাগ রিগ্রেশন শনাক্ত করতে পারে।

কেন এটি গুরুত্বপূর্ণ

RAG ডেমো দেখতে বেশ চিত্তাকর্ষক মনে হয় – এগুলো কয়েক সেকেন্ডের মধ্যে একটি অনুচ্ছেদ খুঁজে বের করে এবং একটি গ্রহণযোগ্য উত্তর তৈরি করে। কিন্তু প্রোডাকশনে একই পদ্ধতি প্রায়ই পুরনো তথ্য, মিস করা এরর কোড বা অসম্পূর্ণ বাক্য প্রদান করে, যা ব্যবহারকারীর আস্থা কমিয়ে দেয়। এখানে মূল সমস্যাটি সাধারণত ল্যাঙ্গুয়েজ মডেলের নয়; বরং সমস্যাটি হলো কন্টেন্ট কীভাবে ইনজেস্ট (ingest), ইনডেক্স এবং সার্ভ করা হচ্ছে। পাইপলাইনটি সঠিকভাবে তৈরি করা একটি ভ্যালু-অ্যাডিশিং প্রোডাক্ট এবং একটি বোঝা (liability) হওয়ার মধ্যে পার্থক্য গড়ে দিতে পারে।

1. ফিক্সড-সাইজ চাঙ্ক ব্যবহার করা বন্ধ করুন

অনেক প্রোটোটাইপ প্রতিটি ডকুমেন্টকে ৫১২-টোকেন ব্লকে ভাগ করে ফেলে। এটি ছোট টেক্সটের জন্য কাজ করলেও টেকনিক্যাল ম্যানুয়াল, সাপোর্ট থ্রেড এবং কোড স্নিপেটের ক্ষেত্রে এটি তথ্যকে এলোমেলো করে দেয়। বাক্যগুলো ভেঙে যায়, হেডিংগুলো হারিয়ে যায় এবং রিট্রিভাল ইঞ্জিন ব্যবহারকারীর প্রত্যাশিত কনটেক্সট খুঁজে পায় না।

স্ট্রাকচার-অ্যাওয়ার চাঙ্কিং (structure-aware chunking)-এ সুইচ করুন—হেডিং, কথোপকথনের সীমানা বা কোড ফেন্স (code fences) অনুযায়ী ভাগ করুন যাতে সিম্যান্টিক ইউনিটগুলো সংরক্ষিত থাকে। লেখকের সিস্টেমে, শুধুমাত্র এই পরিবর্তনটি প্রাসঙ্গিক অনুচ্ছেদ খুঁজে পাওয়ার হার ৬১% থেকে বাড়িয়ে ৮৩%-এ নিয়ে গেছে। এই উন্নতিটি ডেটা-ফরম্যাট পরিবর্তনের মাধ্যমে এসেছে; মূল মডেলটি একই রয়েছে।

2. হাইব্রিড সার্চ ব্যবহার করুন

পিওর ভেক্টর সার্চ (embedding-based similarity) একই অর্থের অনুচ্ছেদ খুঁজে পেতে দক্ষ, কিন্তু এটি এরর কোড, ভার্সন নম্বর বা বিশেষ পরিভাষার মতো সঠিক আইডেন্টিফায়ার খুঁজে পেতে হিমশিম খায়। একজন ব্যবহারকারী যদি “ERR-XXXX”-এর মতো কোনো এরর কোড খোঁজেন, তবে তিনি হয়তো একটি সিম্যান্টিক্যালি কাছাকাছি অনুচ্ছেদ পাবেন যাতে কোডটি একেবারেই নেই।

হাইব্রিড সার্চ একটি ডেন্স ভেক্টর ইনডেক্সের সাথে প্রথাগত BM25 ইনডেক্সের (term-frequency ভিত্তিক) সমন্বয় ঘটায়। এই দুটি স্কোরকে ওয়েট (weight) করার মাধ্যমে সিস্টেম এমন আইটেম খুঁজে বের করে যা সিম্যান্টিক্যালি কাছাকাছি এবং ব্যবহারকারী যা টাইপ করেছেন সেই সঠিক শব্দগুলোও এতে রয়েছে। প্রোডাকশনের জন্য হাইব্রিড সার্চ একটি মৌলিক প্রয়োজনীয়তা, এটি কেবল একটি বাড়তি সুবিধা নয়।

3. পুরনো ডেটা (Stale data) হ্যান্ডেল করুন

পুরনো প্রাইসিং টেবিল, পলিসি ডকুমেন্ট বা ফার্মওয়্যার রিলিজ নোট দ্রুত বিশ্বাসযোগ্যতা নষ্ট করে দেয়। ইনডেক্সকে সতেজ রাখতে তিনটি ব্যবহারিক পদক্ষেপ রয়েছে:

  • প্রতিটি ডকুমেন্টকে একটি ভার্সন স্ট্যাম্প বা টাইমস্ট্যাম্প দিয়ে ট্যাগ করুন।
  • স্কোরিংয়ের সময় রিসেন্সি বুস্ট (recency boost) প্রয়োগ করুন যাতে নতুন আইটেমগুলো পুরনো কপিগুলোর চেয়ে উপরে থাকে।
  • সোর্স সিস্টেম থেকে পরিবর্তনগুলো অন্তর্ভুক্ত করতে প্রতি রাতে ইনক্রিমেন্টাল রি-ইনডেক্সিং (incremental re-indexing) চালান।

এই সুরক্ষা ব্যবস্থাগুলো সিস্টেমকে গত কোয়ার্টারের কার্যকর হওয়া কোনো দাম বা ইতিমধ্যে বাতিল হয়ে যাওয়া কোনো পলিসি প্রদান করা থেকে বিরত রাখে।

4. মডেল আপগ্রেড করার পরিবর্তে রির্যাঙ্ক (Rerank) করুন

এমবেডিং মডেল আপগ্রেড করলে গুণগত মান খুব সামান্য বৃদ্ধি পায়, যেখানে একটি ক্রস-এনকোডার রির্যাঙ্কার (cross-encoder reranker) যোগ করলে অনেক কম খরচে অনেক বড় উন্নতি পাওয়া যায়।

প্রোডাকশন ফ্লো হাইব্রিড সার্চ ব্যবহার করে ২০টি সস্তা ক্যান্ডিডেট খুঁজে বের করে, তারপর সেরা পাঁচটি নির্বাচন করার জন্য সেগুলোকে রির্যাঙ্কারের মাধ্যমে পাস করে। এই দ্বি-স্তরীয় পদ্ধতিটি একটি পূর্ণাঙ্গ মডেল আপগ্রেডের তুলনায় অনেক কম খরচে গুণগত মানের বড় লাফ দেয়।

5. একটি রিয়েল ইভ্যালুয়েশন সেট তৈরি করুন

আপনি যা পরিমাপ করতে পারেন না, তা উন্নত করতে পারবেন না। লেখক ২০০টি প্রকৃত ব্যবহারকারীর কুয়েরি সম্বলিত একটি টেস্ট স্যুট তৈরি করেছেন, যার প্রতিটি একটি বিশেষজ্ঞ দ্বারা তৈরি উত্তরের সাথে জোড়া লাগানো। প্রতিটি কোড পরিবর্তন এই টেস্ট স্যুটের মাধ্যমে পরীক্ষা করা হয়; যেকোনো রিগ্রেশন ডেপ্লয়মেন্টের আগেই ধরা পড়ে।

যখন কোনো ব্যবহারকারী একটি ভুল উত্তরের কথা রিপোর্ট করেন, তখন কুয়েরিটি অবিলম্বে ইভ্যালুয়েশন সেটে যোগ করুন, যা বাস্তব জগতের ব্যর্থতাগুলোকে ভবিষ্যতের সুরক্ষা ব্যবস্থায় রূপান্তরিত করে। প্রতিটি জেনারেট করা উত্তরের ক্রমাগত লগিং ইভ্যালুয়েশন লুপকে সচল রাখে, যা সিস্টেমটিকে প্রকৃত ব্যবহারের সাথে সামঞ্জস্যপূর্ণ রাখে।

প্র্যাকটিক্যাল প্রোডাকশন পাইপলাইন

  • Ingest: স্ট্রাকচার-অ্যাওয়ার চাঙ্কিং হেডিং, কোড ব্লক এবং কথোপকথনের ধাপগুলো বজায় রাখে।
  • Index: ডেন্স এমবেডিং এবং BM25 টার্ম স্ট্যাটিস্টিকস উভয়ই সংরক্ষণ করে।
  • Retrieve: হাইব্রিড সার্চ সিম্যান্টিক সিমিলারিটি এবং সঠিক শব্দ মিলের ভারসাম্য বজায় রেখে ২০টি ক্যান্ডিডেট প্রদান করে।
  • Rerank: একটি ক্রস-এনকোডার তালিকাটিকে সবচেয়ে সম্ভাবনাময় পাঁচটি অনুচ্ছেদে সীমাবদ্ধ করে।
  • Generate: LLM চূড়ান্ত উত্তর তৈরির জন্য এই সেরা চাঙ্কগুলো এবং তাদের মেটাডেটা গ্রহণ করে।
  • Evaluate: প্রতিটি রেসপন্স লগ করা হয়; ব্যর্থতাগুলো ২০০-কুয়েরি টেস্ট সেটে পুনরায় ইনপুট হিসেবে দেওয়া হয়।

ঝুঁকি এবং ভারসাম্য (Stakes and trade-offs)

একটি সুবিন্যস্ত পাইপলাইন হ্যালুসিনেশন কমায়, উত্তরের প্রাসঙ্গিকতা উন্নত করে এবং অতিরিক্ত-প্রোভিশন করা মডেলের খরচ হ্রাস করে। এর ফলে ব্যবহারকারীর সন্তুষ্টি বৃদ্ধি পায় এবং সাপোর্ট ওভারহেড কমে। এই ধাপগুলো উপেক্ষা করলে একটি ভঙ্গুর পরিষেবা তৈরি হয় যা ব্র্যান্ডের প্রতি আস্থা কমিয়ে দেয় এবং বারবার জরুরি সমস্যা মোকাবিলা করার মতো ব্যয়বহুল পরিস্থিতির সৃষ্টি করে।

পরবর্তীতে যা লক্ষ্য রাখা প্রয়োজন

ওপেন-সোর্স এমবেডিং এবং ভেক্টর ডেটাবেসগুলো আরও উন্নত হওয়ার সাথে সাথে, “dense” এবং “sparse” রিট্রিভালের মধ্যকার পার্থক্য অস্পষ্ট হয়ে আসবে, তবে সিম্যান্টিক (semantic) এবং এক্সাক্ট (exact) ম্যাচিংয়ের সমন্বয় করার মূল নীতিটি অপরিবর্তিত থাকবে।

মূল কথা: একটি RAG সিস্টেমে ল্যাঙ্গুয়েজ মডেল খুব কমই প্রধান বাধা (choke point) হয়ে দাঁড়ায়। আসল কাজ হলো আপনি কীভাবে মূল কন্টেন্টকে স্লাইস (slice), ইনডেক্স (index) এবং সারফেস (surface) করছেন তার ওপর। এই সিদ্ধান্তগুলো সঠিকভাবে নিতে পারলে একটি চমকপ্রদ ডেমো একটি নির্ভরযোগ্য পণ্যে রূপান্তরিত হয়।