ThunderPhone 2.0 je tu.Všetko zvládnete sami, už od 2 centov/min.Prečítať oznámenie

Connect tools & data

Používajte ThunderPhone z Pipecat

Spustite hlasového agenta ThunderPhone ako službu prevodu reči na reč v rámci pipeline Pipecat s vlastným transportom a telefóniou.

Pipecat je open-source framework na vytváranie hlasových agentov z kombinovateľných služieb. ThunderPhone funguje ako služba LLM s prevodom reči na reč: Pipecat odosiela zvuk volajúceho, ThunderPhone vracia hlas agenta, prepisy a volania funkcií a prenosová vrstva Pipecat (Daily, LiveKit, Twilio, WebRTC, lokálny mikrofón) prenáša zvuk. Rozpoznávanie reči, jazykový model, hlas, striedanie ťahov, 47 jazykov a nástroje bežia v ThunderPhone.

Hovory uskutočnené týmto spôsobom sa zobrazujú v histórii hovorov a sú účtované podľa minútovej sadzby vášho produktu rovnako ako každý iný hovor v reálnom čase. Nezahŕňa to žiadne predplatné ani telefónne číslo ThunderPhone.

Inštalácia

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

Balík obaľuje službu OpenAI Realtime v Pipecat, pretože Realtime WebSocket ThunderPhone používa rovnaký protokol. Vyžaduje pipecat-ai 1.8 alebo novší.

Spustenie uloženého agenta

Všetko, čo agent robí (výzva, hlas, engine, jazyky, nástroje, privítanie, kontroly ticha), sa konfiguruje v ThunderPhone. Pipeline iba prenáša zvuk.

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

Uložený agent začne hovor podľa vlastného harmonogramu, takže služba nepožaduje od Pipecat úvodnú odpoveď. Ak ju napriek tomu chcete, zadajte greet_on_connect=True.

Konfigurácia relácie priamo v kóde

Bez agent_id pochádzajú pokyny a nástroje z kontextu Pipecat, rovnako ako pri OpenAI. product vyberá engine a voice vyberá hlas 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"],
        )
    ]),
)

Relácie v kóde riadi klient: agent hovorí ako prvý, pretože Pipecat po doručení kontextu vyžiada odpoveď, a počas ticha zostáva potichu, pokiaľ nepridáte správu alebo nevyžiadate ďalšiu odpoveď.

Možnosti

ArgumentVýznam
api_keyTajný kľúč (sk_live_...). Predvolene THUNDERPHONE_API_KEY.
agent_idSpustenie uloženého agenta. Vzájomne sa vylučuje s product a voice.
productModul pre vložené relácie: spark, bolt alebo storm.
voiceNázov hlasu ThunderPhone pre vložené relácie.
languageHint pre primárny jazyk vložených relácií, napr. es.
from_number, to_numberČísla, ktoré sa majú zaznamenať pri hovore, keď kanál obsluhuje telefónnu linku.
live_transcriptsStreamovanie fragmentov prepisu volajúceho počas výpovede (spoplatnené navyše).
greet_on_connectVyžiadanie prvej odpovede hneď po pripravení relácie.
end_task_on_call_endedOdoslanie EndWorkerFrame, keď ThunderPhone ukončí hovor (predvolene zapnuté).

Udalosti

ThunderPhone pridáva udalosti platformy nad rámec protokolu v reálnom čase. Služba ich doručuje obslužným funkciám:

@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 sa nastaví po aktivovaní relácie. Použite ho s GET /v1/calls/{call_id} na získanie nahrávky, prepisu a hodnotenia po hovore.

Limity

  • Detekcia ťahov prebieha na serveri a je vždy zapnutá; ťahy riadené Pipecat (turn_detection=False) nie sú podporované.
  • Funkcie zaregistrované v službe sa spúšťajú iba pre vložené relácie. Uložený agent vykonáva vlastné nástroje v ThunderPhone.
  • Zvuk je v oboch smeroch 16-bitové mono PCM s frekvenciou 24 kHz.
  • Videosnímky sa ignorujú.