ThunderPhone 2.0 jau čia.Pradėkite savarankiškai – nuo 2 ¢ už minutę.Skaityti pranešimą

Connect tools & data

Naudokite ThunderPhone su LiveKit Agents

Paleiskite ThunderPhone balso agentą kaip LiveKit Agents sesijos realaus laiko (kalbos į kalbą) modelį, kartu naudodami LiveKit kambarius, SIP ir telefoniją.

LiveKit Agents yra atvirojo kodo sistema, skirta realaus laiko balso agentams LiveKit kambariuose. ThunderPhone veikia kaip realaus laiko modelis: sistema siunčia dalyvio garsą, ThunderPhone grąžina agento balsą, transkriptus ir funkcijų iškvietimus, o LiveKit kambarys, SIP magistralės ir telefonija perduoda garsą. Kalbos atpažinimas, kalbos modelis, balsas, eiliškumo valdymas, 47 kalbos ir įrankiai veikia ThunderPhone.

Tokiu būdu atlikti skambučiai rodomi skambučių istorijoje ir apmokestinami pagal jūsų produkto minutės tarifą, kaip ir bet kuris kitas realaus laiko skambutis. Nėra prenumeratos ir nereikia ThunderPhone telefono numerio.

Įdiegimas

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

Papildinys apgaubia LiveKit OpenAI Realtime modelį, nes ThunderPhone Realtime WebSocket naudoja tą patį protokolą. Jam reikia livekit-agents 1.8 arba naujesnės versijos.

Paleiskite išsaugotą agentą

Viskas, ką daro agentas (nurodymai, balsas, modulis, kalbos, įrankiai, pasisveikinimas, patikrinimai tylos metu), konfigūruojama ThunderPhone. Sesija perduoda tik garsą.

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

Išsaugotas agentas pasisveikina ir vykdo savo įrankius ThunderPhone; LiveKit Agent nurodymai ir įrankiai nesiunčiami. Skambutis baigiasi, kai ThunderPhone agentas nutraukia pokalbį, ir kartu uždaroma sesija.

Konfigūruokite sesiją tiesiogiai

Be agent_id nurodymai ir įrankiai gaunami iš LiveKit Agent, taip pat, kaip ir naudojant OpenAI. product parenka modulį, o voice parenka ThunderPhone balsą.

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 užfiksuoja nurodymus ir įrankius prasidėjus skambučiui, todėl update_instructions, update_tools ir agentų perdavimai, kurie juos keičia, skambučio metu nepalaikomi. Tiesioginės sesijos valdomos kliento: agentas kalba, kai iškviečiate generate_reply() arba kai dalyvis užbaigia savo ėjimą.

Parinktys

ArgumentasReikšmė
api_keySlaptasis raktas (sk_live_...). Pagal numatytuosius nustatymus naudojamas THUNDERPHONE_API_KEY.
agent_idPaleiskite išsaugotą agentą. Negalima naudoti kartu su product ir voice.
productTiesioginių seansų variklis: spark, bolt arba storm.
voiceThunderPhone balso pavadinimas tiesioginiams seansams.
languagePagrindinės kalbos nuoroda tiesioginiams seansams, pvz., es.
from_number, to_numberNumeriai, kuriuos reikia įrašyti į skambučio duomenis, kai kambarys aptarnauja telefono liniją.
live_transcriptsTransliuokite skambintojo transkripcijos fragmentus jam dar nebaigus kalbėti (apmokestinama papildomai).
base_urlGalinio taško perrašymas, numatytoji reikšmė wss://api.thunderphone.com/v1/realtime.

Įvykiai

ThunderPhone prie realaus laiko protokolo prideda platformos įvykius. Seansas juos siunčia:

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

Kai seansas aktyvus, RealtimeSession pateikia call_id. Naudokite jį su GET /v1/calls/{call_id}, kad po skambučio gautumėte įrašą, transkripciją ir įvertinimą. Visi kiti call.* įvykiai (peradresavimas, klaviatūra, ignoruota kalba) pateikiami kaip thunderphone_call_event.

Ribojimai

  • Kalbėjimo eigos aptikimas vykdomas serverio pusėje ir visada įjungtas; sistemos pusės kalbėjimo eigos aptikimas (turn_detection objekte AgentSession) ignoruojamas.
  • Prasidėjus skambučiui negalima keisti instrukcijų ir įrankių.
  • Garsas abiem kryptimis yra 16 bitų vieno kanalo PCM, 24 kHz.
  • Vaizdo kadrai ignoruojami.