Reaaliaikainen tekoäly-ääniassistentti funktiokutsuilla ja kaksisuuntaisella audion suoratoistolla
Kunto- ja ravitsemusalusta tarvitsi ääni-ensimmäisen AI-assistentin, joka kykenisi vastaamaan käyttäjille reaaliaikaisesti luonnollisella keskustelulla, suorittamaan toimialakohtaisia laskelmia (ateria-säädöt, kalorin seuranta) ja puhumaan vastauksia takaisin – kaikki alle sekunnin viiveellä todella keskustelevan kokemuksen saavuttamiseksi.
Keskustele Projektistasi
Haaste
Tuotantolaatuisen tekoäly-ääniassistentin rakentaminen toi mukanaan ainutlaatuisia reaaliaikaisia suunnitteluhaasteita:
- Viive — Perinteiset speech-to-text → LLM → text-to-speech -putket lisäsivät 3–5 sekunnin viiveen, katkaisten keskustelun kulun
- Funktiokutsut — Assistentin oli suoritettava toimialalogiikkaa (ravitsemuslaskelmia, ruokasuunnitelman säätöjä) keskustelun aikana, ei vain keskustella
- Audion suoratoisto — Kaksisuuntaisen audion oli virrattava jatkuvasti ilman puskurointikatkoksia tai kaikuongelmia
- Kontekstitietoisuus — Assistentin oli ylläpidettävä keskustelun kontekstia vuorojen välillä samalla kun se käsitteli keskeytyksiä
- Monikielisyys — Käyttäjät puhuivat eri kielillä ja odottivat vastauksia samalla kielellä
- Istuntojen eristys — Kukin ääni-istunto tarvitsi itsenäisen tilanhallinnan ilman ristiinpuhetta
Meidän Ratkaisumme
Rakensimme reaaliaikaisen tekoäly-ääniassistentin, joka perustuu Googlen Gemini Live API:in natiiveilla ääniominaisuuksilla, mukautetuilla funktiokutsuilla toimialakohtaisiin laskelmiin, ja React-käyttöliittymän WebSocket-pohjaisella audion suoratoistolla.
Arkkitehtuuri
- AI-malli: Gemini natiivilla ääni-syötteellä/ulostulolla ja funktiokutsuilla
- Backend: Python/FastAPI WebSocket-päätepisteellä kaksisuuntaista audiota varten
- Audion käsittelyputki: PyAudio mikrofonin/kaiuttimen I/O:lle reaaliaikaisella suoratoistolla
- Frontend: React, Vite ja Tailwind CSS istunnon ohjaus käyttöliittymää varten
- Tiedonsiirto: WebSocket matalaviiveiseen JSON-viestintään ja binääriäänen siirtoon
- Monimodaalinen: Valinnainen kameran ja näytön kaappaus visuaalista kontekstia varten
Reaaliaikainen audion käsittelyputki
Kaksisuuntainen suoratoisto
Järjestelmä ylläpitää jatkuvia audiostreameja molempiin suuntiin:
- Sisääntulo: Mikrofonin ääni tallennettuna 16kHz monona, jaettuna pieniin kehyksiin ja suoratoistettuna AI-mallille reaaliaikaisesti
- Ulostulo: AI:n tuottama puhe vastaanotettuna 24kHz:nä ja soitettuna kaiuttimien kautta välittömästi
- Ei eräkäsittelyä: Äänipalaset lähetetään sellaisenaan kuin ne on kaapattu – ei viiveitä kertymisestä
- Keskeytysten käsittely: Käyttäjä voi keskeyttää assistentin luonnollisesti vastauksen aikana
Audion käsittely
- 16-bittinen PCM-muoto sekä sisääntulolle että ulostulolle
- Erilliset näytteenottotaajuudet optimoitu puhetta varten (16kHz tallennus, 24kHz toisto)
- Pienet puskurikoot minimaalisen viiveen saavuttamiseksi
- Jatkuva suoratoisto ilman aloitus/lopetus-aukkoja vuorojen välillä
Funktiokutsujen integrointi
Miten se toimii
AI-malli voi kutsua paikallisia Python-funktioita keskustelun aikana, kun toimialakohtaisia laskelmia tarvitaan:
- Käyttäjä esittää pyynnön (esim. "Jäi lounas tänään välistä")
- AI-malli litteroi ja ymmärtää tarkoituksen
- Malli määrittää, että funktiokutsua tarvitaan, ja lähettää jäsennellyn pyynnön
- Backend poimii funktion nimen, argumentit ja kutsun ID:n
- Paikallinen funktio suorittaa toimialalaskelman
- Tulos lähetetään takaisin mallille jäsenneltynä vastauksena
- Malli luo luonnollisen kielen äänivastauksen, joka sisältää tuloksen
Toimialakohtaiset funktiot
Järjestelmä tukee ravitsemukseen keskittyvää funktiokutsua seuraaviin tilanteisiin:
- Väliin jääneet ateriat — Jakaa väliin jääneet makroravinteet uudelleen jäljellä oleviin aterioihin
- Suunnittelematon ruoka — Säätää tulevia aterioita kompensoimaan odottamatonta saantia
- Ateriakorvaukset — Vaihtaa ainesosia ylläpitäen samalla makrotavoitteita
- Aktiivisuuden seuranta — Arvioi kalorinkulutuksen ja säätää ravitsemuspuskuria
Jokainen funktio käyttää makrotietokantaa ruokakohtaisilla ravitsemusprofiileilla ja suorittaa dynaamisia laskelmia pienellä stokastisella vaihtelulla luonnollisen tuntuisia vastauksia varten.
Suoritusturvallisuus
- Mikrofonin syöttö keskeytetään funktion suorituksen aikana päällekkäisyyden estämiseksi
- Odottelevat äänikehykset pudotetaan vanhentuneen kontekstin välttämiseksi
- Virhevastaukset lähetetään takaisin hallitusti, jos funktion suoritus epäonnistuu
- Normaali suoratoisto jatkuu välittömästi funktion suorituksen jälkeen
Backend-arkkitehtuuri
FastAPI WebSocket-palvelin
- Yksi WebSocket-päätepiste kaikelle asiakasviestinnälle
- Istunnon elinkaaren hallinta (aloitus, lopetus, ping/pong-kuntotarkistukset)
- Yksi aktiivinen istunto kerrallaan istunnon lukituksella
- CORS-middleware kehitysympäristöihin
- Kuntotarkistuspäätepiste valvontaan
Istunnonhallinta
- Istunnot luodaan asiakkaan yhteyden muodostuessa tilavalinnalla (vain ääni, kamera tai näyttö)
- Tausta-synkronoimattomat tehtävät hoitavat äänen kaappauksen, käsittelyn ja toiston samanaikaisesti
- Hallittu katkaisu resurssien vapautuksella
- API-avaimen validointi ja virheiden levittäminen
Monimodaalinen syöttö (valinnainen)
Äänen lisäksi järjestelmä tukee valinnaista visuaalista kontekstia:
- Kameratila — Suoratoistaa webkameran kuvia (1 fps) visuaalista kontekstia varten keskusteluissa
- Näyttötila — Kaappaa näytön sisältöä näytöllä olevien tietojen keskustelemiseen
- Kuvat muutetaan kokoa ja pakataan ennen siirtoa
- Visuaalinen konteksti parantaa AI:n kykyä tarjota relevantteja vastauksia
Käyttöliittymä (Frontend)
- Istunnon hallinta — Kuuntelun aloitus/lopetus selkeillä tilailmaisimilla
- Tilannäyttö — Reaaliaikainen yhteys- ja istuntotila (joutilas, yhdistää, aktiivinen, virhe)
- Teematuki — Vaalea/tumma tila pysyvyydellä
- Opastettu esittely — Vaiheittainen demo ensikertalaisille
- WebSocket-hallinta — Automaattinen uudelleenliitäntälogiikka
AI-mallin konfigurointi
- Natiivi audiotila (ei erillistä STT/TTS-putkea)
- Konfiguroitava äänenvalinta useista esiasetetuista äänistä
- Järjestelmäohjeet, jotka määrittelevät assistentin persoonallisuuden, vastaustyylin ja kielen käsittelyn
- Työkalumääritelmät kaikille käytettävissä oleville funktioille parametriskeemoineen
- Automaattinen kielen tunnistus samankielisellä vastauksella
Tärkeimmät ominaisuudet
- Alle sekunnin viive — Natiivi audio-malli eliminoi STT/TTS-putken ylikuormituksen
- Reaaliaikainen kaksisuuntainen audio — Jatkuva suoratoisto < 50 ms palakohtaisella viiveellä
- Funktiokutsut — Toimialakohtaiset laskelmat suoritetaan keskustelun aikana
- Luonnollinen keskeytys — Käyttäjät voivat keskeyttää assistentin luonnollisesti ilman erityisiä komentoja
- Monikielisyys — Automaattinen kielen tunnistus samankielisillä vastauksilla
- Monimodaalinen syöttö — Valinnainen kamera- ja näyttökonteksti visuaalista ymmärrystä varten
- Istunnonhallinta — Istunnon elinkaaren hallinta lukituksella ja resurssien vapautuksella
- Makrolaskelmat — Dynaamiset ravitsemukselliset säädöt ruokakohtaisilla makroprofiileilla
- Virheiden palautus — Hallittu funktiovirheiden ja verkkoviivästysten käsittely
- Laajennettava — Uusia funktioita lisätään määrittämällä skeema ja käsittelijä – ei arkkitehtuurimuutoksia
Tulokset
Teknologiapino
caseStudyDetail.more Tapaustutkimukset
Tutustu lisää teknisiin toteutuksiimme
AI-pohjainen laskujen käsittely OCR:n ja QuickBooks-integraation avulla
Keskisuuri yritys, joka käsitteli satoja toimittajalaskuja kuukausittain, halusi poistaa manuaalisen tiedonsyötön poimimalla laskutiedot automaattisesti AI/OCR:n avulla ja synkronoimalla ne suoraan QuickBooks-järjestelmään kirjanpitoa ja maksujen seurantaa varten.
Asiakaspuolen mainosten upotus (CSAI) SCTE-35-merkkien jäsennyksellä ja monialustaisen soittimen integroinnilla
Videoiden suoratoistoalustan piti toteuttaa Client-Side Ad Insertion (CSAI) verkko-, mobiili- ja Connected TV -sovellusten yli — mahdollistaen personoidut, laitekohtaiset mainoskokemukset täydellä mainosinteraktion tuella (klikkaavat peittokuvat, kumppanibannerit, ohituspainikkeet), joita server-side insertion ei voi tarjota.
Valmis Muuttamaan Liiketoimintaasi?
Keskustellaan siitä, miten voimme soveltaa vastaavia ratkaisuja haasteisiisi.