ThunderPhone 2.0 je stigao.Samostalno, već od 2 centa/min.Pročitajte objavu

Connect tools & data

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 key

Dodatak 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 first

ThunderPhone 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

ArgumentZnačenje
api_keyTajni ključ (sk_live_...). Zadano je THUNDERPHONE_API_KEY.
agent_idPokrenite spremljenog agenta. Uzajamno se isključuje s product i voice.
productMehanizam za ugrađene sesije: spark, bolt ili storm.
voiceNaziv ThunderPhone glasa za ugrađene sesije.
languageNaznaka primarnog jezika za ugrađene sesije, npr. es.
from_number, to_numberBrojevi za bilježenje u pozivu kada soba služi kao sučelje telefonske linije.
live_transcriptsEmitirajte ulomke prijepisa pozivatelja tijekom izgovora (dodatno se naplaćuje).
base_urlNadjač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_detection u AgentSession) 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.