ריסון השהיית AI באמצעות SSE

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

כל הקשה על המקלדת גררה בקשה ל-AI. המשתמשים המתינו בין 2 ל-3 שניות לקבלת תגובת JSON מלאה. ממשק המשתמש (UI) הרגיש שבור. ניסיתי debouncing ו-caching. שום דבר לא עבד. הבעיה המרכזית נותרה בעינה: המשתמשים לא ראו דבר עד שהתשובה המלאה הגיעה.

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

התהליך הישן נראה כך:

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

המשתמשים ראו מסך ריק במשך שניות. אפילו עם ספינר טעינה (loading spinner), זה הרגיש איטי.

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

בחרתי ב-SSE כי:

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

התוצאות שינו הכל:

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

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

אם תגובות ה-AI שלכם קצרות מאוד, היצמדו לבקשות סטנדרטיות. אם אתם זקוקים לתקשורת דו-כיוונית, השתמשו ב-WebSockets. אך עבור רוב צרכי הזרמת ה-AI, SSE הוא הבחירה הטובה ביותר.

איך אתם מתמודדים עם השהיית AI באפליקציות שלכם? אתם מבצעים הזרמה או מחכים לתגובות מלאות?

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