ThunderPhone 2.0 ir klāt.Sāciet uzreiz — no 2 centiem minūtē.Lasīt paziņojumu

Connect tools & data

Izmantojiet ThunderPhone no Pipecat

Darbiniet ThunderPhone balss aģentu kā runas-runas pakalpojumu Pipecat konveijerā, izmantojot savu transporta un telefonijas risinājumu.

Pipecat ir atvērtā pirmkoda ietvars balss aģentu veidošanai no kombinējamiem pakalpojumiem. ThunderPhone tiek integrēts kā runas-runas LLM pakalpojums: Pipecat nosūta zvanītāja audio, ThunderPhone atgriež aģenta balsi, transkriptus un funkciju izsaukumus, savukārt Pipecat transports (Daily, LiveKit, Twilio, WebRTC, lokāls mikrofons) pārraida audio. Runas atpazīšana, valodas modelis, balss, sarunas kārtu pārvaldība, 47 valodas un rīki darbojas ThunderPhone.

Šādi veiktie zvani tiek rādīti zvanu vēsturē un par tiem tiek piemērota jūsu produkta maksa par minūti, tāpat kā par jebkuru citu reāllaika zvanu. Nav ne abonementa, ne ThunderPhone tālruņa numura.

Instalēšana

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

Pakotne aptver Pipecat OpenAI Realtime pakalpojumu, jo ThunderPhone Realtime WebSocket izmanto to pašu protokolu. Tai ir nepieciešams pipecat-ai 1.8 vai jaunāks.

Saglabāta balss aģenta palaišana

Viss, ko balss aģents dara (uzvedne, balss, dzinējs, valodas, rīki, sveiciens, klusuma pārbaudes), tiek konfigurēts ThunderPhone. Konveijers tikai pārvieto audio.

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

Saglabāts balss aģents sāk zvanu pēc sava grafika, tāpēc pakalpojums nepieprasa sākuma atbildi no Pipecat. Norādiet greet_on_connect=True, ja tomēr to vēlaties.

Konfigurēt sesiju tieši kodā

Bez agent_id norādījumi un rīki tiek ņemti no Pipecat konteksta, tāpat kā OpenAI gadījumā. product izvēlas dzinēju, bet voice izvēlas ThunderPhone balsi.

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

Tieši kodā konfigurētās sesijas vada klients: balss aģents runā pirmais, jo Pipecat pieprasa atbildi, kad tiek saņemts konteksts, un klusuma laikā paliek kluss, ja vien nepievienojat ziņojumu vai nepieprasāt citu atbildi.

Opcijas

ArgumentsNozīme
api_keySlepenā atslēga (sk_live_...). Pēc noklusējuma tiek izmantota THUNDERPHONE_API_KEY.
agent_idPalaidiet saglabātu balss aģentu. Savstarpēji izslēdzošs ar product un voice.
productDzinējs iekļautajām sesijām: spark, bolt vai storm.
voiceThunderPhone balss nosaukums iekļautajām sesijām.
languagePrimārās valodas norāde iekļautajām sesijām, piemēram, es.
from_number, to_numberNumuri, kas jāreģistrē zvanā, kad konveijers apkalpo tālruņa līniju.
live_transcriptsStraumējiet zvanītāja transkripcijas fragmentus izteikuma laikā (par papildu maksu).
greet_on_connectPieprasiet pirmo atbildi, tiklīdz sesija ir gatava.
end_task_on_call_endedNosūtiet EndWorkerFrame, kad ThunderPhone beidz zvanu (ieslēgts pēc noklusējuma).

Notikumi

ThunderPhone reāllaika protokolam pievieno platformas notikumus. Pakalpojums tos piegādā apstrādātājiem:

@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 tiek iestatīts, kad sesija ir aktīva. Izmantojiet to ar GET /v1/calls/{call_id}, lai pēc zvana iegūtu ierakstu, transkripciju un novērtējumu.

Ierobežojumi

  • Dialoga gājienu noteikšana notiek servera pusē un vienmēr ir ieslēgta; Pipecat vadīti dialoga gājieni (turn_detection=False) netiek atbalstīti.
  • Pakalpojumā reģistrētās funkcijas darbojas tikai iekļautajām sesijām. Saglabāts balss aģents savus rīkus izpilda ThunderPhone.
  • Audio abos virzienos ir 16 bitu mono PCM ar 24 kHz.
  • Video kadri tiek ignorēti.