Bruk ThunderPhone fra Pipecat
Kjør en ThunderPhone-stemmeagent som tale-til-tale-tjenesten i en Pipecat-pipeline, med din egen transport og telefoni.
Pipecat er et åpen kildekode-rammeverk for å bygge stemmeagenter av sammensettbare tjenester. ThunderPhone kobles til som en tale-til-tale LLM-tjeneste: Pipecat sender innringerens lyd, ThunderPhone returnerer agentens stemme, transkripsjoner og funksjonskall, og Pipecats transport (Daily, LiveKit, Twilio, WebRTC, en lokal mikrofon) overfører lyden. Talegjenkjenning, språkmodellen, stemmen, turtaking, 47 språk og verktøy kjører alle på ThunderPhone.
Samtaler som foretas på denne måten, vises i samtalehistorikken og faktureres til produktets pris per minutt, på samme måte som alle andre sanntidssamtaler. Det er ikke noe abonnement, og det brukes ikke noe ThunderPhone-telefonnummer.
Installer
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPakken pakker inn Pipecats OpenAI Realtime-tjeneste, fordi ThunderPhones
Realtime WebSocket snakker samme protokoll. Den
krever pipecat-ai 1.8 eller nyere.
Kjør en lagret agent
Alt agenten gjør (prompt, stemme, motor, språk, verktøy, hilsen, stillhetsoppfølginger) konfigureres i ThunderPhone. Pipelinjen flytter bare lyd.
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))En lagret agent åpner samtalen etter sin egen tidsplan, så tjenesten ber ikke
Pipecat om et åpningssvar. Send greet_on_connect=True hvis du likevel vil ha et.
Konfigurer økten direkte
Uten agent_id kommer instruksjoner og verktøy fra Pipecat-konteksten, på
samme måte som for OpenAI. product velger motoren, og voice velger
ThunderPhone-stemmen.
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"],
)
]),
)Direkte økter styres av klienten: agenten snakker først fordi Pipecat ber om et svar når konteksten kommer, og forblir stille under stillhet med mindre du legger til en melding eller ber om et nytt svar.
Alternativer
| Argument | Betydning |
|---|---|
api_key | Hemmelig nøkkel (sk_live_...). Bruker som standard THUNDERPHONE_API_KEY. |
agent_id | Kjør en lagret stemmeagent. Kan ikke brukes sammen med product og voice. |
product | Motor for innebygde økter: spark, bolt eller storm. |
voice | ThunderPhone-stemmenavn for innebygde økter. |
language | Primært språkhinne for innebygde økter, for eksempel es. |
from_number, to_number | Numre som skal registreres på samtalen når pipelinen ligger foran en telefonlinje. |
live_transcripts | Strøm transkripsjonsfragmenter fra innringeren midt i en ytring (faktureres ekstra). |
greet_on_connect | Be om et første svar så snart økten er klar. |
end_task_on_call_ended | Send EndWorkerFrame når ThunderPhone avslutter samtalen (på som standard). |
Hendelser
ThunderPhone legger til plattformhendelser oppå sanntidsprotokollen. Tjenesten leverer dem til behandlere:
@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 angis når økten er aktiv. Bruk den med
GET /v1/calls/{call_id} for å hente opptaket,
transkripsjonen og vurderingen etter samtalen.
Begrensninger
- Turdeteksjon skjer på serversiden og er alltid på; Pipecat-styrte turer
(
turn_detection=False) støttes ikke. - Funksjoner som registreres på tjenesten, kjøres bare for innebygde økter. En lagret stemmeagent kjører sine egne verktøy på ThunderPhone.
- Lyd er 16-biters mono-PCM ved 24 kHz i begge retninger.
- Videobilder ignoreres.