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-ന്റെ Realtime WebSocket അതേ പ്രോട്ടോക്കോൾ ഉപയോഗിക്കുന്നതിനാൽ പ്ലഗിൻ LiveKit-ന്റെ OpenAI Realtime മോഡലിനെ റാപ് ചെയ്യുന്നു. ഇതിന് 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 ഇല്ലാതെ, OpenAI-യ്ക്കുള്ളതുപോലെ നിർദ്ദേശങ്ങളും ടൂളുകളും LiveKit Agent-ൽനിന്ന് ലഭിക്കുന്നു. 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. |
ഇവന്റുകൾ
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 ആണ്.
- വീഡിയോ ഫ്രെയിമുകൾ അവഗണിക്കപ്പെടുന്നു.