ThunderPhone 2.0 je tu.Všetko zvládnete sami, už od 2 centov/min.Prečítať oznámenie

Connect tools & data

Používanie ThunderPhone z LiveKit Agents

Spustite hlasového agenta ThunderPhone ako model v reálnom čase (z reči na reč) relácie LiveKit Agents s miestnosťami LiveKit, protokolom SIP a telefóniou okolo neho.

LiveKit Agents je open-source framework pre hlasových agentov v reálnom čase nad miestnosťami LiveKit. ThunderPhone sa pripája ako model v reálnom čase: framework odosiela zvuk účastníka, ThunderPhone vracia hlas agenta, prepisy a volania funkcií a miestnosť LiveKit, SIP trunky a telefónia prenášajú zvuk. Rozpoznávanie reči, jazykový model, hlas, striedanie v hovore, 47 jazykov a nástroje bežia v ThunderPhone.

Hovory uskutočnené týmto spôsobom sa zobrazujú v histórii hovorov a účtujú sa podľa sadzby za minútu vášho produktu ako každý iný hovor v reálnom čase. Nie je potrebné predplatné ani telefónne číslo ThunderPhone.

Inštalácia

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

Doplnok používa model OpenAI Realtime od LiveKit, pretože Realtime WebSocket ThunderPhone používa rovnaký protokol. Vyžaduje livekit-agents vo verzii 1.8 alebo novšej.

Spustenie uloženého agenta

Všetko, čo agent robí (výzva, hlas, engine, jazyky, nástroje, uvítanie, kontroly ticha), sa konfiguruje v ThunderPhone. Relácia iba prenáša 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 sa pozdraví a spúšťa vlastné nástroje v ThunderPhone; pokyny a nástroje Agent v LiveKit sa neodosielajú. Hovor sa skončí, keď agent ThunderPhone zavesí, a relácia sa spolu s ním ukončí.

Konfigurácia relácie priamo v kóde

Bez agent_id pochádzajú pokyny a nástroje z Agent v LiveKit rovnako ako pri OpenAI. product vyberá engine a voice vyberá 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 first

ThunderPhone pri začatí hovoru zafixuje pokyny a nástroje, takže update_instructions, update_tools a odovzdania agentovi, ktoré ich menia, nie sú počas hovoru podporované. Relácie v kóde sú riadené klientom: agent hovorí, keď zavoláte generate_reply() alebo keď účastník dokončí svoju repliku.

Možnosti

ArgumentVýznam
api_keyTajný kľúč (sk_live_...). Predvolene sa používa THUNDERPHONE_API_KEY.
agent_idSpustenie uloženého agenta. Vzájomne sa vylučuje s product a voice.
productModul pre relácie vytvorené priamo v kóde: spark, bolt alebo storm.
voiceNázov hlasu ThunderPhone pre relácie vytvorené priamo v kóde.
languagePrimárna jazyková nápoveda pre relácie vytvorené priamo v kóde, napr. es.
from_number, to_numberČísla, ktoré sa majú zaznamenať v hovore, keď miestnosť obsluhuje telefónnu linku.
live_transcriptsStreamovanie fragmentov prepisu volajúceho počas prejavu (účtuje sa navyše).
base_urlPrepísanie koncového bodu, predvolene wss://api.thunderphone.com/v1/realtime.

Udalosti

ThunderPhone pridáva k protokolu realtime udalosti platformy. Relácia ich vysiela:

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

Objekt RealtimeSession sprístupní call_id, keď je relácia aktívna. Použite ho s GET /v1/calls/{call_id} na získanie nahrávky, prepisu a hodnotenia po hovore. Každá ďalšia udalosť call.* (presmerovanie, klávesnica, ignorovaná reč) prichádza ako thunderphone_call_event.

Obmedzenia

  • Detekcia striedania replík prebieha na strane servera a je vždy aktívna; detekcia striedania replík na strane frameworku (turn_detection v AgentSession) sa ignoruje.
  • Pokyny a nástroje po začatí hovoru nemožno zmeniť.
  • Zvuk je 16-bitové mono PCM pri 24 kHz v oboch smeroch.
  • Videorámce sa ignorujú.