WebSocket z wieloma kontekstami
Ten przewodnik pokazuje, jak tworzyć agentów głosowych w czasie rzeczywistym za pomocą API WebSocket z wieloma kontekstami.
Orkiestracja agentów głosowych za pomocą tego API WebSocket z wieloma kontekstami to złożone zadanie, zalecane zaawansowanym deweloperom. Jeśli szukasz bardziej zarządzanego rozwiązania, sprawdź nasz produkt Agents Platform, który upraszcza wiele z tych wyzwań.
Przegląd
Tworzenie responsywnych agentów głosowych wymaga dynamicznego zarządzania strumieniami audio, sprawnego obsługiwania przerwań i zachowania naturalnie brzmiącej mowy w kolejnych turach rozmowy. Nasze API WebSocket z wieloma kontekstami dla Text to Speech (TTS) zostało stworzone właśnie do takich zastosowań.
To API rozszerza nasze standardowe funkcje TTS WebSocket, wprowadzając pojęcie „kontekstów”. Każdy kontekst działa jako niezależny strumień generowania audio w ramach jednego połączenia WebSocket. Dzięki temu możesz:
- Zarządzać równocześnie wieloma wypowiedziami (np. gdy agent mówi, a jednocześnie przygotowuje odpowiedź na przerwanie przez użytkownika).
- Płynnie obsługiwać wtrącenia użytkownika, zamykając bieżący kontekst mowy i rozpoczynając nowy.
- Zachować spójność prozodyczną wypowiedzi w tym samym kontekście logicznym.
- Optymalizować użycie zasobów, zamykając konteksty, które nie są już potrzebne.
API WebSocket z wieloma kontekstami jest zoptymalizowane dla aplikacji głosowych i nie służy do jednoczesnego generowania wielu niepowiązanych strumieni audio. Dlatego każde połączenie obsługuje maksymalnie 5 aktywnych kontekstów.
Ten przewodnik przeprowadzi cię przez łączenie z WebSocketem z wieloma kontekstami, zarządzanie kontekstami i dobre praktyki tworzenia angażujących agentów głosowych.
Dobre praktyki
Te dobre praktyki są kluczowe przy tworzeniu responsywnych i wydajnych agentów głosowych z naszym API WebSocket z wieloma kontekstami.
Używaj jednego połączenia WebSocket
Utwórz jedno połączenie WebSocket dla każdej sesji użytkownika końcowego. Zmniejsza to narzut i opóźnienia w porównaniu z tworzeniem wielu połączeń. W ramach tego jednego połączenia możesz zarządzać wieloma kontekstami dla różnych części rozmowy.
Przesyłaj odpowiedzi fragmentami, generuj zdania
Przy generowaniu długich odpowiedzi przesyłaj tekst w mniejszych fragmentach i używaj flagi flush: true
na końcu pełnych zdań. Poprawia to jakość generowanego audio i zwiększa
responsywność.
Sprawnie obsługuj przerwania
Przesyłaj tekst do jednego kontekstu, aż nastąpi przerwanie, a następnie utwórz nowy kontekst i zamknij poprzedni. Takie podejście zapewnia płynne przejścia, gdy zmienia się tok rozmowy.
Zarządzaj cyklem życia kontekstu
Szybko zamykaj nieużywane konteksty. Serwer może utrzymywać do 5 aktywnych kontekstów na połączenie, ale należy zamykać konteksty, gdy nie są już potrzebne.
Zapobiegaj przekroczeniu limitu czasu kontekstów
Domyślnie konteksty przekraczają limit czasu po 20 sekundach i są automatycznie zamykane. Limit bezczynności to parametr na poziomie websocketu, który dotyczy wszystkich kontekstów i w razie potrzeby może wynosić do 180 sekund. Wyślij pustą wiadomość tekstową do kontekstu, aby zresetować licznik czasu.
Obsługa przerwań
Gdy użytkownik przerwie agentowi, należy zamknąć bieżący kontekst i utworzyć nowy:
Utrzymywanie aktywnego kontekstu
Konteksty automatycznie przekraczają limit czasu po domyślnych 20 sekundach bezczynności. Jeśli chcesz utrzymać aktywny kontekst bez generowania tekstu (na przykład podczas opóźnienia przetwarzania), możesz wysłać pustą wiadomość tekstową, aby zresetować licznik czasu.
Zamykanie połączenia WebSocket
Gdy rozmowa się kończy, możesz zamknąć wszystkie konteksty, zamykając socket:
Pełny przykład agenta konwersacyjnego
Wymagania
- Konto ElevenLabs z kluczem API (dowiedz się, jak znaleźć klucz API).
- Python lub Node.js (albo inne środowisko JavaScript) zainstalowane na komputerze.
- Znajomość komunikacji WebSocket. W ramach wprowadzenia polecamy nasz przewodnik po standardowym streamingu WebSocket.
Konfiguracja
Zainstaluj wymagane zależności dla wybranego języka:
Utwórz plik .env w katalogu projektu, aby przechowywać klucz API: