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 keyLisä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 firstThunderPhone 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
| Argumentti | Merkitys |
|---|---|
api_key | Salainen avain (sk_live_...). Oletusarvo on THUNDERPHONE_API_KEY. |
agent_id | Käynnistä tallennettu agentti. Ei voi käyttää yhdessä parametrien product ja voice kanssa. |
product | Moottori upotetuille istunnoille: spark, bolt tai storm. |
voice | ThunderPhone-äänen nimi upotetuille istunnoille. |
language | Ensisijaisen kielen vihje upotetuille istunnoille, esim. es. |
from_number, to_number | Puheluun tallennettavat numerot, kun huone toimii puhelinlinjan edustana. |
live_transcripts | Suoratoista soittajan litterointikatkelmia kesken puheenvuoron (lisäveloitus). |
base_url | Pää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_detectionkohteessaAgentSession) 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.