
AWS ukazuje skorší štart hlasu agentov s Kokoro na SageMaker AI
AWS opisuje postup, ktorý odosiela dokončené vety agenta modelu Kokoro-82M ešte pred vygenerovaním celej odpovede. Zámerom je začať syntézu skôr. Model s 82 miliónmi parametrov beží vo vlastnom kontajneri na koncovom bode SageMaker AI v reálnom čase, na GPU inštancii ml.g5.xlarge. Výsledky a implementačné zistenia pochádzajú od autorov tohto postupu.
Jedno spojenie pre viac viet
Rozhranie POST /invocations streamuje výstup pre jeden úplný vstup. WS /invocations-bidirectional-stream podporuje viac správ v jednom obojsmernom spojení. Kontajner po odoslaní audia a riadiacej správy synthesis_complete čaká na ďalší vstup; reláciu ukončí až explicitná správa klienta na zatvorenie.
Spracovanie v rámci jedného handlera je sekvenčné: počas prenosu audia predchádzajúcej vety sa ešte negeneruje audio nasledujúcej. Uvádzaný prínos preto vychádza zo skoršieho začatia prvej vety a z odstránenia opakovaného pripájania pri každej vete.
Delič viet prijíma celý reťazec aj postupne prichádzajúce fragmenty. Metóda feed() uvoľní nové dokončené vety a ponechá si nedokončený koniec; flush() na konci vstupu uvoľní zvyšný text. Autori uvádzajú overenie troch viet v jednej živej relácii, pričom každý vrátený zvukový úsek zodpovedal svojmu textu.
Prenos SageMaker AI doručuje vstupy kontajneru ako binárne rámce WebSocket. Handler Starlette očakávajúci textové rámce môže pri každej požiadavke vyvolať KeyError pre pole text, hoci stav endpointu zostáva InService. Ukážka podporuje oba typy rámcov, binárny vstup dekóduje ako UTF-8 a odporúča testovať aj binárne správy.
Čo autori merali
Na oddelené meranie časovania TTS použili text s 267 znakmi a štyrmi vetami. Pre odoslanie celého bloku aj iba prvej vety vykonali po päť pokusov na živom endpointe. Priemerný čas do prvého bajtu audia podľa nich klesol z 329,3 na 156,7 milisekundy, teda o 52,4 %. Ide o výsledok tohto konkrétneho porovnania.
Kompletná ukážka používa agenta Strands s Amazon Bedrock v prostredí AgentCore. Oddelené spojenia slúžia pre SSE smerom k prehliadaču, generovanie textu v Bedrock a obojsmernú syntézu Kokoro. Režim bidi súbežne prijíma text a audio cez spoločný rad udalostí; batch čaká so syntézou na úplnú odpoveď.
Pri rovnakom prompte, živom modeli Bedrock a endpointe autori uvádzajú 2,4-násobne rýchlejší príchod prvého audia v lokálnom kontajneri a 3,5-násobne rýchlejší v nasadenom AgentCore. Reprodukčný test meria čas prvej udalosti audio_chunk voči agent_start. Obe verzie kódujú audio pre volajúceho do base64, pretože BedrockAgentCoreApp odovzdáva slovníky serializovateľné do JSON, ktoré SDK mení na SSE rámce.
Prenos a podmienky nasadenia
Autori skúmali náklady prenosu na 24 klipoch, porovnávali MP3 s AAC a pomocou Amazon Transcribe podľa svojho opisu nezistili rozdiel v kvalite medzi kódovaniami. Base64 zväčšilo objem približne o 33 %. V jednej odpovedi prišli štyri logické MP3 rámce v šiestich častiach prenosu; dve sa končili uprostred rámca. Prijímač preto potrebuje buffer a opätovné skladanie.
Alternatíva na spojení s modelom kombinuje surové binárne audio a riadiace správy JSON v existujúcej obojsmernej relácii, bez base64 a SSE na tomto úseku. Ako riadenie sa rozpozná len celý úsek dekódovateľný na úplný objekt JSON; inak ide o audio. Tým sa predchádza zámene PCM za JSON iba pre úvodnú zloženú zátvorku. Pre existujúci SSE frontend autori odporúčajú ponechať base64; jednotný prenos zvážiť pri novej hlasovej vetve alebo priorite latencie.
Predpoklady zahŕňajú oprávnenia pre SageMaker AI, AgentCore, IAM a ECR, inicializované AWS CDK v2, Python 3.12 alebo novší, uv, Docker, podporu invoke_endpoint_with_bidirectional_stream v Boto3, znalosť WebSocket a ASGI a referenčný kód. Predpripravené balíky podkladového klienta HTTP/2 sú dostupné len pre Python 3.12 a novší. Kontajner musí deklarovať com.amazonaws.sagemaker.capabilities.bidirectional-streaming=true.
Príkaz speech-infra deploy vytvorí infraštruktúru endpointu, roly IAM, cache váh v S3, obraz kontajnera, model a konfiguráciu endpointu. Nasleduje agent-infra deploy pre runtime AgentCore. Odstraňovanie prebieha opačne; príkazy destroy ponechávajú bucket S3 a repozitár ECR, ktoré treba odstrániť osobitne, aby sa zastavili ich poplatky za úložisko. Autori tiež upozorňujú na staršiu pripnutú verziu PyTorch zasiahnutú PYSEC-2026-2286: ako opravenú uvádzajú torch 2.10.0 a pred použitím nad rámec overenia hodnoty žiadajú pin preveriť a aktualizovať.