ThunderPhone 2.0 je tu.Samostojna uporaba že od 2 ¢/min.Preberite obvestilo

Connect tools & data

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 key

Paket 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

ArgumentPomen
api_keySkrivni ključ (sk_live_...). Privzeto je THUNDERPHONE_API_KEY.
agent_idZaženite shranjenega agenta. Vzajemno se izključuje z product in voice.
productMehanizem za seje v vrstici: spark, bolt ali storm.
voiceIme glasu ThunderPhone za seje v vrstici.
languageNamig 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_transcriptsPretočno pošiljajte delce prepisa klicatelja med izgovorom (dodatno zaračunano).
greet_on_connectZahtevajte prvi odgovor takoj, ko je seja pripravljena.
end_task_on_call_endedPoš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.