কেন LLM কলের সময় আপনার DB কানেকশন ধরে রাখা উচিত নয়

AI ল্যাটেন্সি মানে শুধু মডেলটি চিন্তা করার জন্য ব্যয় করা সময় নয়। এতে আপনি কীভাবে ডাটাবেস কানেকশন পরিচালনা করছেন তাও অন্তর্ভুক্ত।

একটি LLM বা এমবেডিং (embedding) API-এর জন্য অপেক্ষা করার সময় DB কানেকশন ধরে রাখলে আপনার কানেকশন পুল শেষ হয়ে যেতে পারে। ধীরগতির এক্সটার্নাল কলগুলো সেশনগুলোকে প্রয়োজনের চেয়ে অনেক বেশি সময় ধরে খোলা রাখে।

আমি তাদের সমাধান দেখার জন্য Honcho রিপোজিটরি (repo) যাচাই করেছি। তারা একটি দীর্ঘস্থায়ী সেশনের পরিবর্তে ছোট এবং নির্দিষ্ট কাজের জন্য আলাদা সেশন ব্যবহার শুরু করেছে।

পুরানো পদ্ধতি

  • DB সেশন খোলা
  • ইউজারের সেটিংস পড়া
  • LLM কল করা (ধীরগতি)
  • এমবেডিং API কল করা (ধীরগতি)
  • ফলাফল সেভ করা
  • DB সেশন বন্ধ করা

নতুন পদ্ধতি

  • প্রি-ফ্লাইট চেকের জন্য DB সেশন খোলা
  • প্রয়োজনীয় ভ্যালুগুলো ভেরিয়েবলে নিয়ে আসা
  • DB সেশন বন্ধ করা
  • LLM এবং এমবেডিং API কল করা (কোনো DB কানেকশন খোলা রাখা হচ্ছে না)
  • ফলাফল সেভ করার জন্য একটি নতুন, ছোট DB সেশন খোলা
  • DB সেশন বন্ধ করা

এর লক্ষ্য ডাটাবেস ত্যাগ করা নয়; বরং নেটওয়ার্কের অপেক্ষার সময় থেকে ট্রানজ্যাকশন কনসিস্টেন্সি (transaction consistency)-কে আলাদা রাখা।

আপনার কানেকশন ম্যানেজ করার পাঁচটি ধাপ

  1. আপনার কনসিস্টেন্সি বা সামঞ্জস্যের সীমানা নির্ধারণ করুন।
  2. যেকোনো এক্সটার্নাল API কলের আগে প্রয়োজনীয় সমস্ত ভ্যালু ভেরিয়েবলে নিয়ে আসুন।
  3. ডাটাবেস স্কোপ (scope) বন্ধ করুন।
  4. ধীরগতির এক্সটার্নাল কাজগুলো সম্পন্ন করুন।
  5. চূড়ান্ত ফলাফলগুলো স্থায়ী করার জন্য একটি নতুন, ছোট রাইট স্কোপ (write scope) খুলুন।

দ্রষ্টব্য: আপনি যদি pgvector ব্যবহার করেন, তবে সার্চটি ডাটাবেসের ভেতরেই চলে, তাই সেই অপারেশনের সময় আপনাকে অবশ্যই সেশনটি খোলা রাখতে হবে।

সেশনের আয়ু কমানো স্কেলিং উন্নত করে, তবে আপনার ORM-এ detached-object এরর সম্পর্কে সতর্ক থাকুন এবং ট্রানজ্যাকশন স্ন্যাপশটগুলোর (transaction snapshots) মধ্যে ডেটা সামঞ্জস্যপূর্ণ থাকছে কি না তা যাচাই করুন।

Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg

Optional learning community: https://t.me/GyaanSetuAi