SSE ഉപയോഗിച്ച് AI ലേറ്റൻസി നിയന്ത്രിക്കാം

ഞാൻ ഒരു AI autocomplete ഫീച്ചർ നിർമ്മിച്ചു. ഉപയോക്താക്കൾക്ക് അത് ഒട്ടും ഇഷ്ടപ്പെട്ടില്ല.

ഓരോ കീസ്ട്രോക്കും ഒരു AI മോഡലിലേക്ക് റിക്വസ്റ്റ് അയക്കുന്നുണ്ടായിരുന്നു. പൂർണ്ണമായ മറുപടിക്കായി ഉപയോക്താക്കൾക്ക് 2 മുതൽ 3 സെക്കൻഡ് വരെ കാത്തിരിക്കേണ്ടി വന്നു. UI തകരാറിലായതുപോലെ തോന്നി.

ഞാൻ debouncing പരീക്ഷിച്ചു. caching പരീക്ഷിച്ചു. loading spinners ഉപയോഗിച്ചു. ഒന്നും ഫലിച്ചില്ല. അടിസ്ഥാനപരമായ പ്രശ്നം തുടർന്നതേയുള്ളൂ. ഡാറ്റ കാണുന്നതിന് മുമ്പ് ഉപയോക്താക്കൾക്ക് മുഴുവൻ ഉത്തരത്തിനും വേണ്ടി കാത്തിരിക്കേണ്ടി വന്നു.

മറുപടികൾ ഓരോ ഭാഗങ്ങളായി (chunk by chunk) സ്ട്രീം ചെയ്യുന്നതിനായി Server-Sent Events (SSE) ഉപയോഗിച്ച് ഞാൻ ഇത് പരിഹരിച്ചു.

പഴയ സാവധാനത്തിലുള്ള രീതി:

  • ഉപയോക്താവ് അക്ഷരങ്ങൾ ടൈപ്പ് ചെയ്യുന്നു
  • 300ms debounce
  • HTTP POST request
  • സെർവർ AI API വിളിക്കുന്നു (1-2 സെക്കൻഡ്)
  • സെർവർ പൂർണ്ണമായ മറുപടി നൽകുന്നു
  • ക്ലയന്റ് റെൻഡർ ചെയ്യുന്നു

2 സെക്കൻഡ് നേരം ഉപയോക്താവിന് ഒന്നും കാണാൻ കഴിഞ്ഞില്ല.

ഞാൻ polling പരിഗണിച്ചു, പക്ഷേ അത് അമിതമായ ജോലിഭാരം (overhead) ഉണ്ടാക്കുന്നു. WebSockets പ്രവർത്തിക്കും, പക്ഷേ ഒരു വശത്തേക്ക് മാത്രം ഡാറ്റ അയക്കുന്ന (one-way stream) രീതിക്ക് അവ അമിതമായി അനുഭവപ്പെടും.

ഞാൻ SSE ആണ് തിരഞ്ഞെടുത്തത്. ഒരു നീളമേറിയ കണക്ഷനിലൂടെ സെർവർ ടെക്സ്റ്റ് ഇവന്റുകൾ അയക്കുന്ന ഒരു സ്റ്റാൻഡേർഡ് ആണിത്.

എന്തുകൊണ്ടാണ് AI-ക്ക് SSE അനുയോജ്യമാകുന്നത്:

  • ഇത് വൺ-വേ (one-way) ആണ് (സെർവർ മുതൽ ക്ലയന്റ് വരെ)
  • ഇത് ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള JSON chunks ഉപയോഗിക്കുന്നു
  • ഇത് റീകണക്ഷനുകൾ (reconnections) സ്വയമേവ കൈകാര്യം ചെയ്യുന്നു
  • നിങ്ങൾക്ക് അധിക ലൈബ്രറികൾ ആവശ്യമില്ല

ഫലങ്ങൾ പെട്ടെന്നുതന്നെ ലഭിച്ചു. ആദ്യത്തെ വാക്ക് 300ms-ൽ താഴെ സമയം കൊണ്ട് പ്രത്യക്ഷപ്പെട്ടു. ഓരോ അക്ഷരമായി നിർദ്ദേശങ്ങൾ (suggestions) വരുന്നത് ഉപയോക്താക്കൾക്ക് കാണാൻ കഴിഞ്ഞു.

എന്റെ മെട്രിക്സുകൾ മെച്ചപ്പെട്ടു:

  • ആദ്യത്തെ വിഷ്വൽ റെസ്പോൺസ് ലഭിക്കാനുള്ള സമയം: 2.1s-ൽ നിന്ന് 0.3s-ലേക്ക്
  • ഉപയോക്തൃ ഇടപെടൽ (User engagement): 40% വർദ്ധിച്ചു
  • ഉപയോക്തൃ പരാതികൾ: പൂജ്യം

സ്ട്രീമിംഗ് എന്നത് കാഴ്ചപ്പാവിനെ (perception) സംബന്ധിച്ചുള്ളതാണ്. വേഗത കുറഞ്ഞതും എന്നാൽ ക്രമാനുഗതമായി മാറുന്നതുമായ (progressive) ഒരു UI, വേഗതയുള്ളതും എന്നാൽ നിശ്ചലവുമായ (static) ഒരു UI-യേക്കാൾ മികച്ചതാണ്. ഒരു വലിയ ടെക്സ്റ്റ് ബ്ലോക്കിനായി കാത്തിരിക്കുന്നതിനേക്കാൾ, വാക്ക് വാക്കായി ഉത്തരം വരുന്നത് കാണാനാണ് ഉപയോക്താക്കൾ ഇഷ്ടപ്പെടുന്നത്.

നിങ്ങളുടെ AI ഫീച്ചർ മന്ദഗതിയിലാണെന്ന് തോന്നുന്നുണ്ടെങ്കിൽ, ആദ്യം സ്ട്രീമിംഗ് പരീക്ഷിച്ചു നോക്കൂ.

ഉറവിടം: https://dev.to/__c1b9e06dc90a7e0a676b/taming-ai-latency-streaming-responses-with-server-sent-events-42d5

ഓപ്ഷണൽ ലേണിംഗ് കമ്മ്യൂണിറ്റി: https://t.me/GyaanSetuAi