Megérkezett a ThunderPhone 2.0.Önkiszolgáló használat már 2 cent/perctől.Olvassa el a bejelentést

Connect tools & data

A ThunderPhone használata Pipecatből

Futtasson egy ThunderPhone hangalapú AI-ügynököt beszédből beszédbe szolgáltatásként egy Pipecat-folyamatban, saját átviteli és telefonos rendszerével.

Pipecat egy nyílt forráskódú keretrendszer, amelyből összetett szolgáltatások segítségével hangalapú AI-ügynököket építhet. A ThunderPhone beszéd-beszéd LLM-szolgáltatásként csatlakozik: a Pipecat elküldi a hívó hanganyagát, a ThunderPhone pedig visszaadja az ügynök hangját, az átiratokat és a funkcióhívásokat, míg a Pipecat átviteli rétege (Daily, LiveKit, Twilio, WebRTC vagy helyi mikrofon) továbbítja a hangot. A beszédfelismerés, a nyelvi modell, a hang, a beszédváltás kezelése, 47 nyelv és az eszközök mind a ThunderPhone-on futnak.

Az így indított hívások megjelennek a híváselőzményekben, és ugyanúgy az Ön termékének percenkénti díjszabása szerint kerülnek számlázásra, mint bármely más valós idejű hívás. Nincs előfizetés, és nincs szükség ThunderPhone-telefonszámra.

Telepítés

pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

A csomag a Pipecat OpenAI Realtime szolgáltatását csomagolja, mert a ThunderPhone Realtime WebSocket ugyanazt a protokollt használja. A használatához pipecat-ai 1.8-as vagy újabb verzió szükséges.

Mentett ügynök futtatása

Az ügynök minden működési beállítása (prompt, hang, motor, nyelvek, eszközök, üdvözlés, csend közbeni bejelentkezések) a ThunderPhone-on történik. A folyamat csak a hangot továbbítja.

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))

Egy mentett ügynök a saját ütemezése szerint kezdi a hívást, ezért a szolgáltatás nem kér nyitó választ a Pipecattől. Ha mégis szeretne ilyet, adja át a greet_on_connect=True paramétert.

Munkamenet konfigurálása közvetlenül

agent_id nélkül az utasítások és az eszközök a Pipecat kontextusából származnak, ugyanúgy, mint az OpenAI esetében. A product választja ki a motort, a voice pedig a ThunderPhone hangját.

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"],
        )
    ]),
)

A közvetlenül konfigurált munkameneteket a kliens vezérli: az ügynök először beszél, mert a Pipecat választ kér, amikor megérkezik a kontextus, és csendben marad a csend idején, kivéve, ha hozzáad egy üzenetet vagy újabb választ kér.

Beállítások

ArgumentumJelentés
api_keyTitkos kulcs (sk_live_...). Alapértelmezés szerint: THUNDERPHONE_API_KEY.
agent_idMentett ügynök futtatása. Kölcsönösen kizárja a product és voice használatát.
productMotor beágyazott munkamenetekhez: spark, bolt vagy storm.
voiceThunderPhone hangnév beágyazott munkamenetekhez.
languageElsődleges nyelvi tipp beágyazott munkamenetekhez, például: es.
from_number, to_numberA hívás során rögzítendő számok, amikor a pipeline egy telefonvonal előtt működik.
live_transcriptsA hívó átiratának részleteit streameli még a megnyilatkozás befejezése előtt is (külön díj ellenében).
greet_on_connectElső válasz kérése, amint a munkamenet készen áll.
end_task_on_call_endedEndWorkerFrame küldése, amikor a ThunderPhone befejezi a hívást (alapértelmezés szerint bekapcsolva).

Események

A ThunderPhone platformeseményeket ad hozzá a valós idejű protokollhoz. A szolgáltatás ezeket kezelőknek továbbítja:

@llm.event_handler("on_call_ended")
async def on_call_ended(service, event):
    print("call ended:", event["reason"], "call id:", service.call_id)

A service.call_id értéke akkor lesz beállítva, amikor a munkamenet élővé válik. Használja a GET /v1/calls/{call_id} végponttal a felvétel, az átirat és az értékelés lekéréséhez a hívás után.

Korlátok

  • A fordulóészlelés szerveroldali, és mindig be van kapcsolva; a Pipecat által vezérelt fordulók (turn_detection=False) nem támogatottak.
  • A szolgáltatáson regisztrált függvények csak beágyazott munkameneteknél futnak. A mentett ügynök a saját eszközeit futtatja a ThunderPhone-on.
  • A hang mindkét irányban 16 bites, monó PCM, 24 kHz-es mintavételezéssel.
  • A videóképkockák figyelmen kívül maradnak.