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 keyहे पॅकेज Pipecat ची OpenAI Realtime सेवा रॅप करते, कारण ThunderPhone चे
Realtime WebSocket त्याच प्रोटोकॉलवर कार्य करते. यासाठी 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 शिवाय, सूचना आणि टूल्स Pipecat कॉन्टेक्स्टमधून येतात, जसे त्या OpenAI साठी येतात. 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 असतो.
- व्हिडिओ फ्रेम्सकडे दुर्लक्ष केले जाते.