فاز 14 · درس 22

ساخت ایجنت صوتی با Pipecat و LiveKit

نوع
مفهومی
زمان
حدود 60 دقیقه
زبان‌ها
Python (stdlib)
پیش‌نیاز
فاز 14 · بخش 01 (حلقه‌ی ایجنت)، فاز 14 · بخش 12 (الگوهای جریان کاری)
یک موج صوتی درخشان که از میان یک زنجیره مکعب‌های به هم پیوسته عبور کرده و فریم‌های داده را منتقل می‌کند
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم کلیدی
  4. فریم‌ورک Pipecat (pipecat-ai/pipecat)
  5. ابزار LiveKit Agents (livekit/agents)
  6. پلتفرم‌های تجاری
  7. جاهایی که این الگو به مشکل می‌خورد
  8. تاخیرهای متداول در سال 2026
  9. پیاده‌سازی
  10. کاربردها
  11. تحویل پروژه
  12. تمرین‌ها
  13. اصطلاحات کلیدی
  14. برای مطالعه‌ی بیشتر

ساخت ایجنت صوتی تعاملی صرفاً الصاق یک تبدیل متن به گفتار (TTS) به خروجی یک مدل متنی نیست؛ بلکه سیستمی بلادرنگ است که در آن تاخیر سرتاسری باید زیر 600 میلی‌ثانیه نگه داشته شود و سیستم بتواند به محض ورود ناگهانی کاربر به کلام (barge-in)، پخش صدا را لغو کند.

فریم‌ورک‌هایی مانند Pipecat با ارائه‌ی پایپ‌لاین فریم‌محور دوطرفه و LiveKit Agents با بهره‌گیری از بستر کم‌تاخیر WebRTC، الگوهای استاندارد پیاده‌سازی این دستیارها را در اختیارتان می‌گذارند تا چالش‌های تبدیل گفتار به متن (STT)، تشخیص پایان صحبت و جابه‌جایی جریان صوت را مدیریت کنید.

اگر برای بخش‌های هوش مصنوعی این پایپ‌لاین قصد استفاده از مدل‌های ابری خارجی نظیر OpenAI Realtime را دارید، با توجه به محدودیت‌های پرداخت ارزی و محدودیت دسترسی بر اساس IP، استفاده از گیت‌وی‌های واسط سازگار با API یا ارائه‌دهندگان جایگزین یک رویکرد رایج است. همچنین امکان اجرای مراحل به کمک مدل‌های کوچک‌تر یا فریم‌ورک‌های سبک محلی نیز وجود دارد.

ایجنت‌های صوتی در سال 2026 به یک دسته‌بندی پروداکشن درجه‌یک تبدیل شده‌اند. Pipecat یک پایپ‌لاین فریم‌محور پایتونی در اختیارتان می‌گذارد (VAD → STT → LLM → TTS → transport). پلتفرم LiveKit Agents مدل‌های هوش مصنوعی را روی بستر WebRTC به کاربران متصل می‌کند. هدف‌گذاری تاخیر پروداکشن برای استک‌های پیشرفته، 450 تا 600 میلی‌ثانیه به‌صورت سرتاسری (end-to-end) است.

اهداف یادگیری

  • پایپ‌لاین فریم‌محور Pipecat را توصیف کنید: DOWNSTREAM (مبدا→مقصد) و UPSTREAM (کنترل).
  • مراحل استاندارد پایپ‌لاین صوتی و بسترهای انتقالی را که Pipecat پشتیبانی می‌کند، نام ببرید.
  • دو کلاس ایجنت صوتی LiveKit Agents یعنی MultimodalAgent و VoicePipelineAgent و کاربرد هرکدام را توضیح دهید.
  • انتظارات تاخیر پروداکشن در سال 2026 و نقش تعیین‌کننده‌ی آن‌ها در انتخاب معماری را خلاصه کنید.

صورت مسئله

ایجنت صوتی صرفاً یک حلقه‌ی متنی نیست که یک TTS به آن وصله شده باشد. سقف تاخیر (Latency budget) بسیار سخت‌گیرانه است (حدود 600 میلی‌ثانیه)، ارسال تکه‌ای صدا (Partial audio) حالت پیش‌فرض است، تشخیص نوبت گفت‌وگو (Turn detection) خودش یک مدل جداگانه می‌طلبد و بسترهای انتقال نیز از SIP تلفنی تا WebRTC متغیرند. در نتیجه یا باید یک پایپ‌لاین فریم‌محور بسازید (Pipecat) یا به یک پلتفرم تکیه کنید (LiveKit).

مفاهیم کلیدی

فریم‌ورک Pipecat (pipecat-ai/pipecat)

  • فریم‌ورک پایپ‌لاین فریم‌محور در پایتون.
  • زنجیره‌ی Frame ← FrameProcessor.
  • دو جهت جریان داده:
    • DOWNSTREAM — مبدا به مقصد (ورود صدا، خروج صدای TTS).
    • UPSTREAM — بازخورد و کنترل (لغو، متریک‌ها، ورود ناگهانی به کلام یا barge-in).
  • کلاس PipelineTask چرخه‌ی حیات را با رویدادها (on_pipeline_started، on_pipeline_finished و on_idle_timeout) و آبزرورها برای متریک‌ها/ردگیری محاسبات (tracing)/پروتکل RTVI مدیریت می‌کند.

یک پایپ‌لاین معمولی:

VAD (Silero) → STT → LLM (context alternates user/assistant) → TTS → transport

بسترهای انتقال: Daily، LiveKit، SmallWebRTCTransport، FastAPI WebSocket و WhatsApp.

افزونه‌ی Pipecat Flows مکالمات ساختاریافته (ماشین وضعیت) را اضافه می‌کند. همچنین Pipecat Cloud محیط اجرای (Runtime) مدیریت‌شده‌ی آن است.

ابزار LiveKit Agents (livekit/agents)

  • اتصال مدل‌های هوش مصنوعی به کاربران روی بستر WebRTC.
  • مفاهیم کلیدی: Agent، AgentSession، entrypoint و AgentServer.
  • دو کلاس ایجنت صوتی:
    • MultimodalAgent — صدای مستقیم از طریق OpenAI Realtime یا معادل آن.
    • VoicePipelineAgent — ساختار آبشاری STT → LLM → TTS؛ امکان کنترل در سطح متن را فراهم می‌کند.
  • تشخیص معنایی نوبت گفت‌وگو با استفاده از یک مدل ترنسفورمر.
  • یکپارچگی بومی با MCP.
  • پشتیبانی از تلفنی از طریق SIP.
  • دسترسی به بیش از 50 مدل بدون نیاز به کلید API از طریق LiveKit Inference؛ و بیش از 200 مدل دیگر با پلاگین‌ها.

پلتفرم‌های تجاری

سرویس‌های Vapi (حدود 450 تا 600 میلی‌ثانیه روی یک استک بهینه‌شده‌ی پیشرفته) و Retell (حدود 600 میلی‌ثانیه سرتاسری در 180 تماس آزمایشی) روی همین پایه‌ها بنا شده‌اند. وقتی یک استک صوتی مدیریت‌شده می‌خواهید و قصد ندارید یک تیم اختصاصی WebRTC راه بیندازید، به سراغ یک پلتفرم بروید.

جاهایی که این الگو به مشکل می‌خورد

  • مدیریت نشدن ورود ناگهانی به کلام (Barge-in): کاربر کلام را قطع می‌کند؛ ایجنت به حرف زدن ادامه می‌دهد. رفع این مشکل نیازمند فریم‌های لغو UPSTREAM در Pipecat و سازوکار معادل آن در LiveKit است.
  • نادیده‌گرفتن ضریب اطمینان STT: متن‌های خروجی STT با ضریب اطمینان پایین، طوری به LLM داده می‌شوند که انگار حقیقت مطلق‌اند. باید خروجی را با آستانه (Threshold) کنترل کنید یا از کاربر تایید بخواهید.
  • قطع ناقص جمله در TTS: وقتی پایپ‌لاین وسط جمله لغو می‌شود، TTS باید باخبر شود یا پخش صدا را فوراً قطع کند.
  • نادیده‌گرفتن سقف تاخیر: هر بخش از این زنجیره 50 تا 200 میلی‌ثانیه به تاخیر اضافه می‌کند. پیش از استقرار در پروداکشن، مجموع تاخیرهای زنجیره را حساب کنید.

تاخیرهای متداول در سال 2026

  • تشخیص فعالیت صوتی (VAD): حدود 20 تا 60 میلی‌ثانیه
  • تبدیل گفتار به متن لحظه‌ای (STT partial): حدود 100 تا 250 میلی‌ثانیه
  • اولین توکن LLM: حدود 150 تا 400 میلی‌ثانیه
  • اولین بخش صدای TTS: حدود 100 تا 200 میلی‌ثانیه
  • رفت و برگشت بستر انتقال (Transport RTT): حدود 30 تا 80 میلی‌ثانیه

تاخیر سرتاسری 450 تا 600 میلی‌ثانیه‌ای عملکردی ممتاز است. بین 800 تا 1200 میلی‌ثانیه رایج است. هر مقداری بیشتر از 1500 میلی‌ثانیه حس یک سیستم خراب را به کاربر می‌دهد.

پایپ‌لاین صوتیتبدیل فریم‌های صوتی به گفتار
VOICE PIPELINEA voice agent is a frame-based pipeline, not text with TTS bolted on: voice activity detection, speech-to-text, the LLM, then text-to-speech, all under a brutal ~600ms budget. Partial audio is the default and barge-in cancellation flows upstream, so every stage must stream rather than wait for a full turn.VADSTTLLMTTS"hello"سقف تاخیر سرتاسری حدود 600 میلی‌ثانیه
یک ایجنت صوتی یک پایپ‌لاین مبتنی بر فریم است، نه متنی که صرفاً یک TTS به آن چسبیده باشد: تشخیص فعالیت صوتی، گفتار به متن، مدل زبانی بزرگ (LLM)، و سپس متن به گفتار، همگی زیر یک سقف تاخیر سخت‌گیرانه‌ی حدود 600 میلی‌ثانیه‌ای. ارسال صوت ناقص حالت پیش‌فرض است و لغو ناشی از ورود ناگهانی به کلام به سمت بالا دست جریان می‌یابد، بنابراین هر مرحله باید به جای منتظر ماندن برای یک نوبت گفت‌وگوی کامل، داده‌ها را استریم کند.

پیاده‌سازی

کد code/main.py یک پایپ‌لاین آموزشی و فریم‌محور است شامل:

  • انواع Frame (صدا، رونوشت، متن، صدای tts و سیگنال کنترلی).
  • رابط Processor همراه با متد process(frame).
  • یک پایپ‌لاین پنج‌مرحله‌ای (VAD → STT → LLM → TTS → transport) در قالب پردازنده‌های اسکریپت‌شده.
  • یک فریم لغو UPSTREAM برای نشان دادن نحوه‌ی عملکرد barge-in.

اجرایش کنید:

python3 code/main.py

ردگیری محاسبات (Trace)، جریان عادی داده و سپس یک لغو از طریق barge-in را نشان می‌دهد که چطور پخش صدای TTS را در میانه‌ی کلام قطع می‌کند.

کاربردها

  • Pipecat برای کنترل کامل — پردازنده‌های سفارشی، تمرکز روی پایتون و تعویض آسان سرویس‌دهنده‌ها.
  • LiveKit Agents برای استقرارهای متمرکز بر WebRTC و سیستم‌های تلفنی.
  • Vapi / Retell برای ایجنت‌های صوتی مدیریت‌شده، بدون نیاز به تیم WebRTC.
  • OpenAI Realtime / Gemini Live برای ورودی و خروجی مستقیم صدا (MultimodalAgent).

تحویل پروژه

فایل outputs/skill-voice-pipeline.md قالبی آماده از یک پایپ‌لاین صوتی به سبک Pipecat شامل VAD + STT + LLM + TTS + transport همراه با مدیریت barge-in ارائه می‌دهد.

تمرین‌ها

  1. یک آبزرور متریک به پایپ‌لاین آزمایشی اضافه کنید: تعداد فریم‌ها در ثانیه را به تفکیک مراحل بشمارید. تاخیر بیشتر در کدام بخش انباشته می‌شود؟
  2. مرحله‌ی STT را به بررسی آستانه‌ی اطمینان مجهز کنید: اگر ضریب اطمینان کمتر از آستانه بود، پیام «می‌شود دوباره تکرار کنید؟» فرستاده شود.
  3. تشخیص معنایی نوبت گفت‌وگو را اضافه کنید؛ یک قانون ساده: اگر رونوشت با علامت «؟» تمام شد، نوبت گفت‌وگو به پایان رسیده است.
  4. مستندات بسترهای انتقال Pipecat را بخوانید. بستر انتقال کتابخانه‌ی استاندارد را با کانفیگ ماکت SmallWebRTCTransport تعویض کنید.
  5. تاخیر مدل OpenAI Realtime را در مقایسه با زنجیره‌ی آبشاری STT+LLM+TTS روی یک پرسش یکسان اندازه بگیرید. داشتن کنترل در سطح متن، چقدر تاخیر اضافی به سیستم تحمیل می‌کند؟

اصطلاحات کلیدی

اصطلاح در گفت‌وگوها چه می‌گویند معنای دقیق فنی
فریم (Frame) «رویداد» (Event) واحد داده‌ی تایپ‌شده در پایپ‌لاین (صدا، رونوشت، متن، کنترل)
پردازنده (Processor) «مرحله‌ی پایپ‌لاین» هندلری با متد process(frame)
DOWNSTREAM «جریان رفت» مسیر مبدا به مقصد: ورود صدا، خروج کلام
UPSTREAM «جریان بازخورد» سیگنال‌های کنترلی: لغو، متریک‌ها، ورود ناگهانی به کلام (Barge-in)
تشخیص فعالیت صوتی (VAD) «تشخیص صدا» تشخیص این‌که کاربر چه زمانی مشغول صحبت است
تشخیص معنایی نوبت گفت‌وگو (Semantic turn detection) «پایان هوشمندانه‌ی کلام» تصمیم‌گیری مبتنی بر مدل درباره‌ی پایان صحبت کاربر
MultimodalAgent «ایجنت صوتی مستقیم» ورودی مستقیم صدا، خروجی صدا؛ بدون متن واسط
VoicePipelineAgent «ایجنت آبشاری» زنجیره‌ی STT + LLM + TTS؛ همراه با کنترل در سطح متن

برای مطالعه‌ی بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسیک پایپ‌لاین Pipecat از کدام دو جهت جریان داده استفاده می‌کند؟
  2. پیش از درسپایپ‌لاین صوتی استاندارد و مرجع در Pipecat کدام است؟
  3. حین درسلایبرری LiveKit Agents چه کلاس‌هایی از ایجنت‌های صوتی را ارائه می‌دهد؟
  4. حین درسورود ناگهانی به کلام (Barge-in) چیست و چگونه مدیریت می‌شود؟
  5. حین درسدرس چه مقدار تاخیر سرتاسری را به عنوان سطح عالی (premium) توصیف می‌کند؟
  6. پس از درسنادیده گرفتن ضریب اطمینان (confidence) در STT چه مشکلی ایجاد می‌کند؟
  7. پس از درسچرا این درس توصیه می‌کند تاخیر تک‌تک اجزا را قبل از انتشار نهایی جمع بزنید؟

سؤالات متداول

تفاوت اصلی MultimodalAgent و VoicePipelineAgent در LiveKit چیست؟

در MultimodalAgent تبادل صدا مستقیماً از طریق مدل‌هایی مانند OpenAI Realtime بدون متن واسط انجام می‌شود، در حالی که VoicePipelineAgent از معماری آبشاری STT → LLM → TTS استفاده می‌کند و امکان دسترسی و نظارت بر لایه‌ی متن را فراهم می‌سازد.

چرا پدیده قطع کلام یا barge-in در ایجنت‌های صوتی حیاتی است؟

زیرا کاربر ممکن است حین صحبت ربات کلام او را قطع کند؛ بدون ارسال فریم کنترلی بازگشتی (UPSTREAM) برای توقف فوری TTS، ربات بدون توجه به حرف کاربر به صحبت ادامه می‌دهد و مکالمه غیرطبیعی می‌شود.

سقف مجاز تاخیر (Latency budget) سرتاسری برای یک ایجنت صوتی باکیفیت چقدر است؟

برای داشتن یک تجربه‌ی روان و بدون وقفه، تاخیر سرتاسری بین 450 تا 600 میلی‌ثانیه مطلوب است، تاخیر 800 تا 1200 میلی‌ثانیه معمول به شمار می‌رود و تاخیر بالای 1500 میلی‌ثانیه برای کاربر آزاردهنده است.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.