Megérkezett a ThunderPhone 2.0.Önkiszolgáló használat már 2 cent/perctől.Olvassa el a bejelentést

Connect tools & data

A ThunderPhone használata LiveKit Agentsből

Futtasson egy ThunderPhone hangalapú AI-ügynököt egy LiveKit Agents-munkamenet valós idejű (beszéd–beszéd) modelljeként, LiveKit-szobákkal, SIP-pel és telefonos integrációval körülvéve.

LiveKit Agents egy nyílt forráskódú keretrendszer valós idejű hangalapú AI-ügynökökhöz, LiveKit-szobákra építve. A ThunderPhone valós idejű modellként csatlakozik: a keretrendszer elküldi a résztvevő hangját, a ThunderPhone visszaadja az ügynök hangját, az átiratokat és a függvényhívásokat, a LiveKit szobája, SIP-trönkjei és telefonos rendszere pedig továbbítja a hangot. A beszédfelismerés, a nyelvi modell, a hang, a beszédváltás-kezelés, a 47 nyelv és az eszközök mind a ThunderPhone-on futnak.

Az így indított hívások megjelennek a híváselőzményekben, és ugyanúgy az Ön termékének percdíja szerint kerülnek számlázásra, mint bármely más valós idejű hívás. Nincs előfizetés, és nincs szükség ThunderPhone-telefonszámra.

Telepítés

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

A beépülő modul a LiveKit OpenAI Realtime modelljét burkolja, mivel a ThunderPhone Realtime WebSocket ugyanazt a protokollt használja. A működéshez livekit-agents 1.8-as vagy újabb verzió szükséges.

Mentett ügynök futtatása

Az ügynök minden működése (utasítás, hang, motor, nyelvek, eszközök, üdvözlés, csendellenőrzések) a ThunderPhone-on van konfigurálva. A munkamenet csak a hangot továbbítja.

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

A mentett ügynök a ThunderPhone-on üdvözöl és futtatja saját eszközeit; a LiveKit Agent utasításai és eszközei nem kerülnek elküldésre. A hívás akkor ér véget, amikor a ThunderPhone-ügynök bontja a hívást, és a munkamenet vele együtt zárul.

A munkamenet közvetlen konfigurálása

agent_id nélkül az utasítások és az eszközök a LiveKit Agent-től származnak, ugyanúgy, mint az OpenAI esetében. A product választja ki a motort, a voice pedig a ThunderPhone hangját.

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

A ThunderPhone a hívás kezdetekor rögzíti az utasításokat és az eszközöket, ezért a update_instructions, a update_tools és az ezeket módosító ügynökátadások nem támogatottak hívás közben. A közvetlenül konfigurált munkamenetek kliens által vezéreltek: az ügynök akkor beszél, amikor meghívja a generate_reply() függvényt, vagy amikor a résztvevő befejez egy beszédfordulót.

Beállítások

ArgumentumJelentés
api_keyTitkos kulcs (sk_live_...). Alapértelmezett értéke: THUNDERPHONE_API_KEY.
agent_idMentett AI-ügynök futtatása. Kölcsönösen kizárja a product és a voice használatát.
productMotor beágyazott munkamenetekhez: spark, bolt vagy storm.
voiceThunderPhone-hang neve beágyazott munkamenetekhez.
languageElsődleges nyelvi utalás beágyazott munkamenetekhez, például es.
from_number, to_numberA hívásban rögzítendő számok, amikor a szoba telefonvonalhoz kapcsolódik.
live_transcriptsA hívó átiratának töredékeit streameli a megszólalás közben (külön díj ellenében).
base_urlVégpont felülbírálása, alapértelmezett értéke: wss://api.thunderphone.com/v1/realtime.

Események

A ThunderPhone platformeseményeket ad hozzá a valós idejű protokollhoz. A munkamenet ezeket bocsátja ki:

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

A RealtimeSession a munkamenet aktiválódása után teszi elérhetővé a call_id értéket. Használja ezt a GET /v1/calls/{call_id} végponttal a felvétel, az átirat és az értékelés lekéréséhez a hívás után. Minden más call.* esemény (átirányítás, billentyűzet, figyelmen kívül hagyott beszéd) thunderphone_call_event eseményként érkezik.

Korlátozások

  • A beszédforduló-felismerés szerveroldali és mindig be van kapcsolva; a keretrendszeroldali beszédforduló-felismerés (turn_detection az AgentSession objektumon) figyelmen kívül marad.
  • Az utasítások és az eszközök a hívás megkezdése után nem módosíthatók.
  • A hang mindkét irányban 16 bites, monó PCM 24 kHz-en.
  • A videoképkockák figyelmen kívül maradnak.