মানুষের টাইপ করা কথা আসলে বুঝতে পারে এমন একটি AI চ্যাটবট তৈরি করতে আপনার কোনো বড় দল বা বিশাল বাজেটের প্রয়োজন নেই। ২০২৫ সালে, ল্যাঙ্গুয়েজ মডেল প্রোভাইডারদের ফ্রি টিয়ারগুলো (free tiers) একক নির্মাতা, শিক্ষার্থী এবং সাইড-প্রজেক্ট হ্যাকারদের সেই একই ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং স্ট্যাক ব্যবহারের সুযোগ করে দিচ্ছে, যা মিলিয়ন ডলারের প্রোডাক্টগুলোতে ব্যবহৃত হয়। বাধাটি এখন বদলে গেছে। এটি এখন আর স্ক্র্যাচ থেকে একটি মডেল ট্রেনিং করার বিষয় নয়, যার জন্য প্রচুর GPU এবং মাসের পর মাস গবেষণার প্রয়োজন হয়। এটি এখন বিদ্যমান একটি 'মস্তিষ্ক' ব্যবহার করতে শেখা এবং সেটিকে কোনো দরকারী কাজে যুক্ত করার বিষয়।
আপনি যদি একটি Python স্ক্রিপ্ট লিখতে পারেন এবং API ডকুমেন্টেশন পড়তে পারেন, তবে আপনার কাছে প্রয়োজনীয় কাঁচামাল ইতিমধ্যেই রয়েছে।
কেন ফ্রি API সবকিছু বদলে দিচ্ছে
খুব বেশিদিন আগের কথা নয়, একটি কনভারসেশনাল এজেন্ট তৈরি করার অর্থ ছিল ট্রেনিং ডেটা সংগ্রহ করা, টেক্সট পরিষ্কার করা, একটি আর্কিটেকচার বেছে নেওয়া এবং একটি মডেলের গ্রামার ও কনটেক্সট শেখার জন্য কয়েক সপ্তাহ ধরে বিদ্যুৎ খরচ করা। সেই কাজের বেশিরভাগ অংশ এখন সহজলভ্য হয়ে গেছে। প্রোভাইডাররা বিশাল প্রি-ট্রেইনড মডেল হোস্ট করে এবং সেগুলোকে সাধারণ ওয়েব এন্ডপয়েন্টের মাধ্যমে উন্মুক্ত করে দেয়। আপনি HTTPS-এর মাধ্যমে টেক্সট পাঠান; তারা একটি প্রেডিকশন (prediction) ফেরত দেয়। সেই প্রেডিকশনটিই হলো আপনার চ্যাটবটের উত্তর।
এই ব্যবস্থা আপনাকে গণিত এড়িয়ে মডেলের চারপাশের মেকানিজমের ওপর মনোযোগ দেওয়ার সুযোগ দেয়। আপনার কাজ হয়ে দাঁড়ায় প্রম্পট ম্যানেজ করা, কনভারসেশন মেমরি হ্যান্ডেল করা এবং ইউজার এক্সপেরিয়েন্স তৈরি করা। ফ্রি টিয়ারগুলো বিদ্যমান কারণ প্রোভাইডাররা চায় ডেভেলপাররা তাদের প্ল্যাটফর্মে অভ্যস্ত হয়ে উঠুক। এই লিমিটগুলো সাধারণত প্রোটোটাইপ, লার্নিং প্রজেক্ট এবং ছোটখাটো ইন্টারনাল টুলের জন্য যথেষ্ট উদার। একবার আপনি এর চেয়ে বড় কিছু করতে চাইলে, স্কেলিং করা কেবল একটি বিলিং পরিবর্তনের ব্যাপার।
আপনার কোর স্ট্যাক সেটআপ করা
এই ধরনের কাজের জন্য Python এখনও সবচেয়ে যুক্তিসঙ্গত শুরুর ভাষা। এর সিনট্যাক্স আপনার কাজে বাধা দেয় না এবং প্রায় প্রতিটি AI প্রোভাইডার অন্য যেকোনো ভাষার আগে Python-এ কপি-পেস্ট করার মতো উদাহরণ প্রকাশ করে।
আপনার প্রথম পদক্ষেপগুলো খুবই সামান্য:
- Python 3.8 বা তার পরবর্তী ভার্সন ইনস্টল করুন।
- আপনার টার্মিনালে
pip install requestsরান করেrequestsলাইব্রেরি ইনস্টল করুন। - OpenAI-তে সাইন আপ করুন এবং আপনার অ্যাকাউন্ট ড্যাশবোর্ড থেকে একটি API key জেনারেট করুন।
সেই কি (key) টি একটি এনভায়রনমেন্ট ভেরিয়েবল (environment variable) বা একটি .env ফাইলের ভেতরে রাখুন। এটি কখনোই সরাসরি আপনার সোর্স কোডে পেস্ট করবেন না। আপনি যদি হার্ডকোডেড কি (hardcoded key) সহ কোনো রিপোজিটরি GitHub-এ পুশ করেন, তবে অটোমেটেড স্ক্র্যাপারগুলো কয়েক মিনিটের মধ্যেই তা খুঁজে পাবে এবং আপনার ফ্রি ক্রেডিট শেষ করে দেবে। একটি সাধারণ .env ফাইল দেখতে এরকম:
OPENAI_API_KEY=sk-your-key-here
তারপর os.environ অথবা python-dotenv-এর মতো লাইব্রেরি ব্যবহার করে আপনার স্ক্রিপ্টে এটি লোড করুন। এই একটি অভ্যাস শখের প্রজেক্ট এবং বাস্তব জগতে টিকে থাকা প্রজেক্টের মধ্যে পার্থক্য তৈরি করে।
আপনার প্রজেক্টের জন্য উপযুক্ত API বেছে নেওয়া
কোডের আর একটি লাইন লেখার আগে, তিনটি বিষয়ের ভিত্তিতে প্রোভাইডারদের তুলনা করতে দশ মিনিট সময় দিন:
ফ্রি টিয়ারের ব্যবহারের সীমা (Usage limits)। কিছু সার্ভিস একটি নির্দিষ্ট ক্রেডিট প্রদান করে যা তিন মাস পর শেষ হয়ে যায়। অন্যরা প্রতি মাসে টোকেন বরাদ্দ রিসেট করে। একটি টোকেন মোটামুটি একটি সাধারণ ইংরেজি শব্দের তিন-চতুর্থাংশ। যদি ফ্রি টিয়ার আপনাকে ২,০০,০০০ টোকেন দেয়, তবে তা হাজার হাজার সাধারণ কথোপকথনের জন্য যথেষ্ট, কিন্তু আপনি যদি প্রম্পটে পুরো বই ইনপুট হিসেবে দেন, তবে তা দ্রুত শেষ হয়ে যাবে। রেট লিমিটও (rate limits) চেক করুন। একটি সার্ভিস হয়তো মাসে দশ লক্ষ টোকেন ব্যবহারের অনুমতি দিতে পারে কিন্তু প্রতি মিনিটে অনুরোধের সংখ্যা মাত্র তিনটিতে সীমাবদ্ধ রাখতে পারে।
ডকুমেন্টেশনের মান। এমন অফিসিয়াল গাইড খুঁজুন যেখানে শুধুমাত্র curl কমান্ড নয়, বরং সাধারণ requests ব্যবহার করে Python-এর উদাহরণ দেখানো হয়েছে। ভালো ডকুমেন্টেশন এরর কোডগুলো (error codes) স্পষ্টভাবে ব্যাখ্যা করে, বিশেষ করে HTTP 429 (rate limit) এবং 401 (invalid key)। এতে কোন কোন মডেল ফ্রি টিয়ারে পাওয়া যাবে তার তালিকা থাকা উচিত, কারণ সবচেয়ে সস্তা প্ল্যানগুলোতে প্রায়ই নতুন ফ্ল্যাগশিপ মডেলগুলো অন্তর্ভুক্ত থাকে না।
ইন্টিগ্রেশনের সহজতা। একটি ক্লিন REST API যা JSON গ্রহণ করে এবং JSON ফেরত দেয় তা আদর্শ। আপনি এমন প্রোভাইডার এড়িয়ে চলতে চান যারা শুধুমাত্র একটি টেক্সট স্ট্রিং পাঠানোর জন্য আপনাকে ভারী প্রোপাইটরি SDK ইনস্টল করতে বাধ্য করে। আপনি যদি requests.post()-এর মাধ্যমে রিকোয়েস্ট তৈরি করতে পারেন, তবে আপনি ইন্টিগ্রেশনটির ওপর নিয়ন্ত্রণ পাবেন এবং সহজেই ডিবাগ করতে পারবেন।
আপনার চ্যাটবটের মূল কেন্দ্রবিন্দু
মূলে, আপনার অ্যাপ্লিকেশনটি হলো একটি ফাংশন যা একটি প্রম্পট পাঠায় এবং উত্তরের জন্য অপেক্ষা করে। আপনি আপনার মেসেজ সম্বলিত একটি ডিকশনারি তৈরি করবেন, সেটিকে JSON-এ মুড়িয়ে ফেলবেন, Authorization হেডার-এ আপনার API key যুক্ত করবেন এবং প্রোভাইডারের completions বা chat এন্ডপয়েন্টে POST করবেন। রিমোট সার্ভার টেক্সটটি প্রসেস করবে এবং একটি রেসপন্স অবজেক্ট ফেরত পাঠাবে। আপনার স্ক্রিপ্ট সেই JSON পার্স (parse) করবে এবং জেনারেট হওয়া স্ট্রিংটি বের করে আনবে।
একটি ব্যবহারিক প্রথম ভার্সনটি ধারণাগতভাবে দেখতে অনেকটা এরকম:
- কিবোর্ড থেকে ব্যবহারকারীর ইনপুট গ্রহণ করুন।
- এটিকে API প্রত্যাশিত পেলোড ফরম্যাটে সাজান।
- HTTP রিকোয়েস্ট পাঠান।
- নেটওয়ার্ক বা অথেন্টিকেশন ত্রুটি পরীক্ষা করুন।
- প্রাপ্ত JSON থেকে উত্তরের টেক্সটটি বের করে নিন।
- এটি স্ক্রিনে প্রিন্ট করুন।
এই লুপটি—ইনপুট, প্যাকেজ, পাঠানো, গ্রহণ করা, প্রদর্শন করা—হলো পুরো ইঞ্জিন। বাকি সবকিছু হলো কেবল পরিমার্জন।
যখন আপনি প্রোটোটাইপ থেকে পরবর্তী ধাপে যাবেন, তখন আপনি কথোপকথনের ইতিহাস (conversation history) বজায় রাখতে চাইবেন। ল্যাঙ্গুয়েজ মডেলগুলো হলো স্টেটলেস (stateless); আপনি যদি প্রতিবার প্রম্পটে সেই ইতিহাস পুনরায় প্রদান না করেন, তবে তারা তিন ধাপ আগে আপনি কী বলেছিলেন তা মনে রাখতে পারে না। আপনি এটি সমাধান করতে পারেন মেসেজ ডিকশনারির একটি Python লিস্ট রেখে এবং প্রতিটি নতুন রিকোয়েস্টের আগে ব্যবহারকারীর প্রম্পট এবং অ্যাসিস্ট্যান্টের উত্তর উভয়ই তাতে যুক্ত করার মাধ্যমে। লিস্টটি বড় হতে থাকে, তাই মডেলের কনটেক্সট লিমিটের (context limit) কাছাকাছি পৌঁছালে আপনি পুরনো ধাপগুলো বাদ দিয়ে দিতে পারেন (truncate)।
গুরুত্বপূর্ণ ফিচার যোগ করা
একবার বেসিক কলটি নির্ভরযোগ্যভাবে কাজ করা শুরু করলে, আপনি প্রজেক্টটিকে এমন কিছুতে রূপান্তর করতে পারেন যা মানুষ আসলে ব্যবহার করতে চাইবে।
tkinter দিয়ে একটি সাধারণ ইউজার ইন্টারফেস তৈরি করুন। স্ট্যান্ডার্ড লাইব্রেরির tkinter মডিউলটিকে প্রায়শই সেকেলে বলে উপহাস করা হয়, তবে এটি প্রতিটি Python ইনস্টলেশনের সাথেই থাকে এবং এর জন্য কোনো এক্সটার্নাল ডিপেন্ডেন্সি (external dependencies) প্রয়োজন হয় না। আপনি একশ লাইনেরও কম কোডে একটি ব্যবহারযোগ্য চ্যাট উইন্ডো তৈরি করতে পারেন: কথোপকথনের লগ-এর জন্য একটি Text উইজেট, টাইপ করার জন্য একটি Entry উইজেট এবং আপনার API ফাংশনটি ট্রিগার করার জন্য একটি Button। এটি হয়তো ডিজাইনের জন্য কোনো পুরস্কার জিতবে না, তবে এটি আপনার স্ক্রিপ্টটিকে একটি টার্মিনাল কৌতূহল থেকে একটি ডেস্কটপ অ্যাপ্লিকেশনে রূপান্তরিত করবে যা অ-প্রযুক্তিগত বন্ধুরা সহজেই ব্যবহার করতে পারবে।
বিশেষায়িত API ব্যবহার করুন। একটি সাধারণ ল্যাঙ্গুয়েজ মডেল কথোপকথন ভালোভাবে পরিচালনা করতে পারে, তবে এটি প্রতিটি কাজের জন্য অপ্টিমাইজ করা থাকে না। আপনি মূল LLM কলের আগে বা পরে ব্যবহারকারীর ইনপুটকে আলাদা ফ্রি API-এর মাধ্যমে পাঠাতে পারেন। সেন্টিমেন্ট অ্যানালাইসিস (Sentiment analysis) সার্ভিসগুলো একটি মেসেজ রাগান্বিত, খুশি নাকি নিরপেক্ষ তা চিহ্নিত করতে পারে। ট্রান্সলেশন API রিপ্লাইটিকে অন্য ভাষায় রূপান্তর করতে পারে। এই ধরনের একটি পাইপলাইন তৈরি করা আপনাকে শেখাবে কীভাবে আসল AI প্রোডাক্টগুলো আর্কিটেক্ট করা হয়: একটি মডেল ইনটেন্ট ডিটেকশনের (intent detection) জন্য, অন্যটি জেনারেশনের জন্য এবং তৃতীয়টি পোস্ট-প্রসেসিংয়ের জন্য।
প্রম্পট ইঞ্জিনিয়ারিং নিয়ে পরীক্ষা-নিরীক্ষা করুন। এখানে উন্নত NLP টেকনিক মানে ট্রান্সফরমার আর্কিটেকচার পুনরায় লেখা নয়। এর মানে হলো আপনার প্রম্পটগুলোকে আরও সতর্কতার সাথে সাজানো। সিস্টেম মেসেজে মডেলটিকে একটি পারসোনা (persona) দিন। আসল ব্যবহারকারীর প্রশ্নের আগে প্রম্পটে দুই বা তিনটি নমুনা প্রশ্ন-উত্তর জোড়া অন্তর্ভুক্ত করে 'ফিউ-শট' (few-shot) উদাহরণ ব্যবহার করুন। যদি API এটি প্রদান করে তবে temperature-এর মতো প্যারামিটারগুলো অ্যাডজাস্ট করুন; কম মান আউটপুটকে আরও ফোকাসড এবং ডিটারমিনিস্টিক (deterministic) করে তোলে, আর উচ্চ মান সৃজনশীলতাকে উৎসাহিত করে। এই পরিবর্তনগুলো করতে কোনো খরচ নেই কিন্তু এগুলো উত্তরের গুণমান নাটকীয়ভাবে পরিবর্তন করে দেয়।
এটি তৈরি করা আপনাকে আসলে কী শেখায়
এই প্রজেক্টটি কেবল দেখানোর জন্য একটি ঘরে তৈরি ChatGPT ক্লোন থাকা সম্পর্কে নয়। এই প্রক্রিয়াটি আপনাকে বাস্তবসম্মত সফটওয়্যার ইঞ্জিনিয়ারিং সমস্যার মুখোমুখি হতে বাধ্য করে। আপনি কীভাবে সিক্রেট (secrets) নিরাপদে হ্যান্ডেল করতে হয়, ফিল্ড মিসিং থাকলে ভেঙে না পড়ে কীভাবে JSON পার্স (parse) করতে হয় এবং একটি মাল্টি-টার্ন কথোপকথনের মাধ্যমে স্টেট (state) ম্যানেজ করতে হয় তা শিখবেন। আপনি শব্দের পরিবর্তে টোকেন (tokens) নিয়ে চিন্তা করতে শুরু করবেন। আপনি আবিষ্কার করবেন যে একটি চ্যাটবট কোনো চিন্তাশীল সত্তা নয়, বরং একটি স্ট্যাটিস্টিকস ইঞ্জিনের ওপর ভাসমান একটি প্রেডিকশন লেয়ার (prediction layer)।
সেই মেন্টাল মডেলটি অত্যন্ত মূল্যবান। পরবর্তীতে যখন আপনি LangChain-এর মতো বড় ফ্রেমওয়ার্ক নিয়ে কাজ করবেন বা প্রোডাকশন-গ্রেড অ্যাপ্লিকেশন তৈরি করবেন, তখন আপনি বুঝতে পারবেন সেই অ্যাবস্ট্রাকশনগুলো (abstractions) কী লুকিয়ে রাখছে, কারণ আপনি নিজেই এর র (raw) HTTP ভার্সনটি লিখে ফেলেছেন।
ছোট থেকে শুরু করুন, তারপর ফিচার যোগ করুন
প্রথম দিনেই tkinter GUI, সেন্টিমেন্ট অ্যানালাইসিস পাইপলাইন এবং মেমরি ম্যানেজমেন্ট—সবকিছু একসাথে তৈরি করার চেষ্টা করবেন না। একটি বেসিক স্ক্রিপ্ট দিয়ে শুরু করুন যা টার্মিনাল থেকে একটি প্রম্পট নেয় এবং API রেসপন্স প্রিন্ট করে। যখন সেটি স্থিতিশীল হবে, তখন এরর হ্যান্ডলিং (error handling) যোগ করুন। তারপর একটি লুপ যোগ করুন যাতে কথোপকথন চলতে থাকে। এরপর আগের ধাপগুলো মনে রাখার ব্যবস্থা করুন। সবশেষে এটিকে একটি উইন্ডোর রূপ দিন।
প্রতিটি স্তর আপনাকে নির্দিষ্ট কিছু শেখায়। আপনি যখন এটি শেষ করবেন, তখন আপনি সফটওয়্যার ডেভেলপমেন্ট ডিসিপ্লিন এবং আধুনিক AI ইন্টারফেসের পেছনের মূল লজিক—উভয়ই আয়ত্ত করতে পারবেন।
উৎস এবং আরও পড়ার জন্য: Build Your Own ChatGPT With Free APIs in 2025
ঐচ্ছিক লার্নিং কমিউনিটি: GyaanSetu AI on Telegram
