ThunderPhone 2.0 je tu.Samostojna uporaba že od 2 ¢/min.Preberite obvestilo

Connect tools & data

Uporabljajte ThunderPhone iz LiveKit Agents

Zaženite glasovnega agenta ThunderPhone kot model v realnem času (govor-v-govor) v seji LiveKit Agents, z okoljem LiveKit rooms, SIP in telefonijo.

LiveKit Agents je odprtokodno ogrodje za glasovne agente v realnem času, ki temelji na sobah LiveKit. ThunderPhone se vključi kot model v realnem času: ogrodje pošlje zvok udeleženca, ThunderPhone vrne glas agenta, prepise in klice funkcij, soba LiveKit, SIP-trunki in telefonija pa prenašajo zvok. Prepoznavanje govora, jezikovni model, glas, izmenjava potez, 47 jezikov in orodja se izvajajo v ThunderPhone.

Klici, opravljeni na ta način, se prikažejo v zgodovini klicev in se zaračunajo po ceni vašega izdelka na minuto, kot vsak drug klic v realnem času. Naročnina ali telefonska številka ThunderPhone nista potrebni.

Namestitev

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

Vtičnik ovije model OpenAI Realtime iz LiveKit, ker Realtime WebSocket ThunderPhone uporablja isti protokol. Zahteva livekit-agents 1.8 ali novejšo različico.

Zaženite shranjenega agenta

Vse, kar agent počne (poziv, glas, mehanizem, jeziki, orodja, pozdrav, preverjanja tišine), je konfigurirano v ThunderPhone. Seja prenaša samo zvok.

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))

Shranjeni agent pozdravi in izvaja lastna orodja v ThunderPhone; navodila in orodja LiveKitovega Agent niso poslana. Klic se konča, ko agent ThunderPhone odloži slušalko, seja pa se zaključi z njim.

Konfigurirajte sejo v vrstici

Brez agent_id navodila in orodja prihajajo iz LiveKitovega Agent, enako kot pri OpenAI. product izbere mehanizem, voice pa izbere glas 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 ob začetku klica zamrzne navodila in orodja, zato update_instructions, update_tools in predaje med agenti, ki jih spremenijo, med klicem niso podprte. Seje v vrstici upravlja odjemalec: agent govori, ko pokličete generate_reply() ali ko udeleženec zaključi potezo.

Možnosti

ArgumentPomen
api_keySkrivni ključ (sk_live_...). Privzeto je THUNDERPHONE_API_KEY.
agent_idZaženite shranjenega agenta. Medsebojno izključujoče se s product in voice.
productPogon za vdelane seje: spark, bolt ali storm.
voiceIme glasu ThunderPhone za vdelane seje.
languageNamig za primarni jezik pri vdelanih sejah, npr. es.
from_number, to_numberŠtevilke, ki jih želite zabeležiti v klicu, ko soba upravlja telefonsko linijo.
live_transcriptsPretakajte dele prepisa klicatelja med izgovorom (dodatno se zaračuna).
base_urlPreglasitev končne točke, privzeto wss://api.thunderphone.com/v1/realtime.

Dogodki

ThunderPhone poleg protokola v realnem času dodaja dogodke platforme. Seja jih oddaja:

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

RealtimeSession izpostavi call_id, ko seja postane aktivna. Uporabite ga z GET /v1/calls/{call_id} za pridobitev posnetka, prepisa in ocene po klicu. Vsi drugi dogodki call.* (preusmeritev, tipkovnica, prezrt govor) prispejo kot thunderphone_call_event.

Omejitve

  • Zaznavanje potez poteka na strežniški strani in je vedno vklopljeno; zaznavanje potez na strani ogrodja (turn_detection v AgentSession) se prezre.
  • Navodil in orodij po začetku klica ni mogoče spremeniti.
  • Zvok je 16-bitni enokanalni PCM pri 24 kHz v obeh smereh.
  • Videookvirji se prezrejo.