Przedstawiamy Eleven v3 Alpha

Wypróbuj v3

Jak optymalizować opóźnienia w Conversational AI?

Opóźnienia to klucz do doskonałych aplikacji Conversational AI

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. Jednak dla Conversational AI opóźnienie to klucz do sukcesu.

Na początek, celem Conversational AI jest stworzenie wrażenia rozmowy z człowiekiem, przewyższając go inteligencją. Aby to osiągnąć, aplikacja musi prowadzić dialog bez długich przerw. W przeciwnym razie realizm znika.

Wyzwanie związane z opóźnieniem w Conversational AI jest złożone ze względu na jego fragmentaryczną naturę. Conversational AI to seria procesów pośrednich, wszystkie uznawane za najnowocześniejsze w swoich dziedzinach. Każdy z tych procesów dodaje swoje opóźnienie.

Jako firma zajmująca się generowaniem głosu, długo badaliśmy, jak zminimalizować opóźnienia w Conversational AI. Dziś chcemy podzielić się naszymi doświadczeniami, mając nadzieję, że będą pomocne dla każdego, kto chce tworzyć aplikacje Conversational AI.

Cztery Główne Komponenty

Każda aplikacja Conversational AI obejmuje co najmniej cztery kroki: speech-to-text, zmiana mówcy, przetwarzanie tekstu (np. LLM) i text-to-speech. Choć te kroki są wykonywane równolegle, każdy z nich dodaje swoje opóźnienie.

Opóźnienie w Conversational AI jest unikalne. Wiele problemów z opóźnieniem procesów można sprowadzić do jednego wąskiego gardła. Na przykład, gdy strona internetowa wysyła zapytanie do bazy danych, opóźnienie sieciowe napędza całkowite opóźnienie. Jednak komponenty opóźnienia w Conversational AI nie są drastycznie zróżnicowane. Są nierówne, ale wkład każdego komponentu w opóźnienie jest podobny. Dlatego opóźnienie jest sumą części.

Automatyczne Rozpoznawanie Mowy

„Ucho” Systemu

Automatyczne rozpoznawanie mowy (ASR)—czasem nazywane speech-to-text (STT)—to proces konwersji mowy na tekst pisany.

Opóźnienie ASR to nie czas generowania tekstu, ponieważ proces speech-to-text działa w tle, gdy użytkownik mówi. Zamiast tego, opóźnienie to czas między zakończeniem mowy a zakończeniem generowania tekstu.

Flowchart showing user input speech processed by ASR system.

Krótko mówiąc, krótkie i długie interwały mowy mogą mieć podobne opóźnienie ASR. Opóźnienie może się różnić w zależności od implementacji ASR (w niektórych przypadkach nie ma żadnego opóźnienia sieciowego, ponieważ model jest osadzony w przeglądarce, takiej jak Chrome/Chromium). Standardowy model open source, Whisper, dodaje 300ms + opóźnienia. Nasza niestandardowa implementacja dodaje <100ms.

Zmiana Mówcy / Przerwanie

„Instynkt” Systemu

Zmiana mówcy / Przerwanie (TTI) to proces pośredni, który określa, kiedy użytkownik skończył mówić. Podstawowy model to Detektor Aktywności Głosu (VAD).

Zmiana mówcy obejmuje złożony zestaw zasad. Krótki wybuch mowy (np. „uh-huh”) nie powinien wywoływać zmiany; w przeciwnym razie rozmowy byłyby zbyt przerywane. Musi ocenić, kiedy użytkownik faktycznie próbuje zwrócić uwagę modelu. Musi także określić, kiedy użytkownik skończył przekazywać swoje myśli.

Dobry VAD nie sygnalizuje nowej zmiany za każdym razem, gdy wykryje ciszę. Cisza występuje między słowami (i frazami), a model musi być pewny, że użytkownik faktycznie skończył mówić. Aby to osiągnąć, musi szukać progu ciszy (lub bardziej precyzyjnie, braku mowy). Ten proces wprowadza opóźnienie, które przyczynia się do ogólnego opóźnienia odczuwanego przez użytkownika.

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 komponenty Conversational AI miały zero opóźnienia, opóźnienie przypisane TTI byłoby korzystne. Ludzie robią przerwę przed odpowiedzią na mowę. Maszyna robiąca podobną pauzę dodaje realizmu do interakcji. Jednak ponieważ inne komponenty Conversational AI już wprowadzają opóźnienia, minimalne opóźnienie TTI jest idealne.

Przetwarzanie Tekstu

„Mózg” Systemu

Następnie system musi wygenerować odpowiedź. Dziś zazwyczaj odbywa się to za pomocą dużego modelu językowego (LLM), takiego jak GPT-4 lub Gemini Flash 1.5.

Wybór modelu językowego ma duże znaczenie. Modele takie jak Gemini Flash 1.5 są niezwykle szybkie—generują wyniki w mniej niż 350ms. Bardziej zaawansowane modele, które mogą obsługiwać bardziej złożone zapytania—takie jak warianty GPT-4 i Claude—mogą zająć od 700ms do 1000ms.Wybór odpowiedniego modelu to zazwyczaj najłatwiejszy sposób na zmniejszenie opóźnienia przy optymalizacji procesu Conversational AI.

Jednak opóźnienie LLM to czas potrzebny na rozpoczęcie generowania tokenów. Te tokeny mogą być natychmiast przesyłane do kolejnego procesu text-to-speech. Ponieważ text-to-speech jest spowolniony przez naturalne tempo ludzkiego głosu, LLM niezawodnie go wyprzedza—najważniejsze jest opóźnienie pierwszego tokena (czyli czas do pierwszego bajtu).

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

Istnieją inne czynniki wpływające na opóźnienie LLM poza wyborem modelu. Należą do nich długość promptu i wielkość bazy wiedzy. Im większe, tym dłuższe opóźnienie. Sprowadza się to do prostego zasady: im więcej LLM musi rozważyć, tym dłużej to trwa. Dlatego firmy muszą znaleźć równowagę między odpowiednią ilością kontekstu a nie przeciążaniem modelu.

Text to Speech

„Usta” Systemu

Ostatnim komponentem Conversational AI jest text-to-speech (TTS). Opóźnienie text-to-speech to czas potrzebny na rozpoczęcie mówienia po otrzymaniu tokenów z przetwarzania tekstu. To wszystko—ponieważ dodatkowe tokeny są dostępne w tempie szybszym niż ludzka mowa, opóźnienie text-to-speech to wyłącznie czas do pierwszego bajtu.

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

Wcześniej text-to-speech było szczególnie wolne, zajmując nawet 2-3s na wygenerowanie mowy. Jednak nowoczesne modele, takie jak nasz silnik Turbo, potrafią generować mowę z opóźnieniem zaledwie 300ms, a nowy silnik Flash TTS jest jeszcze szybszy. Flash ma czas modelu 75ms i może osiągnąć 135ms czasu do pierwszego bajtu audio, najlepszy wynik w branży (musimy się trochę pochwalić!).

Dodatkowe Czynniki

Poza czterema komponentami, istnieją dodatkowe czynniki wpływające na całkowite opóźnienie Conversational AI.

Opóźnienie Sieciowe

Zawsze będzie opóźnienie związane z przesyłaniem danych z jednego miejsca do drugiego. Dla niektórych aplikacji Conversational AI, procesy ASR, TTI, LLM i TTS powinny być idealnie współlokalizowane, więc jedynym źródłem istotnego opóźnienia sieciowego są ścieżki między mówcą a całym systemem.Daje nam to przewagę w opóźnieniu, ponieważ możemy zaoszczędzić dwa połączenia z serwerem, mając własne TTS i wewnętrzne rozwiązanie transkrypcyjne.

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

Wywoływanie Funkcji

Wiele aplikacji Conversational AI istnieje, aby wywoływać funkcje (np. interfejs z narzędziami i usługami). Na przykład mogę poprosić AI o sprawdzenie pogody. Wymaga to dodatkowych wywołań API na warstwie przetwarzania tekstu, co może znacznie zwiększyć opóźnienie w zależności od potrzeb.

Na przykład, jeśli muszę zamówić pizzę werbalnie, może być konieczne wiele wywołań API, niektóre z nadmiernym opóźnieniem (np. przetwarzanie karty kredytowej).

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

Jednak system Conversational AI może przeciwdziałać opóźnieniom związanym z wywoływaniem funkcji, prosząc LLM o odpowiedź do użytkownika przed zakończeniem wywołania funkcji (np. „Pozwól, że sprawdzę pogodę dla ciebie”). To modeluje prawdziwą rozmowę i nie pozostawia użytkownika bez zaangażowania.

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

Te asynchroniczne wzorce są zazwyczaj realizowane poprzez wykorzystanie webhooków, aby uniknąć długotrwałych żądań.

Telefonia

Inną powszechną funkcją platform Conversational AI jest umożliwienie użytkownikowi połączenia się przez telefon (lub w niektórych przypadkach wykonanie połączenia telefonicznego w imieniu użytkownika). Telefonia wprowadzi dodatkowe opóźnienie—a to opóźnienie może być silnie zależne od geografii.

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

Podstawowo, telefonia wprowadzi dodatkowe 200ms opóźnienia, jeśli jest ograniczona do tego samego regionu. Dla połączeń globalnych (np. Azja → USA), czas podróży może znacznie wzrosnąć, z opóźnieniem sięgającym ~500ms. Ten wzorzec może być powszechny, jeśli użytkownicy mają numery telefonów poza regionem, w którym się znajdują—wymuszając skok do sieci telefonicznych ich kraju bazowego.

Na Zakończenie

Mamy nadzieję, że ta podróż po Conversational AI była interesująca. Podsumowując, aplikacje powinny dążyć do opóźnienia poniżej sekundy. Można to zazwyczaj osiągnąć, wybierając odpowiedni LLM do zadania. Powinny także komunikować się z użytkownikiem, gdy bardziej złożone procesy działają w tle, aby zapobiec długim przerwom.

Na koniec dnia celem jest stworzenie realizmu. Użytkownik musi czuć łatwość rozmowy z człowiekiem, jednocześnie korzystając z zalet programu komputerowego. Dzięki usprawnieniu procesów podrzędnych, jest to teraz możliwe.

W ElevenLabs optymalizujemy każdą część systemu Conversational AI z naszymi najnowocześniejszymi modelami STT i TTS. Pracując nad każdą częścią procesu, możemy osiągnąć płynne przepływy rozmów. To podejście z góry na dół pozwala nam zredukować opóźnienie—even o 1ms—na każdym etapie.

Zobacz więcej

ElevenLabs

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

Jak optymalizować opóźnienia w Conversational AI? | ElevenLabs