Använd ThunderPhone från LiveKit Agents
Kör en ThunderPhone-röstagent som realtidsmodellen (tal-till-tal) i en LiveKit Agents-session, med LiveKit-rum, SIP och telefoni runt den.
LiveKit Agents är ett ramverk med öppen källkod för röstagenter i realtid ovanpå LiveKit-rum. ThunderPhone ansluts som realtidsmodellen: ramverket skickar deltagarens ljud, ThunderPhone returnerar agentens röst, transkriptioner och funktionsanrop, och LiveKits rum, SIP-trunkar och telefoni transporterar ljudet. Taligenkänning, språkmodellen, rösten, turordning, 47 språk och verktyg körs alla på ThunderPhone.
Samtal som görs på detta sätt visas i samtalshistoriken och debiteras enligt din produkts minutpris, precis som alla andra realtidssamtal. Det finns ingen prenumeration och inget ThunderPhone-telefonnummer inblandat.
Installera
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPluginet omsluter LiveKits OpenAI Realtime-modell eftersom ThunderPhones
Realtime WebSocket använder samma protokoll. Det
kräver livekit-agents 1.8 eller senare.
Kör en sparad agent
Allt agenten gör (prompt, röst, motor, språk, verktyg, hälsning, tystnadskontroller) konfigureras i ThunderPhone. Sessionen överför bara ljud.
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 sparad agent hälsar och kör sina egna verktyg i ThunderPhone; LiveKit-
Agent-instruktionerna och verktygen skickas inte. Samtalet avslutas när
ThunderPhone-agenten lägger på, och sessionen stängs tillsammans med den.
Konfigurera sessionen direkt i koden
Utan agent_id kommer instruktioner och verktyg från LiveKit-Agent, på
samma sätt som för OpenAI. product väljer motor och voice väljer
ThunderPhone-röst.
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 och verktyg när samtalet startar, så
update_instructions, update_tools och agentöverlämningar som ändrar dem
stöds inte mitt i samtalet. Direktkonfigurerade sessioner är klientstyrda:
agenten talar när du anropar generate_reply() eller när deltagaren avslutar
sin tur.
Alternativ
| Argument | Betydelse |
|---|---|
api_key | Hemlig nyckel (sk_live_...). Standardvärdet är THUNDERPHONE_API_KEY. |
agent_id | Kör en sparad agent. Kan inte användas tillsammans med product och voice. |
product | Motor för infogade sessioner: spark, bolt eller storm. |
voice | ThunderPhone-röstnamn för infogade sessioner. |
language | Ledtråd om primärt språk för infogade sessioner, till exempel es. |
from_number, to_number | Nummer som ska registreras i samtalet när rummet hanterar en telefonlinje. |
live_transcripts | Strömma fragment av uppringarens transkribering mitt i ett yttrande (debiteras extra). |
base_url | Åsidosättning av slutpunkt, standardvärdet är wss://api.thunderphone.com/v1/realtime. |
Händelser
ThunderPhone lägger till plattformshändelser ovanpå realtidsprotokollet. Sessionen skickar ut 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 exponerar call_id när sessionen är aktiv. Använd det med
GET /v1/calls/{call_id} för att hämta inspelningen,
transkriberingen och bedömningen efter samtalet. Alla andra call.*-händelser (överföring,
knappsats, tal ignorerat) kommer som thunderphone_call_event.
Begränsningar
- Turdetektering sker på serversidan och är alltid aktiverad; turdetektering på ramverkssidan
(
turn_detectionpåAgentSession) ignoreras. - Instruktioner och verktyg kan inte ändras när samtalet har startat.
- Ljudet är 16-bitars mono-PCM vid 24 kHz i båda riktningarna.
- Videobilder ignoreras.