Brug ThunderPhone fra LiveKit Agents
Kør en ThunderPhone-stemmeagent som realtidsmodellen (tale-til-tale) i en LiveKit Agents-session med LiveKit-rum, SIP og telefoni omkring den.
LiveKit Agents er et open source-framework til stemmeagenter i realtid oven på LiveKit-rum. ThunderPhone integreres som realtidsmodellen: frameworket sender deltagerens lyd, ThunderPhone returnerer agentens stemme, transskriptioner og funktionskald, og LiveKits rum, SIP-trunks og telefoni transporterer lyden. Talegenkendelse, sprogmodellen, stemmen, turhåndtering, 47 sprog og værktøjer kører alle på ThunderPhone.
Opkald foretaget på denne måde vises i opkaldshistorikken og faktureres til dit produkts minutpris som ethvert andet realtidsopkald. Der er intet abonnement og intet ThunderPhone-telefonnummer involveret.
Installer
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPluginet indpakker LiveKits OpenAI Realtime-model, fordi ThunderPhones
Realtime WebSocket taler den samme protokol. Det
kræver livekit-agents 1.8 eller nyere.
Kør en gemt agent
Alt, agenten gør (prompt, stemme, motor, sprog, værktøjer, hilsen, stilhedstjek), konfigureres på ThunderPhone. Sessionen flytter kun 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 gemt agent hilser og kører sine egne værktøjer på ThunderPhone; LiveKit-
Agentens instruktioner og værktøjer sendes ikke. Opkaldet afsluttes, når
ThunderPhone-agenten lægger på, og sessionen lukkes sammen med den.
Konfigurer sessionen direkte
Uden agent_id kommer instruktioner og værktøjer fra LiveKit-Agenten på
samme måde som for OpenAI. product vælger motoren, og voice vælger
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 firstThunderPhone låser instruktioner og værktøjer, når opkaldet starter, så
update_instructions, update_tools og agentoverdragelser, der ændrer dem,
understøttes ikke under opkaldet. Direkte sessioner styres af klienten: agenten
taler, når du kalder generate_reply(), eller når deltageren afslutter en tur.
Indstillinger
| Argument | Betydning |
|---|---|
api_key | Hemmelig nøgle (sk_live_...). Standard er THUNDERPHONE_API_KEY. |
agent_id | Kør en gemt agent. Kan ikke bruges sammen med product og voice. |
product | Motor til integrerede sessioner: spark, bolt eller storm. |
voice | ThunderPhone-stemmenavn til integrerede sessioner. |
language | Primært sprogtip til integrerede sessioner, f.eks. es. |
from_number, to_number | Numre, der skal registreres i opkaldet, når rummet håndterer en telefonlinje. |
live_transcripts | Stream fragmenter af opkalderens transskription midt i en ytring (faktureres ekstra). |
base_url | Tilsidesættelse af endpoint, standard er wss://api.thunderphone.com/v1/realtime. |
Hændelser
ThunderPhone tilføjer platformshændelser oven på realtime-protokollen. Sessionen udsender dem:
@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 sessionen er aktiv. Brug den med
GET /v1/calls/{call_id} til at hente optagelsen,
transskriptionen og vurderingen efter opkaldet. Alle andre call.*-hændelser
(overførsel, tastatur, tale ignoreret) ankommer som thunderphone_call_event.
Begrænsninger
- Turdetektering foregår på serversiden og er altid aktiveret; turdetektering
på frameworksiden (
turn_detectionpåAgentSession) ignoreres. - Instruktioner og værktøjer kan ikke ændres, når opkaldet er startet.
- Lyd er 16-bit mono-PCM ved 24 kHz i begge retninger.
- Videobilleder ignoreres.