SSE کے ذریعے AI Latency کو قابو کرنا

میں نے ایک AI autocomplete فیچر بنایا۔ صارفین کو یہ بالکل پسند نہیں آیا۔

ہر کی اسٹروک (keystroke) کے ساتھ AI ماڈل کو ایک ریکویسٹ بھیجی جاتی تھی۔ صارفین کو مکمل جواب کے لیے 2 سے 3 سیکنڈ انتظار کرنا پڑتا تھا۔ UI خراب محسوس ہو رہی تھی۔

میں نے debouncing، caching اور loading spinners کا استعمال کیا۔ کچھ بھی کام نہیں آیا۔ بنیادی مسئلہ برقرار رہا۔ صارفین کو کوئی بھی ڈیٹا دیکھنے سے پہلے پورے جواب کا انتظار کرنا پڑتا تھا۔

میں نے اس مسئلے کو Server-Sent Events (SSE) کا استعمال کرتے ہوئے حل کیا تاکہ جوابات کو ٹکڑوں (chunks) میں اسٹریم کیا جا سکے۔

اصل سست بہاؤ (Original slow flow):

  • صارف حروف ٹائپ کرتا ہے
  • 300ms debounce
  • HTTP POST request
  • سرور AI API کو کال کرتا ہے (1-2 سیکنڈ)
  • سرور مکمل جواب واپس کرتا ہے
  • کلائنٹ رینڈر کرتا ہے

صارف کو 2 سیکنڈ تک کچھ نظر نہیں آیا۔

میں نے polling پر غور کیا، لیکن اس سے overhead بہت بڑھ جاتا ہے۔ WebSockets کام تو کرتے ہیں، لیکن وہ ون-وے (one-way) اسٹریم کے لیے بہت بھاری (heavy) ہوتے ہیں۔

میں نے SSE کا انتخاب کیا۔ یہ ایک ایسا معیار (standard) ہے جہاں سرور ایک طویل کنکشن کے ذریعے ٹیکسٹ ایونٹس (text events) بھیجتا ہے۔

AI کے لیے SSE کیوں کارآمد ہے:

  • یہ ون-وے ہے (سرور سے کلائنٹ تک)
  • یہ ٹیکسٹ پر مبنی JSON chunks استعمال کرتا ہے
  • یہ خودکار طریقے سے ری کنکشنز (reconnections) کو ہینڈل کرتا ہے
  • آپ کو اضافی لائبریریز کی ضرورت نہیں ہوتی

نتائج فوری تھے۔ پہلا لفظ 300ms سے بھی کم وقت میں ظاہر ہو گیا۔ صارفین نے مشوروں (suggestions) کو حرف بہ حرف بنتے ہوئے دیکھا۔

میرے میٹرکس (metrics) میں بہتری آئی:

  • پہلے بصری جواب کا وقت: 2.1s سے 0.3s
  • صارف کی مصروفیت (User engagement): 40% اضافہ
  • صارفین کی شکایات: صفر

اسٹریم کرنا دراصل ادراک (perception) کا معاملہ ہے۔ ایک سست لیکن بتدریج (progressive) UI، ایک تیز لیکن جامد (static) UI سے بہتر ہے۔ صارفین متن کے ایک مکمل بلاک کا انتظار کرنے کے بجائے لفظ بہ لفظ جواب ظاہر ہوتے دیکھنا پسند کرتے ہیں۔

اگر آپ کا AI فیچر سست محسوس ہوتا ہے، تو پہلے اسٹریم کرنے کی کوشش کریں۔

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

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