ThunderPhone 2.0 er lansert.Kom i gang selv, fra 2 ¢/min.Les mer om lanseringen

Connect tools & data

Bruk ThunderPhone fra LiveKit Agents

Kjør en ThunderPhone-stemmeagent som sanntidsmodellen (tale-til-tale) i en LiveKit Agents-økt, med LiveKit-rom, SIP og telefoni rundt den.

LiveKit Agents er et åpen kildekode-rammeverk for stemmeagenter i sanntid basert på LiveKit-rom. ThunderPhone kobles til som sanntidsmodellen: rammeverket sender deltakerens lyd, ThunderPhone returnerer agentens stemme, transkripsjoner og funksjonskall, og LiveKits rom, SIP-trunker og telefoni frakter lyden. Talegjenkjenning, språkmodellen, stemmen, turveksling, 47 språk og verktøy kjører alle på ThunderPhone.

Samtaler som gjøres på denne måten, vises i samtalehistorikken og faktureres til produktets pris per minutt, på samme måte som alle andre sanntidssamtaler. Det er ikke noe abonnement eller ThunderPhone-telefonnummer involvert.

Installer

pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

Programtillegget pakker inn LiveKits OpenAI Realtime-modell, fordi ThunderPhones Realtime WebSocket bruker samme protokoll. Det krever livekit-agents 1.8 eller nyere.

Kjør en lagret agent

Alt agenten gjør (instruksjon, stemme, motor, språk, verktøy, hilsen, oppfølging ved stillhet) konfigureres i ThunderPhone. Økten flytter bare lyd.

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))

En lagret agent hilser og kjører sine egne verktøy i ThunderPhone; instruksjonene og verktøyene til LiveKit-Agent sendes ikke. Samtalen avsluttes når ThunderPhone-agenten legger på, og økten lukkes sammen med den.

Konfigurer økten direkte i koden

Uten agent_id kommer instruksjoner og verktøy fra LiveKit-Agent, på samme måte som for OpenAI. product velger motoren, og voice velger ThunderPhone-stemmen.

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 låser instruksjoner og verktøy når samtalen starter, så update_instructions, update_tools og agentoverleveringer som endrer dem, støttes ikke midt i samtalen. Direkte økter styres av klienten: agenten snakker når du kaller generate_reply() eller når deltakeren fullfører en tur.

Alternativer

ArgumentBetydning
api_keyHemmelig nøkkel (sk_live_...). Bruker som standard THUNDERPHONE_API_KEY.
agent_idKjør en lagret agent. Kan ikke brukes sammen med product og voice.
productMotor for innebygde økter: spark, bolt eller storm.
voiceThunderPhone-stemmenavn for innebygde økter.
languageHint om primærspråk for innebygde økter, for eksempel es.
from_number, to_numberNumre som skal registreres i samtalen når rommet er koblet til en telefonlinje.
live_transcriptsStrøm fragmenter av innringerens transkripsjon midt i en ytring (faktureres ekstra).
base_urlOverstyring av endepunkt, standard er wss://api.thunderphone.com/v1/realtime.

Hendelser

ThunderPhone legger til plattformhendelser oppå sanntidsprotokollen. Økten sender dem ut:

@session.llm.session.on("thunderphone_call_ended")  # or on the RealtimeSession you hold
def on_call_ended(event):
    print("call ended:", event["reason"])

RealtimeSession eksponerer call_id når økten er aktiv. Bruk den med GET /v1/calls/{call_id} for å hente opptaket, transkripsjonen og vurderingen etter samtalen. Alle andre call.*-hendelser (overføring, tastatur, tale ignorert) kommer som thunderphone_call_event.

Begrensninger

  • Taledeteksjon skjer på serversiden og er alltid aktivert; rammeverkets taledeteksjon (turn_detectionAgentSession) ignoreres.
  • Instruksjoner og verktøy kan ikke endres etter at samtalen starter.
  • Lyd er 16-bits mono-PCM ved 24 kHz i begge retninger.
  • Videobilder ignoreres.