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 keyPapildinys 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 firstThunderPhone 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
| Argumentas | Reikšmė |
|---|---|
api_key | Slaptasis raktas (sk_live_...). Pagal numatytuosius nustatymus naudojamas THUNDERPHONE_API_KEY. |
agent_id | Paleiskite išsaugotą agentą. Negalima naudoti kartu su product ir voice. |
product | Tiesioginių seansų variklis: spark, bolt arba storm. |
voice | ThunderPhone balso pavadinimas tiesioginiams seansams. |
language | Pagrindinės kalbos nuoroda tiesioginiams seansams, pvz., es. |
from_number, to_number | Numeriai, kuriuos reikia įrašyti į skambučio duomenis, kai kambarys aptarnauja telefono liniją. |
live_transcripts | Transliuokite skambintojo transkripcijos fragmentus jam dar nebaigus kalbėti (apmokestinama papildomai). |
base_url | Galinio 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_detectionobjekteAgentSession) ignoruojamas. - Prasidėjus skambučiui negalima keisti instrukcijų ir įrankių.
- Garsas abiem kryptimis yra 16 bitų vieno kanalo PCM, 24 kHz.
- Vaizdo kadrai ignoruojami.