Pipecat-ൽ നിന്ന് ThunderPhone ഉപയോഗിക്കുക
നിങ്ങളുടെ സ്വന്തം ട്രാൻസ്പോർട്ടും ടെലിഫോണിയും ഉപയോഗിച്ച്, Pipecat പൈപ്പ്ലൈനിനുള്ളിലെ സ്പീച്ച്-ടു-സ്പീച്ച് സേവനമായി ThunderPhone വോയ്സ് ഏജന്റ് പ്രവർത്തിപ്പിക്കുക.
Pipecat സംയോജിപ്പിക്കാവുന്ന സേവനങ്ങൾ ഉപയോഗിച്ച് വോയ്സ് ഏജന്റുകളെ നിർമ്മിക്കുന്നതിനുള്ള ഒരു ഓപ്പൺ-സോഴ്സ് ഫ്രെയിംവർക്കാണ്. ThunderPhone ഒരു ശബ്ദത്തിൽനിന്ന് ശബ്ദത്തിലേക്കുള്ള LLM സേവനമായി പ്ലഗ് ഇൻ ചെയ്യുന്നു: Pipecat വിളിക്കുന്നയാളുടെ ഓഡിയോ അയയ്ക്കുന്നു, ThunderPhone ഏജന്റിന്റെ ശബ്ദം, ട്രാൻസ്ക്രിപ്റ്റുകൾ, ഫംഗ്ഷൻ കോളുകൾ എന്നിവ തിരികെ നൽകുന്നു, കൂടാതെ Pipecat-ന്റെ ട്രാൻസ്പോർട്ട് (Daily, LiveKit, Twilio, WebRTC, ഒരു പ്രാദേശിക മൈക്രോഫോൺ) ഓഡിയോ കൈമാറുന്നു. ശബ്ദ തിരിച്ചറിയൽ, ഭാഷാ മോഡൽ, ശബ്ദം, ടേൺ എടുക്കൽ, 47 ഭാഷകൾ, ടൂളുകൾ എന്നിവയെല്ലാം ThunderPhone-ൽ പ്രവർത്തിക്കുന്നു.
ഇങ്ങനെ നടത്തുന്ന കോളുകൾ കോൾ ചരിത്രത്തിൽ ദൃശ്യമാകും, കൂടാതെ മറ്റേതൊരു തത്സമയ കോളിനെയും പോലെ നിങ്ങളുടെ ഉൽപ്പന്നത്തിന്റെ മിനിറ്റിനുള്ള നിരക്കിൽ ബിൽ ചെയ്യപ്പെടും. സബ്സ്ക്രിപ്ഷനോ ThunderPhone ഫോൺ നമ്പറോ ആവശ്യമില്ല.
ഇൻസ്റ്റാൾ ചെയ്യുക
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyThunderPhone-ന്റെ തത്സമയ WebSocket അതേ പ്രോട്ടോക്കോൾ ഉപയോഗിക്കുന്നതിനാൽ, പാക്കേജ് Pipecat-ന്റെ OpenAI Realtime സേവനത്തെ റാപ്പ് ചെയ്യുന്നു. ഇതിന് pipecat-ai 1.8 അല്ലെങ്കിൽ അതിന് ശേഷമുള്ള പതിപ്പ് ആവശ്യമാണ്.
സംരക്ഷിച്ച ഏജന്റ് പ്രവർത്തിപ്പിക്കുക
ഏജന്റ് ചെയ്യുന്ന എല്ലാം (prompt, ശബ്ദം, എഞ്ചിൻ, ഭാഷകൾ, ടൂളുകൾ, അഭിവാദ്യം, നിശ്ശബ്ദ പരിശോധനകൾ) ThunderPhone-ൽ കോൺഫിഗർ ചെയ്തിരിക്കുന്നു. പൈപ്പ്ലൈൻ ഓഡിയോ മാത്രം കൈമാറുന്നു.
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.worker import PipelineParams, PipelineWorker
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat_thunderphone import ThunderPhoneRealtimeLLMService
llm = ThunderPhoneRealtimeLLMService(agent_id=12)
context = LLMContext()
aggregators = LLMContextAggregatorPair(context)
pipeline = Pipeline([
transport.input(),
aggregators.user(),
llm,
aggregators.assistant(),
transport.output(),
])
worker = PipelineWorker(pipeline, params=PipelineParams(allow_interruptions=True))സംരക്ഷിച്ച ഏജന്റ് സ്വന്തം ഷെഡ്യൂളിൽ കോൾ ആരംഭിക്കുന്നു, അതിനാൽ സേവനം Pipecat-നോട് ഒരു ആരംഭ പ്രതികരണം അഭ്യർത്ഥിക്കില്ല. എന്നിരുന്നാലും അത് വേണമെങ്കിൽ greet_on_connect=True നൽകുക.
സെഷൻ ഇൻലൈനായി കോൺഫിഗർ ചെയ്യുക
agent_id ഇല്ലാതെ, OpenAI-യിൽ ചെയ്യുന്നതുപോലെ നിർദേശങ്ങളും ടൂളുകളും Pipecat കോൺടെക്സ്റ്റിൽനിന്ന് ലഭിക്കുന്നു. product എഞ്ചിൻ തിരഞ്ഞെടുക്കുകയും voice ThunderPhone ശബ്ദം തിരഞ്ഞെടുക്കുകയും ചെയ്യുന്നു.
from pipecat.adapters.schemas.function_schema import FunctionSchema
from pipecat.adapters.schemas.tools_schema import ToolsSchema
from pipecat.services.llm_service import FunctionCallParams
llm = ThunderPhoneRealtimeLLMService(product="bolt", voice="olivia", language="es")
async def check_availability(params: FunctionCallParams):
slots = await calendar.free_slots(params.arguments["date"])
await params.result_callback({"slots": slots})
llm.register_function("check_availability", check_availability)
context = LLMContext(
messages=[{"role": "system", "content": "You are Acme Dental's receptionist."}],
tools=ToolsSchema(standard_tools=[
FunctionSchema(
name="check_availability",
description="Free appointment slots on a date",
properties={"date": {"type": "string"}},
required=["date"],
)
]),
)ഇൻലൈൻ സെഷനുകൾ ക്ലയന്റ്-നിയന്ത്രിതമാണ്: കോൺടെക്സ്റ്റ് എത്തുമ്പോൾ Pipecat പ്രതികരണം അഭ്യർത്ഥിക്കുന്നതിനാൽ ഏജന്റ് ആദ്യം സംസാരിക്കുന്നു, കൂടാതെ നിങ്ങൾ ഒരു സന്ദേശം ചേർക്കുകയോ മറ്റൊരു പ്രതികരണം അഭ്യർത്ഥിക്കുകയോ ചെയ്യാത്ത പക്ഷം നിശ്ശബ്ദതയിൽ മിണ്ടാതിരിക്കും.
ഓപ്ഷനുകൾ
| ആർഗ്യുമെന്റ് | അർത്ഥം |
|---|---|
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 | ഉച്ചാരണത്തിനിടയിൽ കോളറുടെ ട്രാൻസ്ക്രിപ്റ്റ് ഭാഗങ്ങൾ സ്ട്രീം ചെയ്യുക (അധിക നിരക്ക് ബാധകം). |
greet_on_connect | സെഷൻ തയ്യാറാകുന്ന ഉടൻ ആദ്യ പ്രതികരണം അഭ്യർത്ഥിക്കുക. |
end_task_on_call_ended | ThunderPhone കോൾ അവസാനിപ്പിക്കുമ്പോൾ EndWorkerFrame പുഷ് ചെയ്യുക (ഡിഫോൾട്ടായി ഓണാണ്). |
ഇവന്റുകൾ
ThunderPhone റിയൽടൈം പ്രോട്ടോക്കോളിന് മുകളിൽ പ്ലാറ്റ്ഫോം ഇവന്റുകൾ ചേർക്കുന്നു. സേവനം അവ ഹാൻഡ്ലറുകളിലേക്ക് കൈമാറുന്നു:
@llm.event_handler("on_call_ended")
async def on_call_ended(service, event):
print("call ended:", event["reason"], "call id:", service.call_id)സെഷൻ ലൈവ് ആയിക്കഴിഞ്ഞാൽ service.call_id സജ്ജമാകും. കോൾ കഴിഞ്ഞ് റെക്കോർഡിംഗ്,
ട്രാൻസ്ക്രിപ്റ്റ്, ഗ്രേഡ് എന്നിവ ലഭ്യമാക്കാൻ ഇത്
GET /v1/calls/{call_id} ഉപയോഗിച്ച് പ്രയോജനപ്പെടുത്തുക.
പരിധികൾ
- ടേൺ കണ്ടെത്തൽ സെർവർ-സൈഡിലാണ്, എപ്പോഴും ഓണാണ്; Pipecat നിയന്ത്രിക്കുന്ന ടേണുകൾ
(
turn_detection=False) പിന്തുണയ്ക്കുന്നില്ല. - സേവനത്തിൽ രജിസ്റ്റർ ചെയ്ത ഫംഗ്ഷനുകൾ ഇൻലൈൻ സെഷനുകളിൽ മാത്രം പ്രവർത്തിക്കും. സേവ് ചെയ്ത ഏജന്റ് ThunderPhone-ൽ സ്വന്തം ടൂളുകൾ പ്രവർത്തിപ്പിക്കുന്നു.
- രണ്ട് ദിശകളിലും ഓഡിയോ 24 kHz-ൽ 16-ബിറ്റ് മോണോ PCM ആണ്.
- വീഡിയോ ഫ്രെയിമുകൾ അവഗണിക്കുന്നു.