Izmantojiet ThunderPhone no LiveKit Agents
Darbiniet ThunderPhone balss aģentu kā LiveKit Agents sesijas reāllaika (runa-runa) modeli, izmantojot LiveKit telpas, SIP un telefoniju.
LiveKit Agents ir atvērtā pirmkoda ietvars reāllaika balss aģentiem, kas darbojas LiveKit istabās. ThunderPhone tiek pievienots kā reāllaika modelis: ietvars nosūta dalībnieka audio, ThunderPhone atgriež aģenta balsi, transkriptus un funkciju izsaukumus, bet LiveKit istaba, SIP maģistrāles un telefonija pārraida audio. Runas atpazīšana, valodas modelis, balss, kārtu pārvaldība, 47 valodas un rīki — tas viss darbojas ThunderPhone.
Šādi veiktie zvani tiek rādīti zvanu vēsturē, un par tiem tiek piemērota jūsu produkta maksa par minūti, tāpat kā par jebkuru citu reāllaika zvanu. Nav ne abonementa, ne ThunderPhone tālruņa numura.
Instalēšana
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keySpraudnis aptver LiveKit OpenAI Realtime modeli, jo ThunderPhone
Realtime WebSocket izmanto to pašu protokolu. Tam ir
nepieciešams livekit-agents 1.8 vai jaunāks.
Saglabāta aģenta palaišana
Viss, ko aģents dara (uzvedne, balss, dzinējs, valodas, rīki, sveiciens, klusuma pārbaudes), tiek konfigurēts ThunderPhone. Sesija tikai pārsūta audio.
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))Saglabāts balss aģents sveicina un palaiž savus rīkus ThunderPhone; LiveKit
Agent norādījumi un rīki netiek nosūtīti. Zvans beidzas, kad
ThunderPhone aģents noliek klausuli, un līdz ar to tiek aizvērta arī sesija.
Sesijas konfigurēšana iekļauti
Bez agent_id norādījumi un rīki tiek ņemti no LiveKit Agent,
tāpat kā OpenAI gadījumā. product izvēlas dzinēju, bet voice izvēlas
ThunderPhone balsi.
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 fiksē norādījumus un rīkus, kad zvans sākas, tāpēc
update_instructions, update_tools un aģentu nodošana, kas tos maina,
zvana laikā netiek atbalstīti. Iekļautās sesijas vada klients: aģents runā,
kad izsaucat generate_reply() vai kad dalībnieks pabeidz runas kārtu.
Opcijas
| Arguments | Nozīme |
|---|---|
api_key | Slepenā atslēga (sk_live_...). Pēc noklusējuma izmanto THUNDERPHONE_API_KEY. |
agent_id | Palaidiet saglabātu balss aģentu. Nevar izmantot kopā ar product un voice. |
product | Dzinis iebūvētām sesijām: spark, bolt vai storm. |
voice | ThunderPhone balss nosaukums iebūvētām sesijām. |
language | Primārās valodas norāde iebūvētām sesijām, piemēram, es. |
from_number, to_number | Numuri, kas jāreģistrē zvanā, kad telpa apkalpo tālruņa līniju. |
live_transcripts | Straumējiet zvanītāja transkripcijas fragmentus runas vidū (par papildu maksu). |
base_url | Galapunkta ignorēšana, pēc noklusējuma wss://api.thunderphone.com/v1/realtime. |
Notikumi
ThunderPhone papildina reāllaika protokolu ar platformas notikumiem. Sesija tos ģenerē:
@session.llm.session.on("thunderphone_call_ended") # or on the RealtimeSession you hold
def on_call_ended(event):
print("call ended:", event["reason"])RealtimeSession nodrošina call_id, tiklīdz sesija ir aktīva. Izmantojiet to ar
GET /v1/calls/{call_id}, lai pēc zvana iegūtu ierakstu,
transkripciju un vērtējumu. Visi pārējie call.* notikumi (pārsūtīšana,
tastatūra, ignorēta runa) tiek saņemti kā thunderphone_call_event.
Ierobežojumi
- Runas kārtu noteikšana notiek servera pusē un vienmēr ir ieslēgta; ietvara puses runas kārtu noteikšana
(
turn_detectionobjektāAgentSession) tiek ignorēta. - Norādījumus un rīkus pēc zvana sākuma nevar mainīt.
- Audio abos virzienos ir 16 bitu mono PCM ar 24 kHz frekvenci.
- Video kadri tiek ignorēti.