Käytä ThunderPhonea Pipecatista
Käytä ThunderPhone-puheagenttia puheesta puheeseen -palveluna Pipecat-putkessa oman siirtoyhteytesi ja puhelininfrastruktuurisi kanssa.
Pipecat on avoimen lähdekoodin kehys, jolla voi rakentaa puheagentteja yhdisteltävistä palveluista. ThunderPhone liitetään siihen puheesta puheeksi -LLM-palveluna: Pipecat lähettää soittajan äänen, ThunderPhone palauttaa agentin äänen, litteroinnit ja funktiokutsut, ja Pipecatin siirtokerros (Daily, LiveKit, Twilio, WebRTC, paikallinen mikrofoni) välittää äänen. Puheentunnistus, kielimalli, ääni, vuorottelu, 47 kieltä ja työkalut toimivat kaikki ThunderPhonessa.
Näin tehdyt puhelut näkyvät puheluhistoriassa, ja niistä veloitetaan tuotteesi minuuttihinnan mukaan kuten muistakin reaaliaikaisista puheluista. Tilauksia tai ThunderPhone-puhelinnumeroa ei tarvita.
Asenna
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPaketti käärii Pipecatin OpenAI Realtime -palvelun, koska ThunderPhonen
Realtime WebSocket käyttää samaa protokollaa. Se
vaatii pipecat-ai-version 1.8 tai uudemman.
Suorita tallennettu agentti
Kaikki, mitä agentti tekee (kehote, ääni, moottori, kielet, työkalut, tervehdys, hiljaisuuden tarkistukset), määritetään ThunderPhonessa. Putki siirtää vain ääntä.
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))Tallennettu agentti aloittaa puhelun oman ajoituksensa mukaisesti, joten palvelu ei
pyydä Pipecatilta aloitusvastausta. Välitä greet_on_connect=True, jos
haluat sellaisen silti.
Määritä istunto suoraan
Ilman agent_id-tunnistetta ohjeet ja työkalut tulevat Pipecat-kontekstista
samalla tavalla kuin OpenAI:ssa. product valitsee moottorin ja voice valitsee
ThunderPhone-äänen.
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"],
)
]),
)Suoraan määritetyt istunnot ovat asiakkaan ohjaamia: agentti puhuu ensin, koska Pipecat pyytää vastausta, kun konteksti saapuu, ja pysyy hiljaa hiljaisuuden aikana, ellet lisää viestiä tai pyydä uutta vastausta.
Vaihtoehdot
| Argumentti | Merkitys |
|---|---|
api_key | Salainen avain (sk_live_...). Oletusarvo on THUNDERPHONE_API_KEY. |
agent_id | Suorita tallennettu agentti. Ei voi käyttää yhdessä arvojen product ja voice kanssa. |
product | Moottori sisäisille istunnoille: spark, bolt tai storm. |
voice | ThunderPhone-puheäänen nimi sisäisille istunnoille. |
language | Ensisijaisen kielen vihje sisäisille istunnoille, esimerkiksi es. |
from_number, to_number | Puheluun tallennettavat numerot, kun putkisto toimii puhelinlinjan edessä. |
live_transcripts | Suoratoista soittajan litteroinnin osia kesken lausuman (lisäveloitus). |
greet_on_connect | Pyydä ensimmäinen vastaus heti, kun istunto on valmis. |
end_task_on_call_ended | Lähetä EndWorkerFrame, kun ThunderPhone päättää puhelun (oletusarvoisesti käytössä). |
Tapahtumat
ThunderPhone lisää alustan tapahtumia reaaliaikaprotokollan päälle. Palvelu välittää ne käsittelijöille:
@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 asetetaan, kun istunto on käynnissä. Käytä sitä yhdessä
GET /v1/calls/{call_id}-päätepisteen kanssa hakeaksesi tallenteen,
litteroinnin ja arvioinnin puhelun jälkeen.
Rajoitukset
- Vuoron tunnistus tehdään palvelinpuolella ja se on aina käytössä; Pipecatin ohjaamia
vuoroja (
turn_detection=False) ei tueta. - Palveluun rekisteröidyt funktiot suoritetaan vain sisäisissä istunnoissa. Tallennettu agentti suorittaa omat työkalunsa ThunderPhonessa.
- Ääni on 16-bittistä monofonista PCM-ääntä 24 kHz:n taajuudella molempiin suuntiin.
- Videokehykset ohitetaan.