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 keyVtič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 firstThunderPhone 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
| Argument | Pomen |
|---|---|
api_key | Skrivni ključ (sk_live_...). Privzeto je THUNDERPHONE_API_KEY. |
agent_id | Zaženite shranjenega agenta. Medsebojno izključujoče se s product in voice. |
product | Pogon za vdelane seje: spark, bolt ali storm. |
voice | Ime glasu ThunderPhone za vdelane seje. |
language | Namig 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_transcripts | Pretakajte dele prepisa klicatelja med izgovorom (dodatno se zaračuna). |
base_url | Preglasitev 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_detectionvAgentSession) 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.