ThunderPhone 2.0 ir klāt.Sāciet uzreiz — no 2 centiem minūtē.Lasīt paziņojumu

Connect tools & data

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 key

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

ThunderPhone 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

ArgumentsNozīme
api_keySlepenā atslēga (sk_live_...). Pēc noklusējuma izmanto THUNDERPHONE_API_KEY.
agent_idPalaidiet saglabātu balss aģentu. Nevar izmantot kopā ar product un voice.
productDzinis iebūvētām sesijām: spark, bolt vai storm.
voiceThunderPhone balss nosaukums iebūvētām sesijām.
languagePrimārās valodas norāde iebūvētām sesijām, piemēram, es.
from_number, to_numberNumuri, kas jāreģistrē zvanā, kad telpa apkalpo tālruņa līniju.
live_transcriptsStraumējiet zvanītāja transkripcijas fragmentus runas vidū (par papildu maksu).
base_urlGalapunkta 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_detection objektā 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.