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 keyProgramtillegget 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 firstThunderPhone 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
| Argument | Betydning |
|---|---|
api_key | Hemmelig nøkkel (sk_live_...). Bruker som standard THUNDERPHONE_API_KEY. |
agent_id | Kjør en lagret agent. Kan ikke brukes sammen med product og voice. |
product | Motor for innebygde økter: spark, bolt eller storm. |
voice | ThunderPhone-stemmenavn for innebygde økter. |
language | Hint om primærspråk for innebygde økter, for eksempel es. |
from_number, to_number | Numre som skal registreres i samtalen når rommet er koblet til en telefonlinje. |
live_transcripts | Strøm fragmenter av innringerens transkripsjon midt i en ytring (faktureres ekstra). |
base_url | Overstyring 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_detectionpåAgentSession) 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.