LiveKit এবং FastAPI দিয়ে রিয়েল-টাইম Voice AI তৈরি করা
Voice AI-এর ডেমো দেখানো সহজ। কিন্তু প্রোডাকশন-গ্রেড Voice AI লঞ্চ করা কঠিন।
একটি ডেমোর ক্ষেত্রে কেবল একটি নির্দিষ্ট সফল পথ (happy path) থাকে এবং কোনো লোড থাকে না। কিন্তু প্রোডাকশনে জिटर (jitter), ব্যবহারকারীর বাধা (interruptions), রিকানেক্ট হওয়া এবং প্রোভাইডার ফেইলিয়র দেখা দেয়। আপনি যদি এগুলোর জন্য ডিজাইন না করেন, তবে আপনার AI রোবোটিক মনে হবে।
এই সিস্টেমগুলো তৈরির জন্য কেবল ফ্রেমওয়ার্কের কৌশল নয়, বরং একটি স্মার্ট আর্কিটেকচার প্রয়োজন। স্টেট (state) কোথায় থাকবে এবং ল্যাটেন্সি (latency) কীভাবে বাড়তে পারে, তা আপনাকে আগেই ঠিক করে নিতে হবে।
একটি মজবুত Voice AI স্ট্যাকের জন্য এই লেয়ারগুলো প্রয়োজন:
• Client: মাইক্রোফোন ইনপুট ক্যাপচার করে এবং অডিও প্লে করে। • Voice session layer: অথেন্টিকেশন এবং কানেকশন লাইফসাইকেল ম্যানেজ করে। • LiveKit room: লো-ল্যাটেন্সি মিডিয়া ট্রান্সপোর্ট হ্যান্ডেল করে। • STT pipeline: কথাকে টেক্সটে রূপান্তর করে। • LLM orchestration: প্রম্পট এবং টুল কল ম্যানেজ করে। • TTS pipeline: টেক্সটকে অডিও হিসেবে স্ট্রিম করে। • Backend APIs: স্টেট এবং বিজনেস লজিকের জন্য FastAPI সার্ভিস। • Observability: ল্যাটেন্সি ট্র্যাক করার জন্য মেট্রিক্স এবং লগ।
লেয়ারগুলোকে স্বাধীন রাখুন। ক্লায়েন্টের লজিক খুব সামান্য হওয়া উচিত। এটি কেবল অডিও ক্যাপচার করা এবং UI হ্যান্ডেল করার কাজ করবে।
LiveKit-এর জন্য শর্ট-লিভড (short-lived) টোকেন তৈরি করতে FastAPI ব্যবহার করুন। এটি রুম অ্যাক্সেস সুরক্ষিত রাখে। সার্ভারে একটি স্ট্যাবল আইডি দিয়ে সেশন রেকর্ডগুলো সংরক্ষণ করুন। ইউজার আইডি, রুম আইডি এবং বর্তমান স্টেট ট্র্যাক করুন। যখন একজন ব্যবহারকারী রিকানেক্ট করেন, ব্যাকএন্ড তাৎক্ষণিকভাবে কনটেক্সট পুনরুদ্ধার করে।
Voice AI হলো ল্যাটেন্সির খেলা। রেসপন্স আসতে দেরি হলে ব্যবহারকারীরা বাধা দেয়।
প্রতিটি ধাপের জন্য একটি ল্যাটেন্সি বাজেট নির্ধারণ করুন:
- STT ল্যাটেন্সি
- Orchestration ল্যাটেন্সি
- Tool call ল্যাটেন্সি
- TTS স্টার্টআপ টাইম
- প্রথম অডিও বাইট পেতে প্রয়োজনীয় সময়
ইন্টারাপশন বা বাধা প্রদানকে একটি প্রাথমিক ফিচার হিসেবে রাখুন। যখন একজন ব্যবহারকারী কথা বলেন, ক্লায়েন্টকে অবশ্যই একটি 'interrupt event' পাঠাতে হবে। সিস্টেমের উচিত বর্তমান TTS স্ট্রিমটি বাতিল করা এবং রেসপন্সটিকে 'interrupted' হিসেবে চিহ্নিত করা। এটি AI-কে পরবর্তী টার্নে পুরনো বা অপ্রাসঙ্গিক কনটেক্সট ব্যবহার করা থেকে বিরত রাখে।
রিট্রাই (retry) প্রক্রিয়া নিরাপদ করুন। টুল কলের জন্য idempotency key ব্যবহার করুন। এটি নিশ্চিত করে যে যদি কোনো রিকোয়েস্ট ফেইল করে এবং পুনরায় চেষ্টা করা হয়, তবে আপনি একই কাজ দুবার করবেন না (যেমন একজন গ্রাহকের কাছ থেকে দুবার টাকা কেটে নেওয়া)।
ইউজার এক্সপেরিয়েন্সের জন্য গুরুত্বপূর্ণ মেট্রিক্সগুলো ট্র্যাক করুন:
- এন্ড-টু-এন্ড টার্ন ল্যাটেন্সি
- প্রথম অডিও বাইট পেতে প্রয়োজনীয় সময়
- প্রতি সেশনে ইন্টারাপশন রেট
- রিকানেক্ট হওয়ার ফ্রিকোয়েন্সি
Voice AI কেবল একটি LLM সমস্যা নয়। এটি একটি সিস্টেমস সমস্যা। এর মধ্যে নেটওয়ার্কিং, স্টেট, সিকিউরিটি এবং ডিজাইন অন্তর্ভুক্ত।
একটি ভিত্তি তৈরি করতে LiveKit এবং FastAPI ব্যবহার করুন। প্রেডিক্টেবল কন্ট্রাক্ট (predictable contracts), এক্সপ্লিসিট স্টেট (explicit state) এবং টাইট ল্যাটেন্সি লুপের (tight latency loops) ওপর গুরুত্ব দিন। এভাবেই আপনি এমন সফটওয়্যার তৈরি করতে পারবেন যা মানুষের মতো মনে হয়।
Optional learning community: https://t.me/GyaanSetuAi
