ThunderPhone 2.0 er lansert.Kom i gang selv, fra 2 ¢/min.Les mer om lanseringen

Connect tools & data

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 key

Pakken 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

ArgumentBetydning
api_keyHemmelig nøkkel (sk_live_...). Bruker som standard THUNDERPHONE_API_KEY.
agent_idKjør en lagret stemmeagent. Kan ikke brukes sammen med product og voice.
productMotor for innebygde økter: spark, bolt eller storm.
voiceThunderPhone-stemmenavn for innebygde økter.
languagePrimært språkhinne for innebygde økter, for eksempel es.
from_number, to_numberNumre som skal registreres på samtalen når pipelinen ligger foran en telefonlinje.
live_transcriptsStrøm transkripsjonsfragmenter fra innringeren midt i en ytring (faktureres ekstra).
greet_on_connectBe om et første svar så snart økten er klar.
end_task_on_call_endedSend 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.