Uporabljajte ThunderPhone iz Pipecat
Zaženite glasovnega agenta ThunderPhone kot storitev govora v govor znotraj cevovoda Pipecat z lastnim prenosom in telefonijo.
Pipecat je odprtokodno ogrodje za gradnjo glasovnih agentov iz sestavljivih storitev. ThunderPhone se vključi kot storitev LLM iz govora v govor: Pipecat pošlje zvok klicatelja, ThunderPhone vrne glas agenta, prepise in klice funkcij, prenos Pipecat (Daily, LiveKit, Twilio, WebRTC, lokalni mikrofon) pa prenaša zvok. Prepoznavanje govora, jezikovni model, glas, izmenjava govornih potez, 47 jezikov in orodja se izvajajo v ThunderPhone.
Tako opravljeni klici so prikazani v zgodovini klicev in se zaračunajo po tarifi vašega izdelka na minuto kot vsak drug klic v realnem času. Naročnina ali telefonska številka ThunderPhone nista potrebni.
Namestitev
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyPaket ovija storitev OpenAI Realtime za Pipecat, ker Realtime WebSocket
ThunderPhone uporablja isti protokol. Potrebuje pipecat-ai 1.8 ali novejšo različico.
Zagon shranjenega agenta
Vse, kar agent počne (poziv, glas, pogon, jeziki, orodja, pozdrav, preverjanja tišine), se konfigurira v ThunderPhone. Cevovod samo prenaša zvok.
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))Shranjeni agent začne klic po svojem urniku, zato storitev od Pipecat ne
zahteva začetnega odgovora. Če ga kljub temu želite, podajte greet_on_connect=True.
Konfiguriranje seje neposredno
Brez agent_id navodila in orodja izvirajo iz konteksta Pipecat, enako kot pri
OpenAI. product izbere pogon, voice pa izbere glas 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"],
)
]),
)Neposredne seje usmerja odjemalec: agent govori prvi, ker Pipecat zahteva odgovor, ko prispe kontekst, in med tišino ostane tiho, razen če dodate sporočilo ali zahtevate drug odgovor.
Možnosti
| Argument | Pomen |
|---|---|
api_key | Skrivni ključ (sk_live_...). Privzeto je THUNDERPHONE_API_KEY. |
agent_id | Zaženite shranjenega agenta. Vzajemno se izključuje z product in voice. |
product | Mehanizem za seje v vrstici: spark, bolt ali storm. |
voice | Ime glasu ThunderPhone za seje v vrstici. |
language | Namig za primarni jezik za seje v vrstici, npr. es. |
from_number, to_number | Številki, ki se zabeležita pri klicu, ko cevovod upravlja telefonsko linijo. |
live_transcripts | Pretočno pošiljajte delce prepisa klicatelja med izgovorom (dodatno zaračunano). |
greet_on_connect | Zahtevajte prvi odgovor takoj, ko je seja pripravljena. |
end_task_on_call_ended | Pošljite EndWorkerFrame, ko ThunderPhone konča klic (privzeto vklopljeno). |
Dogodki
ThunderPhone nad protokolom za delovanje v realnem času doda dogodke platforme. Storitev jih dostavi obravnavalnikom:
@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 se nastavi, ko seja postane aktivna. Uporabite ga z
GET /v1/calls/{call_id} za pridobitev posnetka,
prepisa in ocene po klicu.
Omejitve
- Zaznavanje menjave govorca poteka na strežniku in je vedno vklopljeno; menjave govorca, ki jih upravlja Pipecat
(
turn_detection=False), niso podprte. - Funkcije, registrirane v storitvi, se izvajajo samo za seje v vrstici. Shranjeni agent v ThunderPhone izvaja lastna orodja.
- Zvok je v obeh smereh 16-bitni enokanalni PCM pri 24 kHz.
- Video sličice se prezrejo.