Open in
Kasuta ThunderPhone
Suuna OpenAI Realtime
ThunderPhone rakendab OpenAI Realtime’i sündmusmudeli sihipärast alamhulka. Olemasolev serveripoolne klient saab säilitada oma WebSocketi, heli-, sessiooni- ja vastussündmuste voo, kasutades samal ajal ThunderPhone’i häälagenti.
Enne ühendamist
Vajad ThunderPhone’i organisatsiooni salajast API-võtit ja serverikeskkonda, mis saab avada WebSocketi ühendusi. Ära ühenda brauserikoodist ega avalda võtit brauserile. Salvestatud agendi kasutamiseks juuruta see esmalt ja kopeeri selle numbriline agendi ID.
Ühendu aadressiga:
wss://api.thunderphone.com/v1/realtimeAutendi WebSocketi ühenduse loomine oma serverist:
Authorization: Bearer sk_live_YOUR_API_KEYPäringustringi kaudu autentimine on olemas klientidele, mis ei saa ühenduse loomise päiseid määrata, kuid URL-id satuvad logidesse kergemini.
Vali, kellele konfiguratsioon kuulub
| Režiim | Ühendu järgmisega | Konfiguratsiooniallikas |
|---|---|---|
| Salvestatud agent | ?agent_id=12 | Juurutatud juhised, hääl, toode, keeled, teadmised ja ühilduvad serveris käitatavad tööriistad |
| Sisemine | Puudub agent_id | Esimene sinu kliendi aktsepteeritud session.update |
Salvestatud agent
Ühendu juurutatud agendi ID-ga:
wss://api.thunderphone.com/v1/realtime?agent_id=12Agent käivitub pesa ühendamisel. Selle tervitus jääb kättesaadavaks,
kuid Realtime keelab selle räägitud vaikusekontrollid ning jätab välja transfer_call
ja send_keypad_input. Muud ühilduvad tööriistad töötavad ThunderPhone’is. Ära
saada selles režiimis sisemisi juhiseid ega kliendis käitatavaid tööriistu.
Määra edastusheli enne agendi käivitumist päringuparameetritega input_audio_format,
output_audio_format, input_rate ja output_rate. Pärast ühenduse loomist
ei saa salvestatud konfiguratsiooni ega helivorminguid muuta.
Sisemine sessioon
Ilma agent_id-ta oota sündmust session.created, seejärel saada session.update:
{
"type": "session.update",
"session": {
"type": "realtime",
"instructions": "Answer questions clearly and keep responses brief.",
"audio": {
"input": {
"format": { "type": "audio/pcm", "rate": 24000 }
},
"output": {
"format": { "type": "audio/pcm", "rate": 24000 },
"voice": "olivia"
}
},
"config": {
"product": "bolt"
}
}
}Esimene aktsepteeritud värskendus valmistab kõne ette. session.updated tähendab,
et sessioon on aktiivne. Juhiseid, häält, toodet, tööriistu ega helivorminguid ei saa
pärast seda muuta.
Sisemistel sessioonidel puuduvad automaatne tervitus ja räägitud vaikusekontrollid. Et
agent räägiks esimesena, lisa süsteemi- või kasutajasõnum ja saada
response.create. Täiesti jõudeolev sessioon lõpeb siiski platvormi
vaikse kõne limiidi juures, mis on vaikimisi 600 sekundit.
Kasuta ametlikku OpenAI SDK-d
Edasta /v1-ga lõppev WebSocketi baas-URL; SDK lisab /realtime. Väärtus
model on ühilduvusnimi ega vali ThunderPhone'i toodet. Vali toode seansi
konfiguratsioonis või salvestatud agendis.
See ühenduse kontroll loob sisemise Bolt-seansi, prindib sündmusi kuni esimese
session.updated sündmuseni ja sulgeb ühenduse. Heli voogedastuseks kasuta
minimaalset Pythoni klienti.
import asyncio
import os
from openai import AsyncOpenAI
async def main():
client = AsyncOpenAI(
api_key=os.environ["THUNDERPHONE_API_KEY"],
websocket_base_url="wss://api.thunderphone.com/v1",
)
async with client.realtime.connect(
model="thunderphone-realtime"
) as connection:
await connection.session.update(session={
"type": "realtime",
"instructions": "Listen to the caller and help them complete the call.",
"config": {"product": "bolt"},
})
async for event in connection:
print(event.type)
if event.type == "session.updated":
break
if __name__ == "__main__":
asyncio.run(main())Säilita olemasolev sisendheli lisamise, vastuse heli deltade, katkestuste, funktsioonikutsete, vigade ja socketi korrektse sulgemise käsitlus. Sisemised kohandatud funktsioonid käivitatakse sinu kliendis; tagasta nende tulemused Realtime'i protokolli kaudu. Salvestatud agendi tööriistad käivitatakse ThunderPhone'is.
Seansi elutsükkel ja tõrked
Üks WebSocket vastab ühele kõnele. Vigane agendi ID või tagasi lükatud sisemine
konfiguratsioon tekitab error sündmuse. Oota enne seansi aktiivseks lugemist
sündmust session.updated. Määra tegelikud sisend- ja väljundvormingud ning
diskreetimissagedused: PCM-i sageduse erinevus esitab heli liiga kiiresti või
liiga aeglaselt, mitte ei tekita valideerimisviga.
Pärast seansi algust sulge socket korrektselt, kui rakendus on lõpetanud. Sisemised seansid võivad kasutada kliendis käivitatavaid funktsioone. Salvestatud agendi seansid kasutavad ühilduvaid ThunderPhone'is käivitatavaid tööriistu ega paku kõne suunamist ega klahvistiku sisendit.
Testi integratsiooni
Alusta minimaalse Pythoni WAV-kliendiga ja selle määratud sagedusega mono PCM16 WAV-failiga. Kontrolli järgmist:
- Server aktsepteerib konfiguratsiooni ja saadab sündmuse
session.updated. - Sisend tekitab transkriptsiooni- ja vastuse helisündmusi oodatud kiirusel.
- Katkestus ja vastuse tühistamine peatavad allesjäänud väljundheli.
- Sisemiste funktsioonide tulemused või salvestatud agendi tööriistade tulemused jõuavad mudelini.
- Vigane sisend tekitab
errorsündmuse, mida sinu klient käsitleb. - Sinu klient sulgeb socketi ja kõne kuvatakse Kõneajaloos.
Realtime WebSocketi viide loetleb aktsepteeritud sündmused, helivormingud, seansiväljad ja täielikud näited.
Hind
Realtime'i kõnede puhul kasutatakse valitud toote tavapärast minutihinda. Reaalajas transkriptsiooni deltade lubamine lisab kogu seansi eest minutipõhise lisatasu; hinna kohta vaata Reaalajas transkriptsioonid ja toodete hindade kohta Hinnakiri.
POST /v1/realtime/sessions on eraldi hallatud LiveKiti tee. See loob ruumi ja
piiratud ulatusega osaleja tokeni; seda ei ole otsese WebSocketi ühenduse jaoks
vaja.
Raamistikuintegratsioonide kohta vaata Kasuta ThunderPhone'i Pipecatist ja Kasuta ThunderPhone'i LiveKit Agentsist.