WebSocket med flera kontexter
Den här guiden visar hur du bygger röstagenter i realtid med WebSocket API:t för flera kontexter.
Att orkestrera röstagenter med detta WebSocket API för flera kontexter är en komplex uppgift som rekommenderas för avancerade utvecklare. För en mer hanterad lösning kan du utforska vår produktplattform för agenter, som förenklar många av dessa utmaningar.
Översikt
Att bygga responsiva röstagenter kräver att du kan hantera ljudströmmar dynamiskt, hantera avbrott smidigt och behålla naturligt tal mellan samtalets turer. Vårt WebSocket API för flera kontexter för Text to Speech (TTS) är särskilt utformat för dessa scenarier.
Detta API utökar vår vanliga TTS WebSocket-funktionalitet genom att introducera konceptet ”kontexter”. Varje kontext fungerar som en oberoende ljudgenereringsström inom en och samma WebSocket-anslutning. Det gör att du kan:
- Hantera flera talrader samtidigt (t.ex. en agent som talar medan den förbereder ett svar på ett avbrott från användaren).
- Smidigt hantera avbrott från användare genom att stänga en befintlig talkontext och starta en ny.
- Bibehålla prosodisk konsekvens för yttranden inom samma logiska kontext.
- Optimera resursanvändningen genom att selektivt stänga kontexter som inte längre behövs.
WebSocket API:t för flera kontexter är optimerat för röstapplikationer och är inte avsett för att generera flera orelaterade ljudströmmar samtidigt. Varje anslutning är därför begränsad till 5 samtidiga kontexter.
Den här guiden går igenom hur du ansluter till WebSocket med flera kontexter, hanterar kontexter och tillämpar bästa praxis för att bygga engagerande röstagenter.
Bästa praxis
Den här bästa praxisen är viktig för att bygga responsiva och effektiva röstagenter med vårt WebSocket API för flera kontexter.
Använd en enda WebSocket-anslutning
Upprätta en WebSocket-anslutning för varje slutanvändarsession. Det minskar overhead och latens jämfört med att skapa flera anslutningar. I denna enda anslutning kan du hantera flera kontexter för olika delar av samtalet.
Streama svar i delar och generera meningar
När du genererar långa svar ska du streama texten i mindre delar och använda flaggan flush: true
i slutet av fullständiga meningar. Det förbättrar kvaliteten på det genererade ljudet och ökar
responsiviteten.
Hantera avbrott smidigt
Streama text till en kontext tills ett avbrott sker, skapa sedan en ny kontext och stäng den befintliga. Detta säkerställer smidiga övergångar när samtalets flöde ändras.
Hantera kontextens livscykel
Stäng oanvända kontexter direkt. Servern kan ha upp till 5 samtidiga kontexter per anslutning, men du bör stänga kontexter när de inte längre behövs.
Förhindra tidsgränser för kontexter
Kontexter får som standard en tidsgräns efter 20 sekunder och stängs automatiskt. Tidsgränsen för inaktivitet är en parameter på WebSocket-nivå som gäller alla kontexter och kan vara upp till 180 sekunder vid behov. Skicka ett tomt textmeddelande till en kontext för att återställa tidsgränsen.
Hantera avbrott
När en användare avbryter din agent bör du stänga den aktuella kontexten och skapa en ny:
Håll en kontext aktiv
Kontexter får automatiskt en tidsgräns efter 20 sekunders inaktivitet som standard. Om du behöver hålla en kontext aktiv utan att generera text (till exempel under en bearbetningsfördröjning) kan du skicka ett tomt textmeddelande för att återställa tidsgränsen.
Stäng WebSocket-anslutningen
När samtalet är slut kan du rensa alla kontexter genom att stänga socketen:
Komplett exempel på en samtalsagent
Krav
- Ett ElevenLabs-konto med en API-nyckel (lär dig hur du hittar din API-nyckel).
- Python eller Node.js (eller en annan JavaScript-runtime) installerat på din dator.
- Grundläggande kunskap om WebSocket-kommunikation. Vi rekommenderar att du läser vår guide om vanlig WebSocket-streaming för grundläggande koncept.
Konfiguration
Installera de nödvändiga beroendena för det språk du valt:
Skapa en .env-fil i din projektkatalog för att lagra din API-nyckel: