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 keyBalí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
| Argument | Význam |
|---|---|
api_key | Tajný kľúč (sk_live_...). Predvolene THUNDERPHONE_API_KEY. |
agent_id | Spustenie uloženého agenta. Vzájomne sa vylučuje s product a voice. |
product | Modul pre vložené relácie: spark, bolt alebo storm. |
voice | Názov hlasu ThunderPhone pre vložené relácie. |
language | Hint 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_transcripts | Streamovanie fragmentov prepisu volajúceho počas výpovede (spoplatnené navyše). |
greet_on_connect | Vyžiadanie prvej odpovede hneď po pripravení relácie. |
end_task_on_call_ended | Odoslanie 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ú.