ThunderPhone 2.0 je tady.Začnete bez obchodníka, od 2 ¢/min.Přečíst oznámení

Connect tools & data

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 key

Plugin 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 first

ThunderPhone 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

ArgumentVýznam
api_keyTajný klíč (sk_live_...). Výchozí hodnota je THUNDERPHONE_API_KEY.
agent_idSpustí uloženého agenta. Vzájemně se vylučuje s product a voice.
productModul pro inline relace: spark, bolt nebo storm.
voiceNázev hlasu ThunderPhone pro inline relace.
languageNá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_transcriptsStreamuje fragmenty přepisu volajícího během promluvy (účtováno zvlášť).
base_urlPř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_detection v AgentSession) 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í.