Izmantojiet ThunderPhone no Pipecat
Darbiniet ThunderPhone balss aģentu kā runas-runas pakalpojumu Pipecat konveijerā, izmantojot savu transporta un telefonijas risinājumu.
Pipecat ir atvērtā pirmkoda ietvars balss aģentu veidošanai no kombinējamiem pakalpojumiem. ThunderPhone tiek integrēts kā runas-runas LLM pakalpojums: Pipecat nosūta zvanītāja audio, ThunderPhone atgriež aģenta balsi, transkriptus un funkciju izsaukumus, savukārt Pipecat transports (Daily, LiveKit, Twilio, WebRTC, lokāls mikrofons) pārraida audio. Runas atpazīšana, valodas modelis, balss, sarunas kārtu pārvaldība, 47 valodas un rīki darbojas ThunderPhone.
Šādi veiktie zvani tiek rādīti zvanu vēsturē un par tiem tiek piemērota jūsu produkta maksa par minūti, tāpat kā par jebkuru citu reāllaika zvanu. Nav ne abonementa, ne ThunderPhone tālruņa numura.
Instalēšana
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPakotne aptver Pipecat OpenAI Realtime pakalpojumu, jo ThunderPhone
Realtime WebSocket izmanto to pašu protokolu. Tai ir
nepieciešams pipecat-ai 1.8 vai jaunāks.
Saglabāta balss aģenta palaišana
Viss, ko balss aģents dara (uzvedne, balss, dzinējs, valodas, rīki, sveiciens, klusuma pārbaudes), tiek konfigurēts ThunderPhone. Konveijers tikai pārvieto audio.
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))Saglabāts balss aģents sāk zvanu pēc sava grafika, tāpēc pakalpojums
nepieprasa sākuma atbildi no Pipecat. Norādiet greet_on_connect=True, ja
tomēr to vēlaties.
Konfigurēt sesiju tieši kodā
Bez agent_id norādījumi un rīki tiek ņemti no Pipecat konteksta,
tāpat kā OpenAI gadījumā. product izvēlas dzinēju, bet voice izvēlas
ThunderPhone balsi.
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"],
)
]),
)Tieši kodā konfigurētās sesijas vada klients: balss aģents runā pirmais, jo Pipecat pieprasa atbildi, kad tiek saņemts konteksts, un klusuma laikā paliek kluss, ja vien nepievienojat ziņojumu vai nepieprasāt citu atbildi.
Opcijas
| Arguments | Nozīme |
|---|---|
api_key | Slepenā atslēga (sk_live_...). Pēc noklusējuma tiek izmantota THUNDERPHONE_API_KEY. |
agent_id | Palaidiet saglabātu balss aģentu. Savstarpēji izslēdzošs ar product un voice. |
product | Dzinējs iekļautajām sesijām: spark, bolt vai storm. |
voice | ThunderPhone balss nosaukums iekļautajām sesijām. |
language | Primārās valodas norāde iekļautajām sesijām, piemēram, es. |
from_number, to_number | Numuri, kas jāreģistrē zvanā, kad konveijers apkalpo tālruņa līniju. |
live_transcripts | Straumējiet zvanītāja transkripcijas fragmentus izteikuma laikā (par papildu maksu). |
greet_on_connect | Pieprasiet pirmo atbildi, tiklīdz sesija ir gatava. |
end_task_on_call_ended | Nosūtiet EndWorkerFrame, kad ThunderPhone beidz zvanu (ieslēgts pēc noklusējuma). |
Notikumi
ThunderPhone reāllaika protokolam pievieno platformas notikumus. Pakalpojums tos piegādā apstrādātājiem:
@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 tiek iestatīts, kad sesija ir aktīva. Izmantojiet to ar
GET /v1/calls/{call_id}, lai pēc zvana iegūtu ierakstu,
transkripciju un novērtējumu.
Ierobežojumi
- Dialoga gājienu noteikšana notiek servera pusē un vienmēr ir ieslēgta; Pipecat vadīti dialoga gājieni
(
turn_detection=False) netiek atbalstīti. - Pakalpojumā reģistrētās funkcijas darbojas tikai iekļautajām sesijām. Saglabāts balss aģents savus rīkus izpilda ThunderPhone.
- Audio abos virzienos ir 16 bitu mono PCM ar 24 kHz.
- Video kadri tiek ignorēti.