ThunderPhone 2.0 on nyt julkaistu.Ota käyttöön itse – alkaen 2¢/min.Lue lisää julkistuksesta

Connect tools & data

Käytä ThunderPhonea LiveKit Agentsista

Käytä ThunderPhone-puheagenttia LiveKit Agents -istunnon reaaliaikaisena (puheesta puheeksi) mallina LiveKit-huoneiden, SIPin ja puhelintoimintojen ympäröimänä.

LiveKit Agents on avoimen lähdekoodin kehys reaaliaikaisille puheagenteille LiveKit-huoneissa. ThunderPhone liitetään reaaliaikaiseksi malliksi: kehys lähettää osallistujan äänen, ThunderPhone palauttaa agentin äänen, transkriptit ja funktiokutsut, ja LiveKitin huone, SIP-rungot ja puhelinjärjestelmä välittävät äänen. Puheentunnistus, kielimalli, ääni, vuorottelu, 47 kieltä ja työkalut toimivat kaikki ThunderPhonessa.

Näin tehdyt puhelut näkyvät puheluhistoriassa, ja niistä laskutetaan tuotteesi minuuttikohtaisen hinnan mukaan kuten muistakin reaaliaikaisista puheluista. Tilausta tai ThunderPhone-puhelinnumeroa ei tarvita.

Asenna

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

Lisäosa käärii LiveKitin OpenAI Realtime -mallin, koska ThunderPhonen Realtime WebSocket käyttää samaa protokollaa. Se vaatii livekit-agents-version 1.8 tai uudemman.

Käynnistä tallennettu agentti

Kaikki agentin toiminta (kehote, ääni, moottori, kielet, työkalut, tervehdys ja hiljaisuuden tarkistukset) määritetään ThunderPhonessa. Istunto välittää vain ääntä.

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

Tallennettu agentti tervehtii ja käyttää omia työkalujaan ThunderPhonessa; LiveKitin Agent-agentin ohjeita ja työkaluja ei lähetetä. Puhelu päättyy, kun ThunderPhone-agentti katkaisee puhelun, ja istunto sulkeutuu sen mukana.

Määritä istunto suoraan

Jos agent_id puuttuu, ohjeet ja työkalut tulevat LiveKitin Agent-agentista samalla tavalla kuin OpenAIlla. product valitsee moottorin ja voice valitsee ThunderPhone-äänen.

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 lukitsee ohjeet ja työkalut puhelun alkaessa, joten update_instructions, update_tools ja niitä muuttavia agentin siirtoja ei tueta kesken puhelun. Suoraan määritetyt istunnot ovat asiakassovelluksen ohjaamia: agentti puhuu, kun kutsut generate_reply()-funktiota tai kun osallistuja päättää puheenvuoronsa.

Vaihtoehdot

ArgumenttiMerkitys
api_keySalainen avain (sk_live_...). Oletusarvo on THUNDERPHONE_API_KEY.
agent_idKäynnistä tallennettu agentti. Ei voi käyttää yhdessä parametrien product ja voice kanssa.
productMoottori upotetuille istunnoille: spark, bolt tai storm.
voiceThunderPhone-äänen nimi upotetuille istunnoille.
languageEnsisijaisen kielen vihje upotetuille istunnoille, esim. es.
from_number, to_numberPuheluun tallennettavat numerot, kun huone toimii puhelinlinjan edustana.
live_transcriptsSuoratoista soittajan litterointikatkelmia kesken puheenvuoron (lisäveloitus).
base_urlPäätepisteen ohitus, oletusarvo wss://api.thunderphone.com/v1/realtime.

Tapahtumat

ThunderPhone lisää reaaliaikaprotokollan päälle alustatapahtumia. Istunto lähettää ne:

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

RealtimeSession tarjoaa call_id:n, kun istunto on käynnissä. Käytä sitä yhdessä GET /v1/calls/{call_id} -pyynnön kanssa hakeaksesi puhelun jälkeen tallenteen, litteroinnin ja arvioinnin. Kaikki muut call.*-tapahtumat (siirto, näppäimistö, puhe ohitettu) saapuvat tapahtumana thunderphone_call_event.

Rajoitukset

  • Vuorontunnistus tapahtuu palvelinpuolella ja on aina käytössä; kehyspuolen vuorontunnistus (turn_detection kohteessa AgentSession) ohitetaan.
  • Ohjeita ja työkaluja ei voi muuttaa puhelun alkamisen jälkeen.
  • Ääni on 16-bittistä mono-PCM:ää 24 kHz:n taajuudella kumpaankin suuntaan.
  • Videokehykset ohitetaan.