ওপেন-ওয়েট লার্জ ল্যাঙ্গুয়েজ মডেলগুলো ইঞ্জিনিয়ারিং টিমগুলোর এআই (AI) ইনফ্রাস্ট্রাকচার সম্পর্কে চিন্তাভাবনার ধরন বদলে দিয়েছে। ক্লোজড এপিআই (closed API)-এর মতো নয়, যেখানে প্রোভাইডার হার্ডওয়্যার, মডেল ওয়েট (model weights) এবং রিলিজ শিডিউল নিয়ন্ত্রণ করে, ওপেন-ওয়েট মডেলগুলো সেই সিদ্ধান্তগুলো আপনার হাতে ফিরিয়ে দেয়। মডেলটি কোথায় থাকবে, কীভাবে এটি টিউন করা হবে এবং আপনি কখন—যদি কখনো—একটি নতুন চেকপয়েন্টে আপডেট করবেন, তা আপনি নিজেই ঠিক করেন। এই ধরনের মালিকানা অত্যন্ত শক্তিশালী, তবে এর মানে হলো ইন্টিগ্রেশনের পুরো দায়িত্ব আপনার কাঁধেই বর্তায়।

আপনি যদি OpenAI-এর GPT-4 বা Anthropic-এর Claude-এর মতো ম্যানেজড এপিআই (managed API) ব্যবহার করে থাকেন, তবে সুখবর হলো অনেক ওপেন-ওয়েট হোস্টিং প্রোভাইডার এবং ইনফারেন্স ইঞ্জিন (inference engine) এখন একই ভাষা ব্যবহার করে: HTTP POST, JSON payloads এবং bearer token authentication। কাজের পদ্ধতিগুলো পরিচিত মনে হতে পারে, তবে খুঁটিনাটি বিষয়গুলো এখানে অনেক বেশি গুরুত্বপূর্ণ, কারণ নির্ভরযোগ্যতা, খরচ নিয়ন্ত্রণ এবং মডেলের আচরণ নির্ধারণের জন্য প্রোভাইডার নয়, বরং আপনি নিজেই দায়ী।

এপিআই কলের (API Call) মূল বিষয়সমূহ

মূলভাবে, এই ইন্টিগ্রেশনটি একটি POST রিকোয়েস্ট। আপনি Authorization হেডার-এ একটি স্ট্যান্ডার্ড bearer token-এর মাধ্যমে অথেন্টিকেশন করবেন। বডি (body) হলো একটি JSON অবজেক্ট এবং এর সবচেয়ে গুরুত্বপূর্ণ ফিল্ড হলো messages array। সেই অ্যারেটি পরিচিত চ্যাট ফরম্যাট অনুসরণ করে: যেখানে system, user এবং assistant রোলগুলো পর্যায়ক্রমে থাকে।

বাস্তবে একটি মিনিমাল রিকোয়েস্ট স্ট্রাকচার দেখতে কেমন হয় তা নিচে দেওয়া হলো:

  • Authorization হেডারটি Bearer <your-token> হিসেবে সেট করুন।
  • একটি JSON payload পাঠান যাতে অন্তত একটি model আইডেন্টিফায়ার এবং একটি messages লিস্ট থাকে।
  • আপনি যদি ডिटरমিনিস্টিক (deterministic) বা ক্রিয়েটিভ কন্ট্রোল চান, তবে max_tokens এবং temperature অন্তর্ভুক্ত করুন।

রেসপন্সটি একটি choices array এবং একটি usage অবজেক্ট সহ ফিরে আসে। সেই usage ব্লকটি অবহেলা করবেন না। এতে prompt_tokens, completion_tokens এবং টোটাল (total) থাকে। আপনি যদি সেলফ-হোস্টিং করেন, তবে এটি আপনাকে সংকেত দেবে যে কোনো নির্দিষ্ট ইউজার ইন্টারঅ্যাকশন কতটা ব্যয়বহুল। আর আপনি যদি কোনো থার্ড-পার্টি ইনফারেন্স প্রোভাইডারকে পেমেন্ট করেন, তবে এটিই আপনার বিলিং ডেটা। যেভাবেই হোক, প্রথম দিন থেকেই এটি লগ (log) করুন।

স্ট্রিমিং (Streaming) এবং কেন এটি ব্যবহার করবেন

টেক্সটের একটি অংশও আসার আগে তিন সেকেন্ড ধরে লোডিং স্পিনার দেখে থাকা কারোরই ভালো লাগে না। স্ট্রিমিং এই সমস্যার সমাধান করে। মডেলটি পুরো কমপ্লিশন (completion) শেষ করার জন্য অপেক্ষা না করে, সার্ভার টোকেনগুলো জেনারেট হওয়ার সাথে সাথেই পাঠিয়ে দেয়। আপনার ক্লায়েন্ট Server-Sent Events বা chunked HTTP রেসপন্স গ্রহণ করে এবং শব্দগুলো আসার সাথে সাথেই তা রেন্ডার করতে পারে।

আপনার JSON payload-এ stream: true ফ্ল্যাগ সেট করে স্ট্রিমিং চালু করুন। ক্লায়েন্ট সাইডে, আপনি সাধারণত লাইন বাই লাইন স্ট্রীমটি পার্স (parse) করবেন এবং data: প্রিফিক্সগুলো লক্ষ্য করবেন। যদি স্ট্রিমিং চলাকালীন কানেকশন বিচ্ছিন্ন হয়ে যায়, তবে রিকানেক্ট করার জন্য বা নন-স্ট্রিমিং রিট্রাই (retry) করার জন্য প্রস্তুত থাকুন। এতে আপনার চ্যাট অ্যাপের ল্যাটেন্সি (latency) নাটকীয়ভাবে কমে যায় এবং ব্যবহারকারীদের মনে হয় সিস্টেমটি তাদের অনুরোধ ব্যাচ-প্রসেস করার পরিবর্তে তাদের সাথে সাথে চিন্তা করছে।

রিয়েল-ওয়ার্ল্ড ওয়ার্কফ্লোর জন্য ফাংশন কলিং (Function Calling)

যে মডেলটি শুধুমাত্র সাধারণ টেক্সট রিটার্ন করে তা কার্যকর, কিন্তু যে মডেলটি টুলস (tools) ব্যবহার করতে পারে তা অনেক বেশি কার্যকর। ফাংশন কলিং আপনাকে একটি JSON স্কিমা সংজ্ঞায়িত করতে দেয় যা উপলব্ধ অপারেশনগুলো বর্ণনা করে—যেমন, search_orders বা update_profile—এবং মডেলটি সিদ্ধান্ত নেয় কখন সেগুলো ব্যবহার করতে হবে। ব্যবহারকারীকে ফলো-আপ প্রশ্ন করার পরিবর্তে, এটি কথোপকথন থেকে তথ্য সংগ্রহ করে একটি স্ট্রাকচার্ড ফাংশন কল এবং আর্গুমেন্ট (arguments) প্রদান করে।

উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী জিজ্ঞাসা করেন, “আমার শেষ অর্ডারটি কী ছিল?”, আপনার স্কিমাতে একটি limit প্যারামিটারসহ get_recent_orders ফাংশন থাকতে পারে। মডেলটি একটি টুল কল রিটার্ন করবে, আপনার ব্যাকএন্ড আপনার ডেটাবেসের বিরুদ্ধে কুয়েরিটি এক্সিকিউট করবে এবং আপনি সেই ফলাফলটি একটি ফাংশন রেসপন্স মেসেজ হিসেবে মডেলে ফেরত পাঠাবেন। এরপর মডেলটি একটি ন্যাচারাল-ল্যাঙ্গুয়েজ (natural-language) উত্তর তৈরি করবে।

এটি ইমপ্লিমেন্ট করতে:

  • আপনার পেলোডে একটি tools বা functions অ্যারে প্রদান করুন।
  • প্রতিটি টুলকে একটি name, description, এবং parameters স্কিমা দিয়ে সংজ্ঞায়িত করুন।
  • টুল-কলের ফিনিশ রিজন (finish reason) বা অনুরূপ সংকেত আছে কি না তা রেসপন্স দেখে যাচাই করুন।
  • কঠোর ভ্যালিডেশনের মাধ্যমে আপনার ব্যাকএন্ডে ফাংশনটি এক্সিকিউট করুন। মডেলের সরাসরি আউটপুটকে কোনো স্যানিটাইজেশন (sanitization) ছাড়াই আপনার ডেটাবেসে পাঠানোর জন্য কখনোই বিশ্বাস করবেন না।
  • ফাংশনের ফলাফলটি মেসেজ হিস্ট্রিতে যুক্ত করুন এবং একটি ফলো-আপ রিকোয়েস্ট পাঠান যাতে মডেলটি চূড়ান্ত উত্তর দিতে পারে।

এই প্যাটার্নটি জেনারেটিভ টেক্সট এবং ডिटरমিনিস্টিক সিস্টেমের মধ্যে ব্যবধান কমিয়ে আনে। প্রতিটি ব্রাঞ্চ হার্ড-কোড না করেই আপনার এআই ক্যালেন্ডার পড়তে পারে, এপিআই কুয়েরি করতে পারে বা ওয়েবহুক (webhook) ট্রিগার করতে পারে।

প্রোডাকশনের জন্য হার্ডেনিং (Hardening)

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

এরর (Errors) এবং রিট্রাই (Retries)

  • 429 Too Many Requests: এটি একটি রেট-লিমিট সংকেত। জিতার (jitter) সাথে এক্সপোনেনশিয়াল ব্যাকঅফ (exponential backoff) ব্যবহার করুন। একটি ছোট বিলম্ব দিয়ে শুরু করুন, বারবার 429 এর ক্ষেত্রে এটি দ্বিগুণ করুন, এবং সার্ভারে অতিরিক্ত চাপ না দিতে কয়েক সেকেন্ডের মধ্যে সীমাবদ্ধ রাখুন।
  • 5xx Server Errors: এগুলো সাধারণত সাময়িক, বিশেষ করে যদি আপনি GPU ওয়ার্কারদের একটি পুলে রাউটিং করেন। এগুলো পুনরায় চেষ্টা (retry) করুন, তবে প্রচেষ্টার সংখ্যার ওপর একটি নির্দিষ্ট সীমা নির্ধারণ করুন—তিনটি একটি সাধারণ ডিফল্ট।
  • 4xx Client Errors: এগুলো অন্ধভাবে পুনরায় চেষ্টা করবেন না। 400 মানে আপনার পেলোড (payload) ত্রুটিপূর্ণ, 401 মানে আপনার টোকেন ভুল, এবং 404 মানে সেই এন্ডপয়েন্টে মডেল আইডিটি নেই। লুপে না থেকে বরং রিকোয়েস্টটি ঠিক করুন।

টাইমআউট এবং হ্যাং হওয়া প্রসেস

ইনফারেন্স (Inference) ধীর হয়ে যেতে পারে যখন কিউ (queue) জমে যায় বা জেনারেশনের মাঝপথে কোনো ওয়ার্কার ক্র্যাশ করে। সর্বদা একটি রিকোয়েস্ট টাইমআউট সেট করুন। যদি আপনার HTTP ক্লায়েন্টের ডিফল্ট ইনফিনিটি (infinity) থাকে, তবে তা পরিবর্তন করুন। স্ট্যান্ডার্ড কমপ্লিশনের জন্য ৩০ থেকে ৬০ সেকেন্ড একটি যুক্তিসঙ্গত শুরুর বিন্দু, হেলথ চেকের জন্য আরও কম। যদি টাইমআউট ঘটে, তবে এটিকে একটি ব্যর্থতা হিসেবে গণ্য করুন, লগ করুন এবং ব্যবহারকারীকে একটি মার্জিত ত্রুটি দেখাবেন নাকি একটি ফলব্যাক (fallback) মডেলে পুনরায় চেষ্টা করবেন তা সিদ্ধান্ত নিন।

বাজেট নিয়ন্ত্রণ

টোকেন সংখ্যা সরাসরি টাকা বা GPU ঘণ্টার সাথে সম্পর্কিত। প্রতিটি রিকোয়েস্টের জন্য প্রম্পট এবং কমপ্লিশন উভয় টোকেন লগ করুন। ব্যবহারকারী, ফিচার এবং প্রতিটি মডেল ভার্সন অনুযায়ী এগুলো ট্র্যাক করুন। ওপেন-ওয়েট (Open-weight) মডেলগুলো আপনাকে চেকপয়েন্ট পরিবর্তন করার সুযোগ দেয়, তবে প্রতিটি চেকপয়েন্টের নিজস্ব খরচ এবং কনটেক্সট-উইন্ডো (context-window) সাইজ রয়েছে। লগ ছাড়া আপনি জানতে পারবেন না আপনার পণ্যের কোন অংশটি অতিরিক্ত কম্পিউট খরচ করছে।

সিস্টেম মেসেজের মাধ্যমে আচরণ নিয়ন্ত্রণ

সিস্টেম মেসেজ হলো আপনার নিয়ন্ত্রণের প্রথম ধাপ। এটি টোন সেট করতে, সীমাবদ্ধতা প্রয়োগ করতে এবং একটি স্ট্যাটিক কনটেক্সট যোগ করতে ব্যবহার করুন যা প্রতিটি ব্যবহারকারীর কথোপকথন মেনে চলা উচিত। যেহেতু ওপেন-ওয়েট মডেলগুলো তাদের ফাইন-টিউনিং এবং সিস্টেম প্রম্পটের ওপর ভিত্তি করে ভিন্ন ভিন্ন আচরণ করে, তাই এই ফিল্ডটিকে একটি ভেরিয়েবল হিসেবে বিবেচনা করুন যা আপনি A/B টেস্ট করবেন। একটি অস্পষ্ট সিস্টেম প্রম্পট অস্পষ্ট উত্তর দেবে। একটি সুনির্দিষ্ট প্রম্পট মডেলকে সঠিক পথে রাখে—উদাহরণস্বরূপ, অ্যাসিস্ট্যান্টকে বলা যে এটি শুধুমাত্র বিলিং এবং রিটার্ন সংক্রান্ত কাজ সামলাবে এবং অন্য সবকিছু বিনয়ের সাথে প্রত্যাখ্যান করবে।

ইনফ্রাস্ট্রাকচার স্বাধীনতা এবং ডেটা সার্বভৌমত্ব

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

এমনকি আপনি যদি একটি এক্সটার্নাল ইনফারেন্স হোস্ট ব্যবহার করেন, তবুও ওপেন ওয়েটস আপনাকে পোর্টেবিলিটি প্রদান করে। যদি হোস্ট তাদের মূল্য বা শর্তাবলী পরিবর্তন করে, তবে আপনি একই মডেল ফাইল অন্য কোনো প্রোভাইডারের কাছে নিয়ে যেতে পারেন বা ইন-হাউস নিয়ে আসতে পারেন। আপনি একটি মাত্র API-এর সাথে আটকে থাকবেন না কারণ শুধুমাত্র একটি কোম্পানি এই ওয়েটসগুলোর মালিক।

একটি ব্যবহারিক শুরুর বিন্দু

আপনি যদি আজই ইন্টিগ্রেশন শুরু করতে চান, তবে একটি মাত্র মডেল এবং একটি মাত্র এন্ডপয়েন্ট দিয়ে শুরু করুন। আপনার HTTP ক্লায়েন্টকে একটি ছোট অ্যাবস্ট্রাকশন লেয়ারে মুড়িয়ে ফেলুন যা