Transkriptioner och commit-strategier
Den här guiden visar hur du hanterar transkriptioner och commit-strategier med ElevenLabs Realtime Speech to Text API.
Praktisk guide · Förutsätter att du har slutfört guiden för klientsidig eller serversidig streaming.
Översikt
När du transkriberar ljud får du partiella och bekräftade transkriptioner.
- Partiella transkriptioner – preliminära transkriptionsresultat
- Bekräftade transkriptioner – slutresultatet för transkriptionssegmentet som skickas när ett “commit”-meddelande tas emot. En session kan ha flera bekräftade transkriptioner.
Commit-transkriptionen kan valfritt innehålla tidsstämplar på ordnivå. Detta tas endast emot när alternativet “include timestamps” är inställt på true.
Commit-strategier
När du skickar ljudblock via WebSocket kan transkriptionssegment bekräftas på två sätt: manuell commit eller röstaktivitetsdetektering (VAD).
Manuell commit
Med den manuella commit-strategin styr du när transkriptionssegment ska bekräftas. Detta är strategin som används som standard. När du bekräftar ett segment rensas den bearbetade, ackumulerade transkriptionen och ett nytt segment startas utan att sammanhang går förlorat. Att bekräfta var 20–30:e sekund är bra praxis för att förbättra fördröjningen. Även om du inte bekräftar manuellt bekräftar modellen automatiskt efter ungefär 36 sekunders ackumulerat ljud.
För bästa resultat bör du bekräfta under tysta perioder eller vid en annan lämplig punkt, till exempel vid ett turbyte i samtalet.
Att bekräfta manuellt flera gånger i snabb följd kan försämra modellens prestanda.
Skicka tidigare textsammanhang
När du skickar ljud för transkribering kan du skicka tidigare textsammanhang tillsammans med det första ljudblocket för att hjälpa modellen förstå talets sammanhang. Det är användbart i några scenarier:
- Agenttext för användningsfall med konversations-AI – gör det lättare för modellen att förstå samtalets sammanhang och skapa bättre transkriptioner.
- Återanslutning efter ett nätverksfel – gör att modellen kan fortsätta transkribera med den tidigare texten som vägledning.
- Allmän kontextinformation – en kort beskrivning av vad transkriptionen kommer att handla om hjälper modellen att förstå sammanhanget.
Att skicka previous_text-sammanhang är endast möjligt när du skickar det första ljudblocket via
connection.send(). Om du skickar det i efterföljande block uppstår ett fel. Tidigare text fungerar
bäst när den är kortare än 50 tecken.
Röstaktivitetsdetektering (VAD)
Med VAD-strategin identifierar transkriptionsmotorn automatiskt tal- och tystnadssegment. När en tystnadströskel nås bekräftar transkriptionsmotorn automatiskt transkriptionssegmentet.
När du transkriberar ljud från mikrofonen i klientsidesintegreringen rekommenderar vi att du använder VAD-strategin.
vad_silence_threshold_secs accepterar 0,192 till 3,0 sekunder. JavaScript- och React-SDK:erna accepterar endast 0,3 till 3,0.
Filtrera bakgrundsljud
Ange frågeparametern filter_background_audio=true för att minska falska aktiveringar från bakgrundstal, till exempel närliggande samtal, och omgivande brus. När filtrering är aktiverad använder röstaktivitetsdetekteringen en modell som är inställd för att ignorera bakgrundstal, och vad_threshold är som standard 0.15 om du inte anger ett eget värde.
filter_background_audio kan inte kombineras med include_timestamps. Om du anger båda skickar servern
felet invalid_request och stänger anslutningen.
Filtrering påverkar inte faktureringen: allt ljud du strömmar debiteras, även ljud som filtret ignorerar.
Håll anslutningen aktiv under tystnad
De officiella SDK:erna kopplar inte ned anslutningen när inga meddelanden kommer, så de flesta integreringar behöver inte detta. Om din egen WebSocket-klient, eller en proxy eller lastbalanserare däremellan, stänger anslutningen när inga ramar kommer på en stund kan du skicka den valfria frågeparametern keepalive_interval_ms vid anslutning. Detta är viktigt vid långa tysta perioder, till exempel ett telefonsamtal med pauser på 10–15 sekunder. Ungefär en gång per intervall skickar servern en keepalive-partial_transcript: tom (text: "") om det aktuella segmentet saknar obekräftad text, eller en upprepning av den senaste partiella texten om det finns sådan.
Keepalives är inte en kontinuerlig ping: du måste fortsätta strömma ljud (tystnadsramar går bra). Om du slutar skicka ljud skickas inga keepalives, och servern stänger anslutningen efter 15 sekunder utan klientmeddelanden. Den här servergränsen går inte att konfigurera.
- Accepterar ett heltal mellan
500och10000(millisekunder). Det är inaktiverat som standard; utelämna parametern för att behålla det befintliga beteendet. - Värden utanför intervallet eller värden som inte är heltal gör att servern skickar felet
invalid_requestoch stänger anslutningen. - Keepalives styrs av att modellen faktiskt bearbetar det tysta ljud du skickar, inte av en kontinuerlig timer, så de bekräftar också att transkriptionsvägen är aktiv.
- Ljud bearbetas i block på ungefär 1 sekund, så keepalives kommer ungefär en gång per intervall avrundat till den takten (till exempel utlöses
1000ungefär en gång i sekunden,3000ungefär var tredje sekund). En sessions första keepalive kommer ungefär 2 sekunder efter att den startat, eftersom servern buffrar de första cirka 2 sekunderna ljud före transkriberingen. Ställ in intervallet till högst ungefär en tredjedel av din egen läsningstimeout för att ha marginal. - En keepalives
textär endast tom när det aktuella segmentet ännu inte har någon obekräftad text. Om en paus inträffar efter tal men före en commit – tydligast medfilter_background_audio=trueeller i manuellt commit-läge utan bekräftelse – upprepar keepalive i stället den senaste partiella texten, så den preliminära texten aldrig töms. Efter en commit blir keepalives tomma igen tills nytt tal kommer. - Fungerar med både
commit_strategy=manualochcommit_strategy=vad, samt medfilter_background_audio=true. Har ingen påverkan på faktureringen utöver ljudet du redan strömmar. - Meddelandet
session_startedharconfigsom ekar tillbakakeepalive_interval_ms(nullnär det är inaktiverat).
En tom partial_transcript (text: "") betyder “inget tal i det aktuella segmentet”. En upprepad,
identisk partial_transcript under en paus är också en keepalive – klienter bör helt enkelt visa
partiella resultat som de redan gör i stället för att specialhantera upprepningen.
Lägg till parametern i WebSocket-URL:en:
Ljudformat som stöds
Bästa praxis
Ljudkvalitet
- För bästa resultat använder du en samplingsfrekvens på 16 kHz för optimal balans mellan kvalitet och bandbredd.
- Se till att ljudingången är ren och har minimalt bakgrundsbrus.
- Använd lämplig mikrofonförstärkning för att undvika klippning.
- Endast monoljud stöds för närvarande.
Blockstorlek
- Skicka ljudblock med en längd på 0,1–1 sekund för smidig streaming.
- Mindre block ger lägre fördröjning men mer overhead.
- Större block är effektivare men kan öka fördröjningen.