LiveKit Agents నుండి ThunderPhoneను ఉపయోగించండి
LiveKit రూమ్లు, SIP మరియు టెలిఫోనీతో కూడిన LiveKit Agents సెషన్లో ThunderPhone వాయిస్ ఏజెంట్ను రియల్టైమ్ (స్పీచ్-టు-స్పీచ్) మోడల్గా అమలు చేయండి.
LiveKit Agents అనేది LiveKit రూమ్లపై రియల్టైమ్ వాయిస్ ఏజెంట్ల కోసం ఓపెన్-సోర్స్ ఫ్రేమ్వర్క్. ThunderPhone ఇందులో రియల్టైమ్ మోడల్గా పనిచేస్తుంది: ఫ్రేమ్వర్క్ పాల్గొనేవారి ఆడియోను పంపుతుంది, ThunderPhone ఏజెంట్ వాయిస్, ట్రాన్స్క్రిప్ట్లు మరియు ఫంక్షన్ కాల్లను తిరిగి అందిస్తుంది, అలాగే LiveKit రూమ్, SIP ట్రంక్లు మరియు టెలిఫోనీ ఆడియోను నిర్వహిస్తాయి. స్పీచ్ రికగ్నిషన్, లాంగ్వేజ్ మోడల్, వాయిస్, టర్న్-టేకింగ్, 47 భాషలు మరియు టూల్స్ అన్నీ ThunderPhoneలో అమలవుతాయి.
ఈ విధంగా చేసిన కాల్లు కాల్ చరిత్రలో కనిపిస్తాయి మరియు ఇతర రియల్టైమ్ కాల్ల మాదిరిగానే మీ ఉత్పత్తి నిమిషానికి రేటు ప్రకారం బిల్ చేయబడతాయి. ఇందులో సభ్యత్వం లేదా ThunderPhone ఫోన్ నంబర్ ఉండదు.
ఇన్స్టాల్ చేయండి
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyThunderPhone యొక్క
రియల్టైమ్ వెబ్సాకెట్ అదే ప్రోటోకాల్ను ఉపయోగిస్తుంది కాబట్టి, ఈ
ప్లగిన్ LiveKit యొక్క OpenAI రియల్టైమ్ మోడల్ను ర్యాప్ చేస్తుంది. దీనికి
livekit-agents 1.8 లేదా కొత్త వెర్షన్ అవసరం.
సేవ్ చేసిన ఏజెంట్ను అమలు చేయండి
ఏజెంట్ చేసే ప్రతిదీ (prompt, వాయిస్, ఇంజిన్, భాషలు, టూల్స్, అభివాదం, నిశ్శబ్ద తనిఖీలు) ThunderPhoneలో కాన్ఫిగర్ చేయబడతాయి. సెషన్ ఆడియోను మాత్రమే తరలిస్తుంది.
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))సేవ్ చేసిన ఏజెంట్ ThunderPhoneలో అభివాదం చేసి తన స్వంత టూల్స్ను అమలు చేస్తుంది; LiveKit
Agent యొక్క సూచనలు మరియు టూల్స్ పంపబడవు. ThunderPhone ఏజెంట్ కాల్ను
ముగించినప్పుడు కాల్ ముగుస్తుంది, దానితో పాటు సెషన్ కూడా మూసివేయబడుతుంది.
సెషన్ను ఇన్లైన్లో కాన్ఫిగర్ చేయండి
agent_id లేకుండా, సూచనలు మరియు టూల్స్ LiveKit Agent నుండి వస్తాయి,
OpenAI కోసం వచ్చినట్లే. product ఇంజిన్ను ఎంచుకుంటుంది మరియు voice
ThunderPhone వాయిస్ను ఎంచుకుంటుంది.
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 సూచనలు మరియు టూల్స్ను స్థిరపరుస్తుంది, కాబట్టి
update_instructions, update_tools మరియు వాటిని మార్చే ఏజెంట్ హ్యాండ్-ఆఫ్లకు
కాల్ మధ్యలో మద్దతు లేదు. ఇన్లైన్ సెషన్లు క్లయింట్-నియంత్రితమైనవి: మీరు
generate_reply()ను కాల్ చేసినప్పుడు లేదా పాల్గొనేవారు ఒక టర్న్ను పూర్తి చేసినప్పుడు ఏజెంట్ మాట్లాడుతుంది.
ఎంపికలు
| ఆర్గ్యుమెంట్ | అర్థం |
|---|---|
api_key | రహస్య కీ (sk_live_...). డిఫాల్ట్గా THUNDERPHONE_API_KEY ఉంటుంది. |
agent_id | సేవ్ చేసిన ఏజెంట్ను అమలు చేయండి. product, voiceతో పరస్పర విరుద్ధం. |
product | ఇన్లైన్ సెషన్ల కోసం ఇంజిన్: spark, bolt లేదా storm. |
voice | ఇన్లైన్ సెషన్ల కోసం ThunderPhone వాయిస్ పేరు. |
language | ఇన్లైన్ సెషన్ల కోసం ప్రాథమిక భాష సూచన, ఉదాహరణకు es. |
from_number, to_number | రూమ్ ఫోన్ లైన్కు ఫ్రంట్గా ఉన్నప్పుడు కాల్లో రికార్డ్ చేయాల్సిన నంబర్లు. |
live_transcripts | ఉచ్చారణ మధ్యలో కాలర్ ట్రాన్స్క్రిప్ట్ భాగాలను స్ట్రీమ్ చేయండి (అదనపు బిల్లింగ్ వర్తిస్తుంది). |
base_url | ఎండ్పాయింట్ ఓవర్రైడ్, డిఫాల్ట్ wss://api.thunderphone.com/v1/realtime. |
ఈవెంట్లు
ThunderPhone రియల్టైమ్ ప్రోటోకాల్కు అదనంగా ప్లాట్ఫారమ్ ఈవెంట్లను జోడిస్తుంది. సెషన్ వీటిని విడుదల చేస్తుంది:
@session.llm.session.on("thunderphone_call_ended") # or on the RealtimeSession you hold
def on_call_ended(event):
print("call ended:", event["reason"])సెషన్ లైవ్ అయిన తర్వాత RealtimeSession, call_idను అందిస్తుంది. కాల్ తర్వాత
రికార్డింగ్, ట్రాన్స్క్రిప్ట్, గ్రేడ్ను పొందడానికి దీన్ని
GET /v1/calls/{call_id}తో ఉపయోగించండి. ఇతర అన్ని call.* ఈవెంట్లు (బదిలీ,
కీప్యాడ్, విస్మరించిన ప్రసంగం) thunderphone_call_eventగా వస్తాయి.
పరిమితులు
- టర్న్ డిటెక్షన్ సర్వర్-వైపు ఉంటుంది మరియు ఎల్లప్పుడూ ప్రారంభించబడి ఉంటుంది; ఫ్రేమ్వర్క్-వైపు టర్న్ డిటెక్షన్
(
AgentSessionలోనిturn_detection) విస్మరించబడుతుంది. - కాల్ ప్రారంభమైన తర్వాత సూచనలు మరియు టూల్లను మార్చలేరు.
- ఆడియో రెండు దిశల్లోనూ 24 kHz వద్ద 16-బిట్ మోనో PCMగా ఉంటుంది.
- వీడియో ఫ్రేమ్లు విస్మరించబడతాయి.