Pomiń

Jak optymalizować opóźnienia w Conversational AI?

Opóźnienie to coś, co odróżnia dobre aplikacje Conversational AI od świetnych

Diagram of a speech processing system showing data flow from user input to output speech, including components like telephone network, ASR, VAD, LLM, TTS, and latency indicators.

W większości aplikacji opóźnienie nie jest dużym problemem. Ale w przypadku conversational AI to właśnie opóźnienie decyduje, czy aplikacja jest dobra, czy świetna.

Celem conversational AI jest stworzenie rozmowy, która brzmi i działa jak rozmowa z człowiekiem, a przy tym przewyższa go inteligencją. Żeby to osiągnąć, aplikacja nie może robić długich przerw w trakcie rozmowy. Inaczej cała iluzja znika.

Wyzwanie z opóźnieniami w conversational AI jest tym większe, że składa się ono z wielu etapów. Każdy z nich to osobny, zaawansowany proces, a każdy dokłada swoje opóźnienie.

Jako firma zajmująca się generowaniem głosu, długo badaliśmy, jak minimalizować opóźnienia w conversational AI. Chcemy podzielić się tym, czego się nauczyliśmy – może przyda ci się, jeśli budujesz własną aplikację.

Cztery kluczowe elementy

Każda aplikacja conversational AI składa się z co najmniej czterech kroków: speech-to-text, turn-taking, przetwarzania tekstu (czyli LLM) i text-to-speech. Te kroki mogą działać równolegle, ale każdy z nich dokłada swoje opóźnienie.

Opóźnienia w conversational AI są wyjątkowe. W wielu procesach można wskazać jeden główny wąski gardło. Na przykład, gdy strona wysyła zapytanie do bazy danych, to sieć decyduje o całkowitym opóźnieniu, a reszta to drobiazgi. W conversational AI każdy etap dokłada swoje opóźnienie i są one do siebie zbliżone. Dlatego liczy się suma wszystkich części.

Automatic Speech Recognition

Systemowe „ucho”

Automatic speech recognition (ASR)—czyli zamiana mowy na tekst (STT)—to proces zamiany nagrania głosowego na tekst.

Opóźnienie ASR to nie czas generowania tekstu, bo zamiana mowy na tekst działa w tle, gdy użytkownik mówi. Liczy się czas od końca wypowiedzi do końca generowania tekstu.

Flowchart showing user input speech processed by ASR system.

Dlatego krótkie i długie wypowiedzi mogą mieć podobne opóźnienie ASR. Opóźnienie zależy od konkretnego rozwiązania (czasem nie ma w ogóle opóźnienia sieciowego, jeśli model działa w przeglądarce, np. w Chrome/Chromium). Standardowy model open source, Whisper, dodaje ponad 300 ms opóźnienia. Nasza autorska wersja to mniej niż 100 ms.

Turn-Taking / Interruption

Systemowy „instynkt”

Turn-taking / Interruption (TTI) to proces, który wykrywa, kiedy użytkownik skończył mówić. Model odpowiedzialny za to to Voice Activity Detector (VAD).

Turn-taking to zestaw złożonych reguł. Krótkie wtrącenia (np. „aha”) nie powinny przerywać rozmowy, bo wtedy byłaby ona zbyt poszarpana. Model musi rozpoznać, kiedy użytkownik naprawdę chce zwrócić na siebie uwagę i kiedy skończył mówić.

Dobry VAD nie sygnalizuje nowej tury za każdym razem, gdy wykryje ciszę. Cisza pojawia się między słowami i frazami, więc model musi mieć pewność, że użytkownik naprawdę skończył mówić. Żeby to działało, musi wykryć odpowiedni próg ciszy (czyli brak mowy). To wprowadza opóźnienie, które wpływa na całość.

Flowchart showing the process of speech recognition and language modeling, with steps including input speech, ASR, VAD, and LLM.

Technicznie rzecz biorąc, gdyby wszystkie inne elementy conversational AI miały zero opóźnienia, opóźnienie TTI byłoby nawet wskazane. Ludzie też robią krótką pauzę przed odpowiedzią. Maszyna, która robi podobnie, brzmi bardziej naturalnie. Ale ponieważ inne elementy już dokładają swoje opóźnienia, najlepiej, żeby TTI było jak najkrótsze.

Text Processing

Systemowy „mózg”

Teraz system musi wygenerować odpowiedź. Dziś robi się to zwykle przez Large Language Model (LLM), np. GPT-4 czy Gemini Flash 1.5.

Wybór modelu językowego ma duże znaczenie. Modele takie jak Gemini Flash 1.5 są bardzo szybkie—generują odpowiedzi w mniej niż 350 ms. Bardziej rozbudowane modele, które radzą sobie z trudniejszymi pytaniami—np. GPT-4 czy Claude—potrzebują 700-1000 ms.Wybór odpowiedniego modelu to najprostszy sposób na skrócenie opóźnienia w conversational AI.

Opóźnienie LLM to czas, jaki potrzeba, żeby zacząć generować tokeny. Te tokeny można od razu przesyłać dalej do procesu text-to-speech . Ponieważ text-to-speech działa w tempie zbliżonym do ludzkiej mowy, LLM zawsze jest szybszy—najważniejsze jest opóźnienie pierwszego tokena (czyli time to first byte).

Flowchart of speech processing system showing input speech, ASR, VAD, LLM, and TTS components with data flow and latency indicated.

Na opóźnienie LLM wpływa nie tylko wybór modelu. Liczy się też długość prompta i wielkość bazy wiedzy. Im więcej model musi przetworzyć, tym dłużej to trwa. Trzeba więc znaleźć balans: dać modelowi wystarczająco dużo kontekstu, ale go nie przeciążać.

Text to Speech

Systemowe „usta”

Ostatni element conversational AI to text-to-speech (TTS). Opóźnienie text-to-speech to czas od otrzymania tokenów z przetwarzania tekstu do rozpoczęcia mówienia. To wszystko—bo kolejne tokeny pojawiają się szybciej niż ludzka mowa, więc liczy się tylko czas do pierwszego dźwięku.

Diagram of a speech processing system showing input speech, ASR, VAD, LLM, TTS, and output speech with data flow and latency indicators.

Kiedyś text-to-speech było wolne i generowało mowę nawet w 2-3 sekundy. Teraz nowoczesne modele, jak nasz silnik Turbo, robią to w 300 ms, a nowy Flash TTS jest jeszcze szybszy. Flash ma czas modelu 75 ms i osiąga e2e 135 ms opóźnienia do pierwszego dźwięku—najlepszy wynik na rynku (musimy się pochwalić!).

Dodatkowe czynniki

Poza czterema głównymi elementami są jeszcze inne rzeczy, które wpływają na opóźnienie w conversational AI.

Opóźnienie sieci

Zawsze będzie jakieś opóźnienie związane z przesyłaniem danych. W niektórych aplikacjach conversational AI procesy ASR, TTI, LLM i TTS najlepiej umieścić w jednym miejscu, żeby jedynym większym opóźnieniem sieciowym była droga między użytkownikiem a systemem.To daje nam przewagę, bo mamy własne TTS i transkrypcję, więc omijamy dwa połączenia z serwerem.

Diagram of a speech processing system showing input speech, ASR, VAD, LLM, TTS, and output speech with latency and network latency indicators.

Wywołania funkcji

Wiele aplikacji conversational AI służy do wywoływania funkcji (czyli korzystania z narzędzi i usług). Na przykład mogę poprosić AI o sprawdzenie pogody. To wymaga dodatkowych API wywołań na etapie przetwarzania tekstu, co może mocno wydłużyć czas odpowiedzi.

Jeśli np. chcę zamówić pizzę głosowo, może być potrzebnych kilka wywołań API, z których niektóre są wolne (np. płatność kartą).

Diagram of a speech processing system showing input speech, ASR, VAD, LLM/function calling, TTS, and output speech with data flow and latency indicated.

System conversational AI może jednak skrócić oczekiwanie, prosząc LLM o odpowiedź zanim funkcja się wykona (np. „Już sprawdzam pogodę”). To przypomina prawdziwą rozmowę i nie zostawia użytkownika bez reakcji.

Flowchart of a speech synthesis system showing user input, system processing, and output speech, with components like ASR, VAD, TTS, and LLM.

Takie asynchroniczne schematy zwykle realizuje się przez webhooki, żeby uniknąć długich zapytań.

Telefonia

Często w platformach conversational AI użytkownik może zadzwonić przez telefon (albo AI może zadzwonić za niego). Telefonia dokłada kolejne opóźnienie—i zależy ono mocno od lokalizacji.

Diagram of a speech processing system showing data flow and latency between components.

Podstawowo telefonia to dodatkowe 200 ms opóźnienia w tym samym regionie. Przy połączeniach międzynarodowych (np. Azja → USA) czas rośnie nawet do 500 ms. To częste, jeśli użytkownik ma numer z innego kraju niż system—wtedy połączenie musi przejść przez sieć bazową.

Na koniec

Mamy nadzieję, że ta podróż po conversational agentach AI była ciekawa. Podsumowując: aplikacje powinny celować w opóźnienie poniżej sekundy. Najłatwiej osiągnąć to przez dobór odpowiedniego LLM. Warto też informować użytkownika, gdy w tle dzieje się coś bardziej złożonego, żeby nie było długich przerw.

Na końcu chodzi o realizm. Użytkownik ma czuć się jak w rozmowie z człowiekiem, a jednocześnie korzystać z zalet programu. Dzięki optymalizacji każdego etapu to już możliwe.

W ElevenLabs optymalizujemy każdy element systemu głosowych agentów AI dzięki naszym nowoczesnym modelom STT i TTS. Pracując nad każdym etapem, możemy zapewnić płynność rozmowy. Takie podejście pozwala nam skracać opóźnienia—nawet o 1 ms—na każdym kroku.

Przeglądaj artykuły zespołu ElevenLabs

ElevenLabs

Twórz z najwyższą jakością dźwięku AI