ריסון השיהוי (Latency) של AI באמצעות SSE

בניתי תכונת השלמה אוטומטית מבוססת AI. המשתמשים שנאו אותה.

כל הקשה על המקלדת שלחה בקשה למודל AI. המשתמשים המתינו 2 עד 3 שניות לתגובה מלאה. ממשק המשתמש (UI) הרגיש תקול.

ניסיתי debouncing. ניסיתי caching. ניסיתי loading spinners. שום דבר לא עבד. הבעיה המרכזית נותרה בעינה. המשתמשים היו צריכים לחכות לתשובה המלאה לפני שראו נתונים כלשהם.

פתרתי זאת באמצעות Server-Sent Events (SSE) כדי להזרים (stream) תגובות חלק אחר חלק.

זרימת העבודה האיטית המקורית:

  • המשתמש מקליד תווים
  • debounce של 300ms
  • בקשת HTTP POST
  • השרת קורא ל-AI API (1-2 שניות)
  • השרת מחזיר תגובה מלאה
  • הלקוח (Client) מרנדר

המשתמש לא ראה דבר במשך 2 שניות.

שקלתי polling, אבל זה מוסיף יותר מדי overhead. WebSockets עובדים, אבל הם כבדים מדי עבור הזרמה חד-כיוונית.

בחרתי ב-SSE. זהו תקן שבו השרת שולח אירועי טקסט דרך חיבור אחד ארוך.

למה SSE עובד עבור AI:

  • הוא חד-כיווני (מהשרת ללקוח)
  • הוא משתמש ב-JSON chunks מבוססי טקסט
  • הוא מטפל בחיבורים מחדש באופן אוטומטי
  • אין צורך בספריות נוספות

התוצאות היו מיידיות. המילה הראשונה הופיעה תוך פחות מ-300ms. המשתמשים ראו את ההצעות נבנות אות אחרי אות.

המדדים שלי השתפרו:

  • זמן לתגובה ויזואלית ראשונה: מ-2.1 שניות ל-0.3 שניות
  • מעורבות משתמשים: עלייה של 40%
  • תלונות משתמשים: אפס

הזרמה (Streaming) עוסקת בתפיסה. ממשק משתמש איטי אך הדרגתי מנצח ממשק מהיר אך סטטי. משתמשים מעדיפים לראות תשובה שמופיעה מילה אחר מילה על פני המתנה לבלוק טקסט מלא.

אם תכונת ה-AI שלכם מרגישה איטית, נסו הזרמה (streaming) תחילה.

מקור: https://dev.to/__c1b9e06dc90a7e0a676b/taming-ai-latency-streaming-responses-with-server-sent-events-42d5

קהילת למידה אופציונלית: https://t.me/GyaanSetuAi