Open in
Tumia ThunderPhone na wateja wa OpenAI Realtime
Elekeza mteja wa seva unaooana na OpenAI Realtime kwenye ThunderPhone, ukitumia ama ejenti iliyohifadhiwa au usanidi wa kipindi uliowekwa ndani.
ThunderPhone hutekeleza seti ndogo iliyolengwa ya modeli ya matukio ya OpenAI Realtime. Mteja wa upande wa seva aliyepo anaweza kudumisha mtiririko wake wa matukio ya WebSocket, sauti, sesheni na majibu huku akitumia ejenti ya sauti ya ThunderPhone.
Kabla ya kuunganisha
Unahitaji ufunguo wa API wa siri wa shirika la ThunderPhone na mazingira ya utekelezaji ya seva yanayoweza kufungua WebSocket. Usiunganishe kutoka kwenye msimbo wa kivinjari au kufichua ufunguo kwa kivinjari. Ili kutumia ejenti iliyohifadhiwa, isambaze kwanza kisha unakili kitambulisho chake cha nambari.
Unganisha kwa:
wss://api.thunderphone.com/v1/realtimeThibitisha uboreshaji wa WebSocket kutoka kwenye seva yako:
Authorization: Bearer sk_live_YOUR_API_KEYUthibitishaji wa query string unapatikana kwa wateja wasioweza kuweka vichwa vya handshake, lakini URL ni rahisi zaidi kuvuja kwenye logi.
Chagua anayemiliki usanidi
| Hali | Unganisha kwa | Chanzo cha usanidi |
|---|---|---|
| Ejenti iliyohifadhiwa | ?agent_id=12 | Prompt iliyosambazwa, sauti, bidhaa, lugha, maarifa na zana zinazooana zinazoendeshwa na seva |
| Ndani ya mstari | Hakuna agent_id | session.update ya kwanza inayokubaliwa kutoka kwa mteja wako |
Ejenti iliyohifadhiwa
Unganisha kwa kitambulisho cha ejenti iliyosambazwa:
wss://api.thunderphone.com/v1/realtime?agent_id=12Ejenti huanza wakati soketi inaunganika. Salamu yake hubaki inapatikana,
lakini Realtime huzima ukaguzi wake wa kimya unaosemwa na huacha transfer_call
na send_keypad_input. Zana zingine zinazooana huendeshwa kwenye ThunderPhone. Usitume maelekezo ya ndani ya mstari au zana zinazotekelezwa na mteja kwa hali hii.
Weka sauti ya muunganisho kabla ejenti haijaanza kwa vigezo vya query vya input_audio_format,
output_audio_format, input_rate, na output_rate. Huwezi kubadilisha usanidi uliohifadhiwa au fomati za sauti baada ya kuunganisha.
Sesheni ya ndani ya mstari
Bila agent_id, subiri session.created, kisha tuma 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"
}
}
}Sasisho la kwanza linalokubaliwa huandaa simu. session.updated inamaanisha
sesheni inaanza kutumika. Maelekezo, sauti, bidhaa, zana na fomati za sauti haziwezi
kubadilishwa baada ya hapo.
Sesheni za ndani ya mstari hazina salamu ya kiotomatiki au ukaguzi wa kimya unaosemwa. Ili
kumfanya ejenti aanze kuzungumza, ongeza ujumbe wa mfumo au wa mtumiaji kisha tuma
response.create. Sesheni isiyo na shughuli kabisa bado huisha katika kikomo cha simu kimya cha jukwaa, sekunde 600 kwa chaguo-msingi.
Tumia SDK rasmi ya OpenAI
Pitisha URL msingi ya WebSocket inayoishia na /v1; SDK huongeza /realtime. Thamani ya
model ni jina la uoanifu na haichagui bidhaa ya ThunderPhone.
Chagua bidhaa katika usanidi wa kipindi au ejenti iliyohifadhiwa.
Ukaguzi huu wa muunganisho huunda kipindi cha Bolt cha ndani, huchapisha matukio hadi
session.updated ya kwanza, kisha hufunga. Tumia mteja mdogo wa
Python kutiririsha sauti.
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())Dumisha ushughulikiaji wako uliopo wa kuongeza sauti ya ingizo, delta za sauti za majibu, ukatizaji, miito ya function, hitilafu, na kufunga socket kwa usafi. Function maalum za ndani hutekelezwa katika mteja wako; rudisha matokeo yake kupitia itifaki ya Realtime. Zana za ejenti iliyohifadhiwa hutekelezwa kwenye ThunderPhone.
Mzunguko wa maisha wa kipindi na hitilafu
WebSocket moja inawakilisha simu moja. Kitambulisho batili cha ejenti au usanidi wa
ndani uliokataliwa huzalisha tukio la error. Subiri session.updated kabla ya
kuchukulia kipindi kuwa kinafanya kazi. Bainisha fomati halisi za ingizo na towe pamoja
na viwango vya sampuli: kutolingana kwa kiwango cha PCM hucheza sauti kwa kasi mno au
polepole mno badala ya kuzalisha hitilafu ya uthibitishaji.
Baada ya kipindi kuanza, funga socket kwa usafi programu yako inapomaliza. Vipindi vya ndani vinaweza kutumia function zinazotekelezwa na mteja. Vipindi vya ejenti iliyohifadhiwa hutumia zana zinazooana zinazoendeshwa na ThunderPhone na havitoi uhamisho wala ingizo la keypad.
Jaribu ujumuishaji
Anza na mteja mdogo wa Python WAV na WAV ya mono PCM16 katika kiwango chake cha sampuli kilichobainishwa. Thibitisha:
- Seva inakubali usanidi na kutuma
session.updated. - Ingizo huzalisha matukio ya nakala na sauti ya jibu kwa kasi inayotarajiwa.
- Ukatizaji na kughairi jibu husimamisha sauti ya towe iliyosalia.
- Matokeo ya function ya ndani au matokeo ya zana ya ejenti iliyohifadhiwa hurudi kwenye model.
- Ingizo batili huzalisha tukio la
errorambalo mteja wako hushughulikia. - Mteja wako hufunga socket na simu huonekana katika Historia ya simu.
Marejeleo ya Realtime WebSocket yanaorodhesha matukio yanayokubaliwa, fomati za sauti, sehemu za kipindi, na mifano kamili.
Gharama
Simu za Realtime hutumia kiwango cha kawaida cha kila dakika cha bidhaa iliyochaguliwa. Kuwasha delta za nakala za moja kwa moja huongeza ada ya kila dakika kwa kipindi chote; tazama Nakala za moja kwa moja kwa kiwango na Bei kwa viwango vya bidhaa.
POST /v1/realtime/sessions ni njia tofauti inayosimamiwa ya LiveKit. Huunda chumba na
tokeni ya mshiriki yenye upeo maalum; haihitajiki kwa muunganisho wa moja kwa moja wa
WebSocket.
Kwa ujumuishaji wa framework, tazama Tumia ThunderPhone kutoka Pipecat na Tumia ThunderPhone kutoka LiveKit Agents.