השתמשו ב-ThunderPhone מתוך Pipecat
הריצו סוכן קולי של ThunderPhone כשירות דיבור-לדיבור בתוך צינור עיבוד של Pipecat, עם התעבורה והטלפוניה שלכם.
Pipecat היא מסגרת קוד פתוח לבניית סוכני קול משירותים הניתנים להרכבה. ThunderPhone משתלב בתור שירות LLM מדיבור לדיבור: Pipecat שולח את שמע המתקשר, ThunderPhone מחזיר את קול הסוכן, תמלולים וקריאות פונקציה, ושכבת התעבורה של Pipecat (Daily, LiveKit, Twilio, WebRTC או מיקרופון מקומי) מעבירה את השמע. זיהוי דיבור, מודל השפה, הקול, ניהול התורות, 47 שפות וכלי העבודה פועלים כולם ב-ThunderPhone.
שיחות המתבצעות בדרך זו מופיעות בהיסטוריית השיחות ומחויבות לפי התעריף לדקה של המוצר שלכם, כמו כל שיחה אחרת בזמן אמת. אין מנוי ואין מעורב מספר טלפון של ThunderPhone.
התקנה
pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyהחבילה עוטפת את שירות OpenAI Realtime של Pipecat, מכיוון ש-Realtime WebSocket
של ThunderPhone מדבר באותו פרוטוקול. נדרשת גרסה pipecat-ai 1.8 או חדשה יותר.
הפעלת סוכן שמור
כל מה שהסוכן עושה (הנחיה, קול, מנוע, שפות, כלים, ברכת פתיחה ובדיקות במהלך שתיקה) מוגדר ב-ThunderPhone. צינור העיבוד רק מעביר שמע.
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))סוכן שמור פותח את השיחה לפי התזמון שלו, ולכן השירות אינו מבקש מ-Pipecat
תגובה פותחת. העבירו greet_on_connect=True אם אתם רוצים תגובה כזו בכל זאת.
הגדרת הסשן בתוך הקוד
ללא agent_id, ההנחיות והכלים מגיעים מההקשר של Pipecat, באותו אופן שבו הם
מגיעים עבור OpenAI. product בוחר את המנוע ו-voice בוחר את הקול של
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"],
)
]),
)סשנים המוגדרים בתוך הקוד מונחים על ידי הלקוח: הסוכן מדבר ראשון מכיוון ש-Pipecat מבקש תגובה כשההקשר מגיע, ונשאר שקט במהלך שתיקה אלא אם תוסיפו הודעה או תבקשו תגובה נוספת.
אפשרויות
| ארגומנט | משמעות |
|---|---|
api_key | מפתח סודי (sk_live_...). ברירת המחדל היא THUNDERPHONE_API_KEY. |
agent_id | הפעילו סוכן שמור. לא ניתן להשתמש בו יחד עם product ו-voice. |
product | מנוע להפעלות מוטבעות: spark, bolt או storm. |
voice | שם קול של ThunderPhone להפעלות מוטבעות. |
language | רמז לשפה הראשית עבור הפעלות מוטבעות, לדוגמה es. |
from_number, to_number | מספרים לתיעוד בשיחה כאשר צינור העיבוד מחובר לקו טלפון. |
live_transcripts | הזרימו קטעי תמלול של המתקשר במהלך האמירה (בחיוב נוסף). |
greet_on_connect | בקשו תגובה ראשונה מיד כשההפעלה מוכנה. |
end_task_on_call_ended | דחפו EndWorkerFrame כאשר ThunderPhone מסיים את השיחה (מופעל כברירת מחדל). |
אירועים
ThunderPhone מוסיף אירועי פלטפורמה מעל פרוטוקול זמן אמת. השירות מעביר אותם למטפלים:
@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 מוגדר לאחר שההפעלה פעילה. השתמשו בו עם
GET /v1/calls/{call_id} כדי לאחזר את ההקלטה,
התמלול והציון לאחר השיחה.
מגבלות
- זיהוי תורים מתבצע בצד השרת ותמיד פעיל; תורים המונחים על ידי Pipecat
(
turn_detection=False) אינם נתמכים. - פונקציות הרשומות בשירות פועלות רק בהפעלות מוטבעות. סוכן שמור מפעיל את הכלים שלו ב-ThunderPhone.
- השמע הוא PCM מונו של 16 סיביות ב-24 קה״ץ בשני הכיוונים.
- מסגרות וידאו מתעלמות.