Používejte ThunderPhone z LiveKit Agents
Spusťte hlasového agenta ThunderPhone jako model v reálném čase (řeč na řeč) relace LiveKit Agents s místnostmi LiveKit, SIP a telefonií.
LiveKit Agents je open-source framework pro hlasové agenty v reálném čase postavený nad místnostmi LiveKit. ThunderPhone se připojuje jako model v reálném čase: framework odesílá zvuk účastníka, ThunderPhone vrací hlas agenta, přepisy a volání funkcí a místnost LiveKit, SIP trunky a telefonie přenášejí zvuk. Rozpoznávání řeči, jazykový model, hlas, střídání promluv, 47 jazyků a nástroje běží v ThunderPhone.
Hovory uskutečněné tímto způsobem se zobrazí v historii hovorů a jsou účtovány minutovou sazbou vašeho produktu stejně jako jakýkoli jiný hovor v reálném čase. Nevyžaduje se předplatné ani telefonní číslo ThunderPhone.
Instalace
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPlugin obaluje model OpenAI Realtime pro LiveKit, protože Realtime WebSocket
ThunderPhone používá stejný protokol. Vyžaduje livekit-agents ve verzi 1.8
nebo novější.
Spuštění uloženého agenta
Vše, co agent dělá (výzva, hlas, engine, jazyky, nástroje, pozdrav, reakce při tichu), se konfiguruje v ThunderPhone. Relace pouze přenáší 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))Uložený agent pozdraví a spouští vlastní nástroje v ThunderPhone; instrukce
a nástroje Agent z LiveKit se neodesílají. Hovor skončí, když agent
ThunderPhone zavěsí, a relace se spolu s ním uzavře.
Konfigurace relace přímo v kódu
Bez agent_id pocházejí instrukce a nástroje z Agent LiveKit stejně jako
u OpenAI. product vybírá engine a voice vybírá hlas ThunderPhone.
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 při zahájení hovoru uzamkne instrukce a nástroje, takže
update_instructions, update_tools a předání agentovi, která je mění,
nejsou během hovoru podporována. Relace v kódu jsou řízené klientem: agent
promluví, když zavoláte generate_reply() nebo když účastník dokončí promluvu.
Možnosti
| Argument | Význam |
|---|---|
api_key | Tajný klíč (sk_live_...). Výchozí hodnota je THUNDERPHONE_API_KEY. |
agent_id | Spustí uloženého agenta. Vzájemně se vylučuje s product a voice. |
product | Modul pro inline relace: spark, bolt nebo storm. |
voice | Název hlasu ThunderPhone pro inline relace. |
language | Nápověda pro primární jazyk inline relací, například es. |
from_number, to_number | Čísla, která se mají zaznamenat v hovoru, když místnost obsluhuje telefonní linku. |
live_transcripts | Streamuje fragmenty přepisu volajícího během promluvy (účtováno zvlášť). |
base_url | Přepíše endpoint, výchozí hodnota je wss://api.thunderphone.com/v1/realtime. |
Události
ThunderPhone přidává k realtime protokolu události platformy. Relace je vysílá:
@session.llm.session.on("thunderphone_call_ended") # or on the RealtimeSession you hold
def on_call_ended(event):
print("call ended:", event["reason"])Jakmile je relace aktivní, RealtimeSession zpřístupní call_id. Použijte ho s
GET /v1/calls/{call_id} k načtení nahrávky,
přepisu a hodnocení po hovoru. Každá další událost call.* (přepojení,
klávesnice, ignorovaná řeč) přichází jako thunderphone_call_event.
Omezení
- Detekce střídání replik probíhá na serveru a je vždy zapnutá; detekce střídání replik na straně frameworku
(
turn_detectionvAgentSession) se ignoruje. - Pokyny a nástroje nelze po zahájení hovoru změnit.
- Zvuk je 16bitové mono PCM při 24 kHz v obou směrech.
- Snímky videa se ignorují.