SSE மூலம் AI தாமதத்தைக் (Latency) கட்டுப்படுத்துதல்

நான் ஒரு AI autocomplete அம்சத்தை உருவாக்கினேன். பயனர்களுக்கு அது பிடிக்கவில்லை.

ஒவ்வொரு முறை தட்டச்சு செய்யும் போதும் ஒரு AI கோரிக்கை (request) அனுப்பப்பட்டது. முழுமையான JSON பதிலைப் பெற பயனர்கள் 2 முதல் 3 வினாடிகள் காத்திருக்க வேண்டியிருந்தது. UI பழுதானது போன்ற உணர்வைத் தந்தது. நான் debouncing மற்றும் caching முறைகளை முயற்சி செய்தேன். எதுவும் பலன் அளிக்கவில்லை. அடிப்படைப் பிரச்சனை அப்படியே இருந்தது: முழுமையான பதில் வரும் வரை பயனர்களுக்கு எதுவும் தெரியவில்லை.

பதில்களைத் துண்டு துண்டாக (piece by piece) स्ट्रीम செய்ய Server-Sent Events (SSE) முறையைப் பயன்படுத்தி இதைத் தீர்த்தேன்.

பழைய முறை இவ்வாறு இருந்தது:

  • பயனர் தட்டச்சு செய்கிறார்
  • 300ms debounce
  • HTTP POST request
  • AI செயலாக்கம் (1-2 வினாடிகள்)
  • சர்வர் முழுப் பதிலையும் வழங்குகிறது
  • கிளையண்ட் (Client) திரையில் காட்டுகிறது

பயனர்கள் பல வினாடிகளுக்கு வெற்றுத் திரையையே பார்த்தனர். ஒரு loading spinner இருந்தாலும், அது மெதுவாகவே இருந்தது.

நான் polling அல்லது WebSockets முறைகளைப் பரிசீலித்தேன். Polling அதிக சுமையை (overhead) ஏற்படுத்துகிறது. ஒரு வழித் தரவுப் பரிமாற்றத்திற்கு (one-way stream) WebSockets மிகவும் கனமானது.

நான் SSE-ஐத் தேர்ந்தெடுத்ததற்குக் காரணங்கள்:

  • இது சர்வரிலிருந்து கிளையண்டிற்கு ஒரு திசையில் மட்டுமே செயல்படுகிறது
  • இது எளிமையான உரை (text) மற்றும் JSON துண்டுகளைப் பயன்படுத்துகிறது
  • இணைப்பு துண்டிக்கப்பட்டால் தானாகவே மீண்டும் இணைகிறது
  • உங்கள் சர்வரில் கூடுதல் லைப்ரரிகள் (libraries) தேவையில்லை

இதன் முடிவுகள் அனைத்தையும் மாற்றின:

  • முதல் காட்சிப் பதிலுக்கான நேரம்: 2.1 வினாடிகளிலிருந்து 0.3 வினாடிகளாகக் குறைந்தது
  • பயனர் ஈடுபாடு (User engagement): 40% அதிகரித்தது
  • பயனர் புகார்கள்: பூஜ்ஜியம்

Streaming என்பது பயனரின் பார்வையைப் (perception) பொறுத்தது. ஒரு நிலையான (static) UI-ஐ விட, படிப்படியாகத் தோன்றும் (progressive) UI வேகமானதாகத் தோன்றும். ஒரு பெரிய உரைத் தொகுப்பிற்காகக் காத்திருப்பதை விட, வார்த்தைகள் ஒவ்வொன்றாகத் தோன்றுவதையே பயனர்கள் விரும்புகிறார்கள்.

உங்கள் AI பதில்கள் மிகச் சிறியதாக இருந்தால், சாதாரண கோரிக்கைகளையே (standard requests) பயன்படுத்துங்கள். உங்களுக்கு இருவழித் தொடர்பு (two-way talk) தேவைப்பட்டால், WebSockets-ஐப் பயன்படுத்துங்கள். ஆனால் பெரும்பாலான AI streaming தேவைகளுக்கு, SSE சிறந்த தேர்வாகும்.

உங்கள் செயலிகளில் AI தாமதத்தை (latency) எவ்வாறு கையாளுகிறீர்கள்? நீங்கள் தரவுகளை स्ट्रीम செய்கிறீர்களா அல்லது முழுப் பதிலுக்காகக் காத்திருக்கிறீர்களா?

ஆதாரம்: https://dev.to/__c1b9e06dc90a7e0a676b/taming-ai-latency-streaming-responses-with-server-sent-events-42d5