Koristite ThunderPhone iz LiveKit Agentsa
Pokrenite glasovnog agenta ThunderPhone kao model u stvarnom vremenu (govor-u-govor) u sesiji LiveKit Agentsa, uz LiveKit sobe, SIP i telefoniju oko njega.
LiveKit Agents je framework otvorenog koda za glasovne agente u stvarnom vremenu povrh LiveKit soba. ThunderPhone se uključuje kao model u stvarnom vremenu: framework šalje zvuk sudionika, ThunderPhone vraća glas agenta, transkripte i pozive funkcija, a LiveKit sobe, SIP trunkovi i telefonija prenose zvuk. Prepoznavanje govora, jezični model, glas, izmjena redoslijeda govora, 47 jezika i alati rade na ThunderPhoneu.
Pozivi upućeni na ovaj način prikazuju se u povijesti poziva i naplaćuju se prema cijeni po minuti vašeg proizvoda kao i svaki drugi poziv u stvarnom vremenu. Ne postoji pretplata niti je uključen ThunderPhone telefonski broj.
Instalacija
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyDodatak obuhvaća LiveKitov OpenAI Realtime model jer ThunderPhoneov
Realtime WebSocket koristi isti protokol. Potreban mu je
livekit-agents 1.8 ili noviji.
Pokrenite spremljenog agenta
Sve što agent radi (upit, glas, mehanizam, jezici, alati, pozdrav, provjere tišine) konfigurira se na ThunderPhoneu. Sesija samo prenosi zvuk.
from livekit.agents import Agent, AgentSession, JobContext, WorkerOptions, cli
from livekit.plugins import thunderphone
async def entrypoint(ctx: JobContext):
session = AgentSession(llm=thunderphone.RealtimeModel(agent_id=12))
await session.start(agent=Agent(instructions=""), room=ctx.room)
if __name__ == "__main__":
cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))Spremljeni agent pozdravlja i pokreće vlastite alate na ThunderPhoneu; upute i
alati LiveKit Agenta ne šalju se. Poziv završava kada
ThunderPhone agent prekine vezu, a sesija se s njime zatvara.
Konfigurirajte sesiju izravno
Bez agent_id, upute i alati dolaze iz LiveKit Agenta, na
isti način kao za OpenAI. product odabire mehanizam, a voice odabire
ThunderPhone glas.
from livekit.agents import Agent, AgentSession, RunContext, function_tool
from livekit.plugins import thunderphone
class Receptionist(Agent):
def __init__(self):
super().__init__(instructions="You are Acme Dental's receptionist. Be brief.")
@function_tool
async def check_availability(self, context: RunContext, date: str) -> dict:
"""Free appointment slots on a date."""
return {"slots": await calendar.free_slots(date)}
async def entrypoint(ctx: JobContext):
session = AgentSession(
llm=thunderphone.RealtimeModel(product="bolt", voice="olivia", language="es"),
)
await session.start(agent=Receptionist(), room=ctx.room)
await session.generate_reply() # the agent speaks firstThunderPhone zaključava upute i alate kada poziv započne, stoga
update_instructions, update_tools i prijenosi agenta koji ih mijenjaju nisu
podržani tijekom poziva. Ugrađene sesije usmjerava klijent: agent govori
kada pozovete generate_reply() ili kada sudionik završi redoslijed govora.
Opcije
| Argument | Značenje |
|---|---|
api_key | Tajni ključ (sk_live_...). Zadano je THUNDERPHONE_API_KEY. |
agent_id | Pokrenite spremljenog agenta. Uzajamno se isključuje s product i voice. |
product | Mehanizam za ugrađene sesije: spark, bolt ili storm. |
voice | Naziv ThunderPhone glasa za ugrađene sesije. |
language | Naznaka primarnog jezika za ugrađene sesije, npr. es. |
from_number, to_number | Brojevi za bilježenje u pozivu kada soba služi kao sučelje telefonske linije. |
live_transcripts | Emitirajte ulomke prijepisa pozivatelja tijekom izgovora (dodatno se naplaćuje). |
base_url | Nadjačavanje krajnje točke, zadano wss://api.thunderphone.com/v1/realtime. |
Događaji
ThunderPhone dodaje događaje platforme povrh protokola za rad u stvarnom vremenu. Sesija ih emitira:
@session.llm.session.on("thunderphone_call_ended") # or on the RealtimeSession you hold
def on_call_ended(event):
print("call ended:", event["reason"])RealtimeSession izlaže call_id kada je sesija aktivna. Upotrijebite ga s
GET /v1/calls/{call_id} za dohvaćanje snimke,
prijepisa i ocjene nakon poziva. Svaki drugi događaj call.* (prijenos,
tipkovnica, ignoriran govor) stiže kao thunderphone_call_event.
Ograničenja
- Prepoznavanje izmjene govora izvodi se na poslužitelju i uvijek je uključeno; prepoznavanje izmjene govora na strani okvira
(
turn_detectionuAgentSession) zanemaruje se. - Upute i alati ne mogu se mijenjati nakon početka poziva.
- Zvuk je 16-bitni mono PCM pri 24 kHz u oba smjera.
- Videookviri se zanemaruju.