SSE দিয়ে AI ল্যাটেন্সি নিয়ন্ত্রণ করা

আমি একটি AI autocomplete ফিচার তৈরি করেছিলাম। ব্যবহারকারীরা এটি একদম পছন্দ করেনি।

প্রতিটি কি-স্ট্রোক (keystroke) একটি AI রিকোয়েস্ট ট্রিগার করছিল। একটি পূর্ণাঙ্গ JSON রেসপন্সের জন্য ব্যবহারকারীদের ২ থেকে ৩ সেকেন্ড অপেক্ষা করতে হতো। UI-টি অকেজো মনে হচ্ছিল। আমি debouncing এবং caching করার চেষ্টা করেছি, কিন্তু কোনোটিই কাজ করেনি। মূল সমস্যাটি একই ছিল: পুরো উত্তরটি না আসা পর্যন্ত ব্যবহারকারীরা কিছুই দেখতে পাচ্ছিলেন না।

আমি Server-Sent Events (SSE) ব্যবহার করে এটি সমাধান করেছি, যার মাধ্যমে রেসপন্সগুলোকে ছোট ছোট অংশে (piece by piece) স্ট্রিম করা সম্ভব।

আগের কাজের প্রক্রিয়াটি ছিল এরকম:

  • ব্যবহারকারী টাইপ করেন
  • ৩০০ms debounce
  • HTTP POST রিকোয়েস্ট
  • AI প্রসেস করে (১-২ সেকেন্ড)
  • সার্ভার পূর্ণাঙ্গ রেসপন্স প্রদান করে
  • ক্লায়েন্ট রেন্ডার করে

ব্যবহারকারীরা কয়েক সেকেন্ড ধরে একটি খালি স্ক্রিন দেখতেন। এমনকি একটি loading spinner থাকলেও এটি ধীরগতির মনে হতো।

আমি polling বা WebSockets ব্যবহারের কথা ভেবেছিলাম। Polling অতিরিক্ত ওভারহেড (overhead) তৈরি করে। আর একমুখী (one-way) স্ট্রিমের জন্য WebSockets অনেক বেশি ভারী।

আমি SSE বেছে নিয়েছি কারণ:

  • এটি সার্ভার থেকে ক্লায়েন্টের দিকে একমুখীভাবে কাজ করে
  • এটি সাধারণ টেক্সট এবং JSON chunks ব্যবহার করে
  • কানেকশন বিচ্ছিন্ন হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করে
  • আপনার সার্ভারে কোনো অতিরিক্ত লাইব্রেরির প্রয়োজন হয় না

এর ফলাফল সবকিছু বদলে দিয়েছে:

  • প্রথম ভিজ্যুয়াল রেসপন্সের সময়: ২.১ সেকেন্ড থেকে কমে ০.৩ সেকেন্ডে দাঁড়িয়েছে
  • ব্যবহারকারীর এনগেজমেন্ট: ৪০% বৃদ্ধি পেয়েছে
  • ব্যবহারকারীর অভিযোগ: শূন্য

স্ট্রিমিং মূলত অনুভূতির (perception) বিষয়। একটি প্রগ্রেসিভ UI একটি স্ট্যাটিক UI-এর তুলনায় দ্রুততর মনে হয়। ব্যবহারকারীরা একটি বড় টেক্সট ব্লকের জন্য অপেক্ষা করার চেয়ে শব্দগুলোকে একে একে আসতে দেখতে বেশি পছন্দ করেন।

আপনার AI রেসপন্স যদি খুব ছোট হয়, তবে সাধারণ রিকোয়েস্ট ব্যবহার করাই যথেষ্ট। যদি আপনার দ্বিমুখী (two-way) কথোপকথন প্রয়োজন হয়, তবে WebSockets ব্যবহার করুন। কিন্তু বেশিরভাগ AI স্ট্রিমিং প্রয়োজনে SSE-ই সেরা পছন্দ।

আপনি আপনার অ্যাপে AI ল্যাটেন্সি কীভাবে সামলান? আপনি কি স্ট্রিম করেন নাকি পূর্ণাঙ্গ রেসপন্সের জন্য অপেক্ষা করেন?

উৎস: https://dev.to/__c1b9e06dc90a7e0a676b/taming-ai-latency-streaming-responses-with-server-sent-events-42d5