ThunderPhone 2.0 באוויר.בשירות עצמי, החל מ-2¢/דקה.קראו את הודעת ההשקה

Connect tools & data

השתמשו ב-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 קה״ץ בשני הכיוונים.
  • מסגרות וידאו מתעלמות.