Pipecat પરથી ThunderPhone નો ઉપયોગ કરો
તમારા પોતાના ટ્રાન્સપોર્ટ અને ટેલિફોની સાથે, Pipecat પાઇપલાઇનમાં speech-to-speech સેવા તરીકે 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-bit મોનો PCM છે.
- વિડિયો ફ્રેમ્સ અવગણવામાં આવે છે.