Jak rozwiązałem problem opóźnień AI dzięki streamingowi i cachowaniu
Zbudowałem asystenta czatu dla klienta. Działał słabo.
Użytkownicy zadawali pytania. Czekali 15 sekund. Widzieli pusty ekran. Potem odchodzili. Klient był niezadowolony.
Problemem nie był model AI. Problemem był mój kod. Czekałem na pełną odpowiedź, zanim pokazałem cokolwiek użytkownikowi.
Próbowałem kilku rozwiązań. Async nie pomogło. Cachowanie dokładnego tekstu działało tylko w przypadku FAQ. Ograniczanie liczby tokenów sprawiało, że odpowiedzi stawały się bezużyteczne.
Rozwiązałem to za pomocą dwóch metod.
- Streaming
Większość API AI obsługuje streaming. Zamiast czekać na cały blok tekstu, otrzymujesz małe fragmenty (chunks). Możesz je wyświetlać w miarę ich napływania.
Pierwsze słowo pojawia się w 300 ms. Pełna odpowiedź wciąż wymaga czasu, ale użytkownik natychmiast widzi postęp. To sprawia, że użytkownicy pozostają zaangażowani.
- Semantic Caching
Użytkownicy często zadają podobne pytania. Zbudowałem cache, który rozumie znaczenie.
Używam osadzeń zdań (sentence embeddings) i bazy danych wektorowych (vector database). Zanim wywołam API, sprawdzam, czy w moim cache istnieje podobne pytanie.
Jeśli istnieje dopasowanie, zwracam odpowiedź w 10 ms. To wyeliminowało potrzebę wywoływania API u 30% moich użytkowników.
Wyniki:
• Streaming poprawia doświadczenie użytkownika, pokazując postęp w czasie rzeczywistym. • Semantic caching redukuje koszty i zmniejsza opóźnienia przy powtarzających się pytaniach.
Kompromisy:
• Streaming sprawia, że backend staje się bardziej złożony. Musisz zarządzać otwartymi połączeniami. • Cachowanie wymaga dodatkowego sprzętu lub oprogramowania, takiego jak baza danych wektorowych. • Ustawianie progów (thresholds) cache'owania jest trudne. Jeśli próg jest zbyt wysoki, przegapisz dopasowania. Jeśli jest zbyt niski, będziesz podawać błędne odpowiedzi.
Przestań obwiniać model AI za wolne działanie. Spójrz na to, jak zarządzasz danymi.
Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi