AI u stvarnom vremenu siguran za preglednik kroz API Gateway: Efemerni tokeni, Tenant Policy i glasovne kontrole sesije
Praktična arhitektura za preglednik i mobilni glasovni AI: održavajte niske latencije medija u stvarnom vremenu s kratkotrajnim vjerodajnicama klijenta dok pristupnik provodi politiku zakupca, provjere proračuna, kontrole alata i revizijske tragove.
Preglednici i mobilne aplikacije ne bi trebale primati dugotrajne API ključeve pružatelja usluga. Međutim, za glasovnu umjetnu inteligenciju u stvarnom vremenu slanje svakog audio paketa kroz pristupnik može dodati kašnjenje, operativne troškove i načine kvara. Bolji je obrazac držati gateway u kontrolnoj ravnini: autentificirati korisnika, nametnuti politiku stanara, rezervirati proračun, iskovati usku kratkotrajnu vjerodajnicu u stvarnom vremenu i dopustiti medijima koji su osjetljivi na kašnjenje da koriste pružateljev prijenos u stvarnom vremenu gdje je to prikladno.
Ovaj članak opisuje uzorak implementacije za timove koji izrađuju glasovne agente, pomoćnike poziva, mobilne učitelje, kopilote podrške ili glasovna sučelja unutar aplikacije putem AI API pristupnika. Cilj je sigurnost preglednika bez gubitka upravljanja zakupcem.
Problem: izravne veze u stvarnom vremenu zaobilaze vaše kontrole
Obični proxy na strani poslužitelja je privlačan jer centralizira ključeve i vidljivost. Za standardne tekstualne zahtjeve to je često pravi model. Zvuk u stvarnom vremenu je drugačiji. Glasovna sesija može uključivati kontinuirani ulaz mikrofona, dvosmjerni audio izlaz, prekide, pozive alata i stroga očekivanja kašnjenja. Proksiranje svih medija putem vašeg pristupnika može pretvoriti pristupnik u medijski relej s velikom propusnošću umjesto usluge pravila i naplate.
Izravne veze između preglednika i pružatelja usluga rješavaju kašnjenje, ali stvaraju drugačiji problem:
- Preglednik ne može sigurno držati API ključ standardnog pružatelja usluge.
- Provjere proračuna stanara mogu se preskočiti ako se aplikacija povezuje izravno.
- Model, regija, glas, modalitet i ograničenja alata postaju obećanja na strani klijenta.
- Pripisivanje korištenja postaje nepotpuno ili kasni.
- Sigurnosni timovi gube točku odluke koja se može provjeriti prije početka sesije.
Praktični dizajn nije "proxy svaki bajt". To je "broker svake sesije."
Činjenice, preporuke i predviđanja
Činjenice: pružatelji AI u stvarnom vremenu sve više podržavaju prijenose niske latencije kao što su WebRTC, WebSocket i SIP. Javna dokumentacija za OpenAI Realtime API opisuje sučelja niske latencije u stvarnom vremenu, uključujući WebRTC. Smjernice za WebRTC u stvarnom vremenu Azure OpenAI opisuju aplikaciju preglednika koja koristi uslugu pozadinskog tokena za dohvaćanje efemernog tokena prije pokretanja WebRTC veze i upozorava protiv upotrebe standardnog API ključa u klijentskoj aplikaciji. Upute za OpenAI Agents SDK u stvarnom vremenu također preporučuju tok u kojem backend stvara kratkotrajni efemerni token klijenta, a preglednik ga koristi za uspostavljanje WebRTC veze.
Preporuke: Tretirajte pristupnik kao autoritet sesije. Trebao bi odlučiti može li postojati sesija u stvarnom vremenu, s kojim modelom, u kojoj regiji, za kojeg stanara, pod kojim proračunom i s kojim alatima. Klijent bi trebao primiti samo minimalnu kratkotrajnu vjerodajnicu potrebnu za pokretanje odobrene sesije.
Predviđanja: API-ji pružatelja usluga u stvarnom vremenu ostat će neujednačeni neko vrijeme. Životni vijek tokena, konfiguracijska polja sesije, kontrole prekida veze na strani poslužitelja, događaji korištenja i regionalna podrška razlikovat će se. Gatewayi bi trebali eksplicitno modelirati mogućnosti pružatelja usluga umjesto da se pretvaraju da su svi API-ji u stvarnom vremenu savršeno prenosivi.
Referentna arhitektura: pristupnik kao kontrolna ravnina u stvarnom vremenu
Tok u stvarnom vremenu siguran za preglednik ima pet dijelova:
- Klijentska aplikacija: Preglednik ili mobilna aplikacija koja zahtijeva glasovnu sesiju.
- Pozadina aplikacije: Autentificira krajnjeg korisnika i poziva pristupnik ili ugrađuje logiku za kovanje tokena pristupnika ako je pristupnik dio pozadinskog stoga.
- AI API pristupnik: provodi pravila zakupca, rješava profil modela, rezervira proračun, bilježi sesiju i kuje efemernu tajnu klijenta pružatelja usluga.
- Dobavljač usluga u stvarnom vremenu: prekida WebRTC ili drugi prijenos u stvarnom vremenu.
- Knjiga i analitika: podmiruje potrošnju nakon što događaji pružatelja, podaci o trajanju ili konačna izvješća o upotrebi postanu dostupni.
Gateway ne treba prenijeti svaki audio okvir kako bi ostao vjerodostojan. Mora posjedovati odluku o stvaranju sesije i putanju usklađivanja.
Preporučeni tijek zahtjeva
- Korisnik otvara glasovnu značajku u klijentskoj aplikaciji.
- Klijent poziva vaš backend:
POST /voice/sessions. - Pozadina provjerava korisničku sesiju i prosljeđuje gotov zahtjev pristupniku s ID-om stanara, ID-om korisnika, predviđenom značajkom, metapodacima uređaja i porijeklom.
- Gateway procjenjuje politiku i proračun.
- Gateway stvara lokalni zapis
realtime_sessionprije kontaktiranja pružatelja usluga. - Gateway poziva davatelja sa svojom zaštićenom vjerodajnicom za vrijeme izvođenja i stvara kratkotrajnu sesiju u stvarnom vremenu uskog opsega.
- Gateway pregledniku vraća samo efemernu tajnu klijenta i odobrene metapodatke o sesiji.
- Preglednik uspostavlja WebRTC vezu izravno s pružateljem.
- Gateway unosi događaje korištenja pružatelja usluga, povratne pozive, rezultate anketiranja ili konzervativne procjene na temelju trajanja.
- Glavna knjiga podmiruje rezervirani proračun i zapisuje revizijske događaje.
Provjere pravila prije kovnice
Najvažnija točka provedbe je prije nego što se efemerni token iskuje. Nakon što preglednik dobije kratkotrajnu vjerodajnicu, provedba usred sesije može biti ograničena osim ako davatelj ne podržava ažuriranje sesije, prekid veze, promatranje ili kontrole povratnog poziva.
Gateway bi trebao provjeriti najmanje:
- Status zakupca: aktivan, obustavljen, probni, unaprijed plaćeni, fakturirani ili u karanteni.
- Ovlaštenja korisnika: smije li ovaj korisnik koristiti glasovni razgovor u stvarnom vremenu, a ne samo tekstualni chat.
- Dopušteni profil modela: odobreni model ili implementacija u stvarnom vremenu, a ne proizvoljni ID-ovi modela koje dostavlja klijent.
- Pravila o regiji i zadržavanju: podudaraju li se odabrana regija i skup značajki pružatelja s pravilima podataka zakupca.
- Maksimalno trajanje sesije: na primjer, 5, 15 ili 30 minuta prema planu.
- Dopušteni modaliteti: audio ulaz, audio izlaz, tekst, slika ili pozivi alata.
- Predložak za glas i upute: fiksno ili ograničeno pravilima.
- Dostupni proračun: unaprijed plaćeni saldo, rezervirani mjesečni iznos ili gornja granica potrošnje po značajci.
- Podudarnost: aktivne glasovne sesije na razini stanara i na razini korisnika.
- Kontrole zlouporabe: korisničke oznake rizika, reputacija porijekla, neuobičajena brzina poziva ili prekidač za isključivanje stanara.
Sigurna zadana postavka je odbijanje dvosmislenih zahtjeva. Ako klijent zatraži model, alat, glas ili regiju koja nije u zakupčevim pravilima u stvarnom vremenu, pristupnik bi trebao vratiti jasnu pogrešku pravila umjesto tihog širenja pristupa.
Dizajn zapisa sesije
Izradite zapis sesije na strani pristupnika prije iskovivanja vjerodajnice davatelja usluga. To vam daje revizijsko sidro čak i ako je stvaranje pružatelja uspješno, ali se preglednik nikad ne poveže.
{
"session_id": "rt_01j...",
"stanar_id": "stanar_123",
"end_user_id": "korisnički_hash_456",
"provider": "provider_a",
"provider_session_id": null,
"model_profile": "standard-glasovne podrške",
"upstream_model_or_deployment": "model-x u stvarnom vremenu",
"regija": "istok",
"session_config_hash": "sha256:...",
"dopušteni_modaliteti": ["audio_ulaz", "audio_izlaz"],
"allowed_tools": ["lookup_order_status"],
"tool_approval_policy": "odobri nuspojave",
"budget_reservation_id": "resv_789",
"max_duration_seconds": 900,
"issued_at": "2026-08-21T10:00:00Z",
"expires_at": "2026-08-21T10:01:00Z",
"client_origin": "https://app.example.com",
"device_id_hash": "sha256:...",
"status": "kovanje"
}
Nemojte pohraniti neobrađeni zvuk mikrofona ili pune upite prema zadanim postavkama. Pohranite konfiguracijske hashove, ID-ove, odluke o politici i minimalne metapodatke dovoljne za reviziju, podršku i naplatu. Ako je snimanje potrebno, neka bude eksplicitno, uz pristanak i na temelju pravila stanara.
Krajnja točka kovanja efemernog tokena
Krajnja točka okrenuta prema pristupniku može izgledati ovako:
POST /v1/realtime/sessions
Autorizacija: nositelj
Vrsta sadržaja: aplikacija/json
{
"stanar_id": "stanar_123",
"end_user_id": "korisnički_hash_456",
"feature": "support_voice_agent",
"podrijetlo": "https://app.example.com",
"device_nonce": "8f3b...",
"requested_profile": "standard-glasovne podrške"
}
Odgovor ne bi trebao otkriti vaš uzvodni ključ vremena izvođenja:
{
"session_id": "rt_01j...",
"provider": "provider_a",
"transport": "webrtc",
"client_secret": "efemerna_tajna_ovdje",
"expires_at": "2026-08-21T10:01:00Z",
"odobreno": {
"model_profile": "standard-glasovne podrške",
"max_duration_seconds": 900,
"modaliteti": ["audio_input", "audio_output"],
"alati": ["traženje_statusa_narudžbe"]
}
}
Veži izdavanje za izvor, autentificiranu korisničku sesiju, stanara i nonce. Davatelj možda neće izvorno podržavati sva ta povezivanja, pa nametnite ono što možete na pristupniku: ograničite stopu pokušaja mintiranja, odbacite neočekivana podrijetla, zabilježite metapodatke uređaja i držite životni vijek tokena kratkim.
Predlošci sesija: suženi prema zadanim postavkama
Predložak sesije u stvarnom vremenu trebao bi biti restriktivniji od općeg zahtjeva za dovršetak razgovora. Glasovne sesije su interaktivne, teže ih je pregledati u stvarnom vremenu i mogu trajati dulje od očekivanog.
Preporučena polja predloška uključuju:
- Fiksni model ili implementacija: odabire profil modela na strani pristupnika.
- Upute: predložak upita kojim upravlja poslužitelj s varijablama koje je odobrio stanar.
- Glas: odabran s popisa dopuštenih.
- Modaliteti: onemogućite tekstualne, slikovne ili alatne načine osim ako ih proizvod ne treba.
- Postavke ulaznog zvuka: otkrivanje skretanja, ponašanje prijepisa ili rukovanje utišavanjem gdje je podržano.
- Ograničenja izlaza: maksimalna duljina odgovora ili ponašanje odgovora tamo gdje je podržano.
- Popis dopuštenih alata: samo alati potrebni za značajku.
- Životni vijek sesije: kratki istek vjerodajnice plus maksimalno trajanje poziva.
Strogi predlošci smanjuju fleksibilnost, ali olakšavaju troškove, usklađenost i podršku. Ako proizvodni timovi trebaju dinamične glasove ili upute, izložite kontrolirane varijante profila umjesto prosljeđivanja proizvoljne konfiguracije klijenta davatelju.
Kontrole proračuna za glas u stvarnom vremenu
Upotrebu u stvarnom vremenu može biti teže odrediti prije nego što stigne konačna upotreba davatelja usluga. Sesija može trajati pet sekundi ili dvadeset minuta. Može uključivati audio ulaz, audio izlaz, transkripciju, pozive alata i tekstualne oznake. Gateway bi stoga trebao kombinirati rezervacije, ograničenja i usklađivanje.
Prije kovanja
- Procijenite najgori ili konzervativni trošak sesije na temelju maksimalnog trajanja, modela, modaliteta i plana zakupca.
- Rezervirajte proračun prije izdavanja klijentske tajne.
- Odbijte nove sesije ako stanar nema dovoljno sredstava ili je dosegao dnevna ograničenja glasa.
Tijekom sesije
- Pratite aktivne sesije i očekivanu stopu snimanja.
- Primijenite ograničenja istovremenosti zakupca i korisnika.
- Koristite značajke prekidanja ili ažuriranja sesije koje podržava pružatelj usluga ako su dostupne.
- Pokreni upozorenja za nenormalno trajanje sesije, opetovana ponovna povezivanja ili neuobičajenu upotrebu glasa.
Nakon sesije
- Unos događaja korištenja pružatelja usluga ili konačna izvješća o korištenju ako su dostupna.
- Podmirite rezervirani proračun sa stvarnim troškom.
- Ako točna upotreba kasni ili je nepotpuna, držite konzervativnu rezervaciju do usklađivanja.
- Upotrebu pripišite zakupcu, korisniku, značajci, profilu modela i ID-u sesije.
Ovo je manje točno od sinkrone tekstualne naplate u trenutku odgovora, ali je operativno sigurnije od izdavanja izravnih vjerodajnica bez rezervacije.
Pozivi alata unutar sesija u stvarnom vremenu
Glasovni agenti u stvarnom vremenu često postaju korisniji kada mogu pozvati alate: pretražiti račun, rezervirati termin, ažurirati kartu ili pokrenuti tijek rada. Tretirajte izvršenje alata odvojeno od prijenosa zvuka.
Medijska veza preglednika ne bi trebala podrazumijevati dopuštenje za izvođenje nuspojava. Gateway ili pozadina trebaju nametnuti:
- Registar alata: svaki alat ima vlasnika, shemu, opsege i razinu rizika.
- Popisi dopuštenih: predlošci sesija navode točno koji su alati dostupni.
- Granice za odobrenje: neželjene radnje zahtijevaju potvrdu korisnika, ljudsko odobrenje ili odobrenje pravila.
- Zasebne vjerodajnice: vjerodajnice alata nikada nisu ugrađene u sesiju preglednika.
- Udruženi revizijski trag: svaki poziv alata upućuje na ID sesije u stvarnom vremenu.
Na primjer, glasovnom agentu za podršku može biti dopušteno da automatski poziva lookup_order_status, ali refund_payment može zahtijevati eksplicitnu potvrdu i događaj odobrenja u pozadini. Pružatelj usluga u stvarnom vremenu može orkestrirati razgovor, ali bi vaš pristupnik trebao upravljati granicom dopuštenja.
Vidljivost bez proxyja svakog bajta
Izravan WebRTC protok medija smanjuje kašnjenje pristupnika i opterećenje propusnosti, ali vidljivost postaje sve ovisnija o događajima pružatelja usluga i metapodacima vaše vlastite sesije. Dizajnirajte analitiku oko višestrukih izvora dokaza:
- Zapisi o stvaranju sesije s pristupnika.
- Događaji životnog ciklusa na strani klijenta kao što su povezivanje, prekid veze, pokušaj ponovnog povezivanja, odbijen mikrofon ili prekid poziva.
- ID-ovi sesije pružatelja usluga, događaji korištenja ili konačni zapisi korištenja.
- Procjene temeljene na trajanju kada je korištenje pružatelja odgođeno.
- Zapisnici poziva alata spojeni ID-om sesije.
- Rezervacija proračuna i evidencija poravnanja.
Nemojte čekati savršenu telemetriju pružatelja usluga prije pokretanja kontrola. Započnite s konzervativnim rezervacijama i jasnim pripisivanjem, a zatim poboljšajte točnost poravnanja kako izvješćivanje o korištenju pružatelja sazrijeva.
Sigurnosni kontrolni popis
- Nikada ne šaljite standardne API ključeve pružatelja usluga pregledniku ili mobilnim klijentima.
- Koristite kratkotrajne efemerne klijentske tajne za pokretanje sesije u stvarnom vremenu.
- Autentificirajte krajnjeg korisnika prije kovanja tokena.
- Vežite odluke o kovanju s metapodacima zakupca, korisnika, izvora, nonce i uređaja gdje je to moguće.
- Čuvajte vjerodajnice za vrijeme izvođenja pružatelja u pozadinskom trezoru ili tajnom spremištu pristupnika.
- Snimite redak revizije sesije prije kovanja pružatelja usluga.
- Koristite predloške sesija koje je odobrio stanar umjesto proizvoljne konfiguracije klijenta.
- Primijenite ograničenja istovremenosti, dnevne upotrebe i maksimalnog trajanja.
- Koristite popise dopuštenih alata i vrata za odobrenje za nuspojave.
- Minimizirajte sirovu obavijest i zadržavanje zvuka prema zadanim postavkama.
- Održavajte matricu mogućnosti pružatelja za životni vijek tokena, regije, alate, događaje upotrebe i kontrole prekida.
Matrica mogućnosti pružatelja
Budući da se API-ji u stvarnom vremenu razlikuju, modelirajte svoj adapter pristupnika prema mogućnostima, a ne prema pretpostavkama. Jednostavna matrica može pokretati odluke o usmjeravanju i politici:
{
"provider_a": {
"transporti": ["webrtc", "websocket"],
"ephemeral_client_tokens": točno,
"token_ttl_seconds": 60,
"server_side_disconnect": istina,
"session_update": istina,
"usage_events": "konačni_i_inkrementalni",
"regije": ["us", "eu"],
"tool_approval_supported": točno
},
"provider_b": {
"transporti": ["websocket"],
"ephemeral_client_tokens": točno,
"token_ttl_seconds": 120,
"server_side_disconnect": netočno,
"session_update": netočno,
"usage_events": "samo konačan",
"regije": ["nas"],
"tool_approval_supported": netočno
}
}
Ako zakupac zahtijeva prebivalište u EU-u i prekid na strani poslužitelja, pristupnik bi trebao usmjeravati samo prema pružateljima usluga i implementacijama koje zadovoljavaju oboje. Ako nijedan pružatelj ne zadovoljava pravila, neuspješno zatvoreno.
Put migracije
Ne morate izgraditi svaku kontrolu prvog dana. Praktično predstavljanje je:
- Samo stvaranje proxy sesije: neka mediji budu izravni, ali zahtijevaju da sve sesije u stvarnom vremenu iskuje pozadina ili pristupnik.
- Dodajte predloške pravila: zamijenite polja modela i uputa koje je dostavio klijent odobrenim profilima.
- Dodajte proračunsku rezervaciju: rezervirajte konzervativnu cijenu sesije prije izdavanja tokena.
- Dodajte analitiku životnog ciklusa: prikupite početak sesije, povezivanje, prekid veze, trajanje, ID sesije pružatelja i status poravnanja.
- Dodajte upravljanje alatom: zahtijevajte popise dopuštenih i odobrenja za pozive alata u stvarnom vremenu.
- Dodajte usmjeravanje mogućnosti pružatelja: odaberite pružatelje prema regiji, modalitetu, podršci za događaje i kontrolama prekida.
- Dodajte izborne tijekove rada promatrača ili snimanja: samo tamo gdje je usklađeno, pristalo i odobreno od stanara.
Zaključak koji se može poduzeti
Za glasovnu umjetnu inteligenciju u stvarnom vremenu, AI API pristupnik ne bi trebao automatski postati medijski relej. Sigurnija arhitektura s nižom latencijom je da pristupnik zadrži kontrolu nad kontrolnom ravninom: provjera autentičnosti korisnika, provedba pravila zakupca, rezerva proračuna, stvaranje revizijskog zapisa, kovanje efemerne vjerodajnice uskog opsega i usklađivanje korištenja nakon sesije.
Osnovno pravilo implementacije je jednostavno: preglednici mogu primati kratkotrajne tajne sesije, nikad dugotrajne ključeve pružatelja usluga. Sve ostalo slijedi iz te granice: strogi predlošci, kovanje s obzirom na porijeklo, ograničenja istodobnih sesija, odobrenja alata, nagodba korištenja i matrice mogućnosti pružatelja. Ovo timovima proizvoda daje glasovna iskustva u stvarnom vremenu bez odustajanja od upravljanja ključevima API-ja, kontrole troškova API-ja AI, upravljanja timskim API-jem ili analitike upotrebe AI-ja.