Tumia ThunderPhone kutoka Pipecat
Endesha ejenti ya sauti ya ThunderPhone kama huduma ya sauti-kwa-sauti ndani ya pipeline ya Pipecat, ukitumia transport na simu zako mwenyewe.
Pipecat ni fremu ya chanzo huria ya kutengeneza ejenti za sauti kwa kutumia huduma zinazoweza kuunganishwa. ThunderPhone huunganishwa kama huduma ya LLM ya usemi-kwa-usemi: Pipecat hutuma sauti ya mpigaji, ThunderPhone hurejesha sauti ya ejenti, nakala za mazungumzo na miito ya vitendaji, na usafirishaji wa Pipecat (Daily, LiveKit, Twilio, WebRTC, kipaza sauti cha ndani) hubeba sauti. Utambuzi wa usemi, modeli ya lugha, sauti, ubadilishanaji wa zamu, lugha 47 na zana zote huendeshwa kwenye ThunderPhone.
Simu zinazopigwa kwa njia hii huonekana katika historia ya simu na hutozwa kwa kiwango cha kila dakika cha bidhaa yako kama simu nyingine yoyote ya wakati halisi. Hakuna usajili wala nambari ya simu ya ThunderPhone inayohusika.
Sakinisha
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyKifurushi hiki hufunika huduma ya OpenAI Realtime ya Pipecat, kwa sababu
Realtime WebSocket ya ThunderPhone hutumia itifaki sawa. Kinahitaji
pipecat-ai 1.8 au toleo jipya zaidi.
Endesha ejenti iliyohifadhiwa
Kila kitu ambacho ejenti hufanya (prompt, sauti, injini, lugha, zana, salamu, ukaguzi wa ukimya) husanidiwa kwenye ThunderPhone. Pipeline husogeza sauti pekee.
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))Ejenti iliyohifadhiwa huanza simu kwa ratiba yake yenyewe, kwa hivyo huduma haiombi
jibu la kuanzisha kutoka Pipecat. Pitisha greet_on_connect=True ikiwa unataka
hilo hata hivyo.
Sanidi kikao ndani ya msimbo
Bila agent_id, maelekezo na zana hutoka kwenye muktadha wa Pipecat, kwa
njia sawa na zinavyofanya kwa OpenAI. product huchagua injini na voice huchagua
sauti ya 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"],
)
]),
)Vikao vya ndani huongozwa na mteja: ejenti huzungumza kwanza kwa sababu Pipecat huomba jibu muktadha unapowasili, na hubaki kimya wakati wa ukimya isipokuwa uongeze ujumbe au uombe jibu jingine.
Chaguo
| Hoja | Maana |
|---|---|
api_key | Ufunguo wa siri (sk_live_...). Chaguo-msingi ni THUNDERPHONE_API_KEY. |
agent_id | Endesha ejenti iliyohifadhiwa. Haiwezi kutumiwa pamoja na product na voice. |
product | Injini ya vipindi vya ndani ya mstari: spark, bolt au storm. |
voice | Jina la sauti la ThunderPhone kwa vipindi vya ndani ya mstari. |
language | Kidokezo cha lugha kuu kwa vipindi vya ndani ya mstari, kwa mfano es. |
from_number, to_number | Nambari za kurekodi kwenye simu wakati pipeline inashughulikia laini ya simu. |
live_transcripts | Tiririsha vipande vya manukuu ya mpigaji simu katikati ya matamshi (hutozwa ziada). |
greet_on_connect | Omba jibu la kwanza mara tu kipindi kinapokuwa tayari. |
end_task_on_call_ended | Tuma EndWorkerFrame wakati ThunderPhone inamaliza simu (imewashwa kwa chaguo-msingi). |
Matukio
ThunderPhone huongeza matukio ya jukwaa juu ya itifaki ya wakati halisi. Huduma huyafikisha kwa vishughulikiaji:
@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 huwekwa mara tu kipindi kinapokuwa hai. Itumie pamoja na
GET /v1/calls/{call_id} kupata rekodi,
manukuu na tathmini baada ya simu.
Vikomo
- Utambuzi wa zamu hufanywa upande wa seva na huwa umewashwa daima; zamu
zinazoendeshwa na Pipecat (
turn_detection=False) hazitumiki. - Functions zilizosajiliwa kwenye huduma huendeshwa kwa vipindi vya ndani ya mstari pekee. Ejenti iliyohifadhiwa hutekeleza zana zake yenyewe kwenye ThunderPhone.
- Sauti ni PCM ya mono ya biti 16 kwa 24 kHz katika pande zote mbili.
- Fremu za video hupuuzwa.