ساخت هوش مصنوعی سخنگو با پایتون – از تشخیص صدا تا پاسخ صوتی

۱۰
۱۴۰۵/۰۴/۱۳
۲۱ دقیقه
PDF
آموزش متنی جامع
امکان دانلود نسخه PDF

هوش مصنوعی سخنگو با پایتون باید چند سیستم مجزا شامل مدل «تبدیل گفتار به متن» (Speech-To-Text)، «مدل زبانی بزرگ» (Large Language Model | LLM) و مدل «تبدیل متن به گفتار» (Text-To-Speech) را در قالب «پایپ‌لاین زنده» (Streaming Pipeline) به یکدیگر متصل کند. برای ساخت هوش مصنوعی سخنگو با پایتون در این مطلب از فریم‌ورک «LiveKit» نیز استفاده خواهیم کرد. این فریم‌ورک، زیرساخت اصلی و لایه‌ای را برای انتقال صوت به صورت «بلادرنگ» (Real-Time)، فراهم می‌کند. هوش مصنوعی سخنگو سیستمی است به صورت صوتی با کاربر صحبت می‌کند. یعنی ابتدا عبارتی را به شکل صوتی بیان می‌کنیم. سیستم با کمک می‌کروفون صدا را دریافت می‌کند، معنی عبارت را درک کرده و پاسخ خود را به شکل صوت برمی‌گرداند.

آنچه در این مطلب می‌آموزید:
  • با معماری پایپ‌لاین STT-LLM-TTS در عامل‌های صوتی آشنا می‌شوید.
  • نحوه ساخت هوش مصنوعی سخنگو با LiveKit را در پایتون یاد می‌گیرید.
  • روش اتصال STT و LLM و TTS را بررسی می‌کنید.
  • با تکنیک‌های تست و عیب‌یابی هوش مصنوعی سخنگو در پایتون آشنا می‌شوید.
  • نحوه استقرار عامل صوتی روی LiveKit Cloud را می‌آموزید.
  • اهمیت و روش کاهش تاخیر در سیستم‌های هوش مصنوعی سخنگو را بررسی می‌کنید.
ساخت هوش مصنوعی سخنگو با پایتون – از تشخیص صدا تا پاسخ صوتیساخت هوش مصنوعی سخنگو با پایتون – از تشخیص صدا تا پاسخ صوتی
فهرست مطالب این نوشته
997696

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

مراحل ساخت هوش مصنوعی سخنگو با پایتون چیست؟

در این مطلب، مراحل زیر را یک به یک بررسی می‌کنیم.

  1. راه‌اندازی
  2. پیاده‌سازی
  3. تست محلی
  4. استقرار هوش مصنوعی سخنگو

در پایان، هوش مصنوعی سخنگویی در اختیار خواهیم داشت که به صحبت‌های کاربران گوش می‌دهد، سوال‌های آن‌ها را درک می‌کند و به صورت بلادرنگ با صدایی طبیعی پاسخ می‌دهد. هدف از این مطلب ساخت عامل صوتی است که با استفاده از تکنولوژی‌های تبدیل گفتار به متن، مدل زبانی بزرگ و تبدیل متن به گفتار در زمان واقعی به سوال‌ها پاسخ بدهد. برای اجرای این پروژه لازم است آشنایی در حد مقدماتی با پایتون داشته باشید. اما نیازی به داشتن تجربه قبلی در «پردازش صوت» (Audio Processing) یا «WebRTC» ندارید.

مواردی که یاد می‌گیرید

در فهرست زیر به شکل خلاصه مواردی را نوشته‌ایم که بعد از مطالعه این مطلب خواهید آموخت.

  • نحوه کار پایپ‌لاین عامل صوتی (یعنی از STT به LLM و سپس به TTS) را می‌آموزید.
  • روش اتصال هر بخش برای ایجاد مکالمه بلادرنگ را یاد می‌گیرید.
  • با نحوه تست، اشکال‌زدایی و استقرار هوش مصنوعی سخنگو آشنا می‌شوید.

پایپ‌لاین STT-LLM-TTS چیست؟

بیشتر عامل‌های صوتی از پایپ‌لاین «STT-LLM-TTS» استفاده می‌کنند. این پایپ‌لاین از سه بخش‌ اصلی تشکیل شده است.

  • STT: فناوری «تبدیل گفتار به متن» (Speech-To-Text | STT)، صدای کاربر را به متن تبدیل می‌کند.
  • LLM: مدل زبانی بزرگ، وظیفه تولید کردن پاسخ هوشمند را بر عهده دارد.
  • TTS: «تبدیل متن به گفتار» (Text-To-Speech | TTS)، پاسخ تولید شده را دوباره به صدا تبدیل می‌کند.
دیاگرامی از نحوه کار پایپ‌لاین STT-LLM-TTS
دیاگرامی از نحوه کار پایپ‌لاین STT-LLM-TTS

این روش ماژولار، انعطاف‌پذیری بسیار بالایی در اختیار برنامه نویسان قرار می‌دهد. با این تکنیک، می‌توانید مسئول اجرای هر بخش را تغییر دهید. هر قسمت را به صورت جداگانه و دقیق تنظیم کرده و خطاهای هر مرحله را به شکل مستقل بررسی و اشکال‌زدایی کنید.

پایپ‌لاین STT-LLM-TTS در منابع مختلف با نام‌های گوناگونی شناخته می‌شود. ممکن است آن را با عنوان‌های زیر نیز ببینید.

  • «پایپ‌لاین آبشاری» (Cascaded Pipeline): این نام بر ساختار زنجیره‌ای و مرحله‌به‌مرحله اجزای سیستم تاکید دارد.
  • «پایپ‌لاین صوتی» (Voice Pipeline): اصطلاحی عمومی است که در بخش‌های مختلف صنعت استفاده می‌شود.
  • «پایپ‌لاین هوش مصنوعی مکالمه‌ای» (Conversational AI Pipeline): اصطلاح رایجی که در محیط‌های سازمانی و مرکزهای تماس به کار برده می‌شود.
  • پایپ‌لاین «ASR → LLM → TTS»: در این نام، به‌جای STT از ASR یا «تشخیص خودکار گفتار» (Automatic Speech Recognition) استفاده شده است.
  • پایپ‌لاین «Listen-Think-Speak»: نامی ساده‌تر و قابل‌درک‌تر برای انسان‌هاست.
  • «پایپ‌لاین صوتی نوبتی» (Turn-based Voice Pipeline): این نام بر مدل نوبت‌گیری در مکالمه تاکید می‌کند.
  • «معماری کلاسیک عامل صوتی» (Classic Voice Agent Architecture): از این نام برای تفاوت گذاشتن میان این روش و مدل‌های جدید گفتار به گفتار استفاده می‌شود.

همه این نام‌ها به یک معماری اصلی اشاره دارند:

  1. یعنی خروجی صوت به متن تبدیل می‌شود.
  2. سپس متن را به مدل زبانی بزرگ می‌دهیم.
  3. مدل زبانی بزرگ پاسخی به صورت متنی تولید می‌کند.
  4. پاسخ تولید شده هم به خروجی از جنس صوت تبدیل می‌شود.

تا به اینجای مطلب هم با مراحل ساخت هوش مصنوعی سخنگو با پایتون به شکل کلی آشنا شده‌اید، هم درک مناسبی از پایپ‌لاین STT-LLM-TTS و عملکرد بخش‌های مهم آن بدست آورده‌اید. در ادامه بعد از بررسی مدل‌های مختلف قابل استفاده در پایپ‌لاین STT-LLM-TTS، روش ساخت هوش مصنوعی سخنگو را مرحله به مرحله بررسی می‌کنیم. در صورت تمایل به مطالعه مطالبی مانند این مورد، پیشنهاد می‌کنیم که حتما اپلیکیشن مجله فرادرس را بر روی دستگاه‌های همراه خود نصب کنید.

برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.

مقایسه مدل‌ها برای ساخت هوش مصنوعی سخنگو با پایتون

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

البته خودمان هم می‌توانیم به صورت مستقیم سیستم‌های مربوط به تبدیل متن به گفتار و بالعکس را پیاده‌سازی کنیم. برای مثال به منظور یادگیری عملیات TTS می‌توانید فیلم آموزش رایگان تبدیل متن به گفتار در پایتون Python با کتابخانه pyttsx3 + گواهینامه را در فرادرس مشاهده کنید. به منظور کمک به مخاطبان مجله، لینک دسترسی مستقیم به این فیلم را در پایین نیز قرار داده‌ایم.

در ادامه برای هر کدام از قسمت‌های معماری STT-LLM-TTS، چند مدل مختلف را معرفی و بررسی می‌کنیم.

معماری‌های مناسب برای عملیات STT

در جدول پایین، چند مورد از مدل‌ها را برای اجرای عملیات STT مقایسه کرده‌ایم.

ارائه‌دهندهمدلسرعتکیفیت - هزینه
DeepgramNova-3حدود 250msعالی - بالاترین
DeepgramNova-2حدود 250msخیلی خوب - متوسط
AssemblyAIUniversal-Streamingحدود 300msخیلی خوب - پایین
CartesiaInk Whisperحدود 80msخوب - پایین

معماری‌های مناسب برای عملیات LLM

در جدول پایین، چند مورد LLM را برای اجرای عملیات «بررسی پیام کاربر و تولید پاسخ مرتبط» مقایسه کرده‌ایم.

ارائه‌دهندهمدلسرعتکیفیت - هزینه
OpenAIGPT-4oحدود 200msعالی - بالاترین
OpenAIGPT-4.1 miniحدود 200msخیلی خوب - پایین
گوگلGemini 2.5 Flashحدود 350msخیلی خوب - پایین
دیپسیکDeepSeek V3حدود 300msخیلی خوب - پایین

معماری‌های مناسب برای عملیات TTS

در جدول پایین، چند مورد از مدل‌ها را برای اجرای عملیات TTS مقایسه کرده‌ایم.

ارائه‌دهندهمدلسرعتکیفیت - هزینه
CartesiaSonic 3حدود 90msعالی - متوسط
ElevenLabsFlash v2.5حدود 150msعالی - بالاترین
DeepgramAura-2حدود 100msخوب - متوسط
InworldTTS 1.5حدود 200msخوب - پایین‌ترین

کار با هوش مصنوعی در پایتون را توسط فرادرس بیاموزید

از زبان‌های برنامه نویسی مختلفی می‌توانیم برای طراحی و ساخت مدل‌های هوش مصنوعی و استفاده از آن‌ها کمک بگیریم. در میان همه گزینه‌ها پایتون به عنوان مشهور‌ترین و قوی‌ترین مورد برای فعالیت در این حوزه شناخته می‌‌شود. به طور خاص برای اینکه تمام پروژه‌های این حوزه را می‌توان با کمک پایتون پیاده‌سازی کرد. وجود کتابخانه‌های قدرتمند به پایتون کمک می‌کند از پس اجرای هر پروژه‌ای در هوش مصنوعی بر بیاید. بنابراین توسعه‌دهندگان پایتون با کسب مهارت در این زمینه می‌توانند فرصت‌های شغلی، تحصیلی و حتی مهاجرتی خوبی بدست بیاورند.

مجموعه آموزش هوش مصنوعی با پایتون – مقدماتی تا پیشرفته
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش هوش مصنوعی با پایتون از دوره‌های مقدماتی تا پیشرفته هدایت شوید.

فرادرس، مجموعه‌ای از فیلم‌های آموزشی را درباره هوش مصنوعی، تولید و منتشر کرده است. در این مجموعه فیلم‌ها از مطالب پایه و ابتدایی تا تکنولوژی‌های پیشرفته و تخصصی هوش مصنوعی آموزش داده می‌شوند. از تحلیل داده، علم داده، بینایی ماشین، شبکه‌های عصبی، یادگیری ماشین و غیره می‌توان به عنوان چند مورد از آموزش‌های موجود در این مجموعه، اشاره کرد. با بررسی این فیلم‌ها مهارت‌های اولیه و کاربردی بسیار خوبی در حوزه هوش مصنوعی بدست می‌آورید.

در فهرست پایین، چند مورد از فیلم‌های این مجموعه آموزشی را معرفی کرده‌ایم. در صورت تمایل به مشاهده سایر فیلم‌های این مجموعه بر روی تصویر بالا کلیک کنید.

در بخش بعد مراحل ساخت هوش مصنوعی سخنگو با پایتون را با راه‌اندازی فایل محیط کار ادامه می‌دهیم.

راه‌اندازی محیط توسعه

اکنون زمان آماده‌سازی محیط توسعه است. قبل از اجرای هر پروژه‌ای ابتدا باید محیط توسعه آن را به شکل درست و مناسب فراهم کنیم. به منظور انجام بهترین روش برای این کار به غیر از نصب پایتون و استفاده از محیط برنامه نویسی مناسب پایتون، این است که از محیط مجازی هم استفاده کنیم. مراحل اولیه اجرای تمام پروژه‌های پایتون به همدیگر شباهت دارند.

  • نصب پایتون
  • راه‌اندازی محیط مناسب برای برنامه نویسی
  • ساخت دایرکتوری مخصوص پروژه
  • فعال کردن و راه‌اندازی محیط مجازی پایتون

در ادامه با فرض انجام درست مراحل اولیه، بقیه کارها را به صورت جداگانه بررسی می‌کنیم.

نصب عامل‌های LiveKit

همین‌طور که اشاره کردیم برای طراحی این پروژه خاص باید از ابزارهای مناسب استفاده کنیم. یکی از این ابزارها «عامل‌های LiveKit» یا «LiveKit Agents» هستند. با کمک کدهای زیر می‌توانید این موارد را در کامپیوتر نصب کنید.

  • اول خط بالا را در «CMD» نوشته و دکمه Enter را فشار دهید.
  • سپس خط پایین را کپی کرده و در CMD پیست کنید و دکمه Enter را فشار دهید.
uv init --bare
uv add "livekit-agents[silero,turn-detector]~=1.4" python-dotenv

نکته ۱: توجه کنید که دستور uv  ابزار مدرنی برای مدیریت پروژه‌های پایتون است. تقریبا شبیه ترکیب «pip» و «venv» است. اگر با زدن این دستور در خط فرمان به خطایی برخوردید که به دلیل نصب نبودن uv  اعلام شد، با کمک کد زیر می‌توانید این دستور را در ویندوز نصب کنید.

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

نکته ۲: هنگام استفاده از رابط LiveKit، نیازی به نصب بسته‌های افزونه جداگانه برای STT، مدل زبانی بزرگ یا TTS ندارید. LiveKit این درخواست‌ها را به صورت خودکار مدیریت و هدایت می‌کند. تنها به «Silero» برای «تشخیص فعالیت صوتی» (Voice Activity Detector | VAD) و «Turn-Detector» برای مدل چندزبانه تشخیص نوبت مکالمه نیاز خواهید داشت.

دریافت کلیدهای API

در صورت استفاده از رابط LiveKit، فقط لازم است در وب‌سایت رسمی این ابزار (+)، حساب کاربری باز کنید. بعد از وارد شدن به داشبورد حساب خود در صفحه اصلی داشبورد باید بر روی گزینه «API keys» کلیک کنید.

دریافت کلید API از کنسول LiveKit

در صفحه باز شده، کلید API همراه با نام مالک و تاریخ ساخت این کلید نمایش داده شده‌‌اند. در ادامه این کلید را لغو کرده و کلید جدیدی خواهیم ساخت.

نمایش اولین کلید ساخته شده توسط خود سرویس LiveKit

رابط LiveKit دسترسی به مدل‌های STT، مدل زبانی بزرگ و TTS را از طریق کلید API یکسان فراهم می‌کند. بنابراین، نیازی به ساخت حساب‌های جداگانه در سرویس‌هایی مانند «Deepgram» و «OpenAI» یا «Cartesia» نخواهید داشت. این ابزار به صورت خودکار، مدیریت اطلاعات احراز هویت و فرایند پرداخت مربوط به همه ارائه‌دهنده‌ها را برعهده می‌گیرد.

متغیرهای محیطی

در مرحله بعد باید متغیر‌های محیطی پروژه را تنظیم کنیم. برای انجام این کار ابتدا فایلی در داخل محیط توسعه پروژه با نام .env.local می‌سازیم. در داخل این فایل، متغیر‌های محیطی باید با الگوی زیر ثبت شوند.

LIVEKIT_URL=wss://your-project.livekit.cloud

LIVEKIT_API_KEY=your-api-key

LIVEKIT_API_SECRET=your-api-secret

قبل از هر کاری باید مقادیر مناسب این متغیر‌ها را پیدا کنیم. برای رسیدن به این هدف، مسیر زیر را دنبال کنید.

  • گام اول: بعد از رفتن به صفحه API keys در داشبورد حساب کاربری LiveKit، کلید آبی رنگی با عنوان «Create Key» در بالا سمت راست تصویر وجود دارد. باید بر روی آن کلیک کنید.
داشبورد حساب کاربری LiveKit برای ساخت کلید API جدید
  • گام دوم: بعد از آن پنجره جدیدی باز می‌شود. در این پنجره باید توضیح ساده‌ای درباره کلید خود نوشته و سپس دکمه «Generate key» را بزنید.
نوشتن توضیح اولیه و ساده‌ای درباره خود کلید API
نوشتن توضیح اولیه و ساده‌ای درباره خود کلید API
  • گام سوم: در پنجره باز شده مشخصات مربوط به تمام متغیرهای محیطی پروژه نوشته شده‌اند. توجه کنید که اگر این پنجره بسته شود دیگر به مقدار LIVEKIT_API_SECRET  دسترسی نخواهید داشت و مجبور هستید از اول کلید API بسازید. در کادر پایین، تمام متغیر‌ها به صورت آماده نوشته شده‌اند. فقط کافیست که مقادیر این کادر را کپی کرده و در فایل .env.local پیست کنید.
تمام متغیر‌های محیطی برای استفاده از LiveKit
اگر این پنجره بسته شود دیگر به مقدار LIVEKIT_API_SECRET دسترسی نخواهید داشت. این متغیر‌ها دقیقا در همان قالب مورد نیاز برای استفاده در فایل نوشته شده‌اند.

ساخت هوش مصنوعی سخنگو با پایتون

از این بخش به بعد می‌خواهیم توسعه پروژه خود را با کدنویسی به پیش‌ ببریم. روش‌های مختلفی برای ساخت هوش مصنوعی سخنگو با پایتون وجود دارد. ما در این مطلب تلاش کردیم که روشی ساده و کاربردی را آموزش بدهیم. اما اگر حس می‌کنید که در آموزش‌های ویدئویی بهتر یاد می‌گیرید پیشنهاد می‌کنیم فیلم آموزش پروژه محور پایتون درباره ساخت دستیار صوتی از طراحی توابع تا اجرای برنامه + گواهینامه را در فرادرس مشاهده کنید. در این فیلم از روش و تکنولوژی‌های دیگری کمک گرفته شده است و به درک بهتر و عمیق‌تر مطلب کمک می‌کند. به منظور دسترسی بهتر به فیلم مورد نظر، لینک دسترسی مستقیم آن را در پایین قرار داده‌ایم.

در ادامه کار، ابتدا در پوشه پروژه اصلی پروژه، فایل جدیدی با نام «agent.py» ایجاد می‌کنیم. در مراحل بعدی این فایل را به صورت مرحله‌به‌مرحله تکمیل خواهیم کرد. همچنین، در بخش «پیاده‌سازی کامل» در انتهای آموزش، نسخه نهایی فایل را قرار داده‌ایم.

مرحله اول، تعریف و مقداردهی هوش مصنوعی سخنگو

کار خود را با تعریف هوش مصنوعی سخنگو و مقداردهی اولیه به آن شروع می‌کنیم. برای انجام این کار کد زیر را به فایل «agent.py»‌ اضافه کنید.

مهم‌ترین نکات مربوط به کدهای بالا را در فهرست پایین نوشته‌ایم.

  1. در کدهای بالا از خط ۹ تا ۱۳، کلاس Assistant  را تعریف کرده‌ایم. تمام دستورالعمل‌ها و بخش اصلی شخصیت عامل صوتی در همین کلاس قرار می‌گیرند.
  2. در خط ۱۵، شیئی از نوع AgentServer  ایجاد کرده‌ایم.
  3. در خط ۱۷، دکوراتور @server.rtc_session  تابع ورودی را ثبت می‌کند. این تابع همزمان با شروع شدن هر سشن جدید در اتاق، اجرا می‌شود.
  4. مقدار agent_name  مشخص می‌کند که هنگام درخواست سشن کدام عامل «هوش مصنوعی سخنگو» باید اجرا شود. کدهای مربوط به این بخش، رفتار هوش مصنوعی سخنگو را از حالت اجرای خودکار به حالت اجرای صریح تغییر می‌دهند. یعنی هوش مصنوعی سخنگو را فقط زمانی می‌توان اجرا کرد که به صورت مستقیم فراخوانی شده باشد. بنابراین به طور خودکار وارد همه اتاق‌های جدید نخواهد شد.
مراحل اصلی ساخت هوش مصنوعی سخنگو با پایتون
مراحل اصلی ساخت هوش مصنوعی سخنگو با پایتون

این روش، کنترل دقیق‌تری در اختیار برنامه نویس قرار می‌دهد. در ضمن با انجام این کار برنامه هم در محیط توسعه و هم در محیط عملیاتی، رفتار درست و پایدارتری خواهد داشت.

مرحله دوم، تنظیم فایل تبدیل گفتار به متن

اکنون تابع my_agent  را در فایل «agent.py»‌ به‌روزرسانی می‌کنیم تا از Deepgram برای تبدیل گفتار به متن استفاده کند.

در کدهای بالا دو نکته مهم وجود دارد.

  1. مقدار "deepgram/nova-3:multi " درخواست‌ها را از طریق رابط LiveKit به مدل «Deepgram Nova-3» هدایت کرده و از چند زبان مختلف پشتیبانی می‌کند.
  2. نیازی به ساخت کلید API جداگانه برای Deepgram نداریم. رابط LiveKit اطلاعات مربوط به احراز هویت ارائه‌دهنده را به صورت خودکار مدیریت می‌کند.

مرحله سوم، پیکربندی مدل زبانی بزرگ

دستورالعمل‌های عامل صوتی داخل کلاس Agent  قرار می‌گیرند. ابتدا کلاس Assistant  را با System Prompt  به‌روزرسانی کرده و سپس مقدار llm  را به AgentSession  اضافه می‌کنیم.

در فهرست پایین، چند نکته مهم برای نوشتن پرامپت‌های صوتی را توضیح داده‌ایم.

  • پاسخ‌ها را کوتاه نگه دارید. پاسخ‌های طولانی در مکالمه طبیعی به نظر نمی‌رسند.
  • از فهرست‌ها و قالب‌بندی‌های پیچیده استفاده نکنید. این موارد هنگام تبدیل به گفتار، کیفیت مناسبی ندارند.
  • متن را برای شنیدن بنویسید، نه برای خواندن.

مرحله چهارم، تنظیم دستورات تبدیل متن به گفتار

در این مرحله باید مقدار tts  را در تابع my_agent  به AgentSession  اضافه کنیم.

رشته TTS از قالب provider/Model:voice-id  استفاده می‌کند. توجه کنید که سرویس Cartesia از صداهای متنوع و زیادی پشتیبانی می‌کند. بنابراین می‌توانید تمام این گزینه‌ها را بررسی کرده و «شناسه» (UUID) صدای مورد نظرتان را در این رشته جایگزین کنید.

هشدار: در این بخش می‌توانید بدون مشخص کردن «شناسه صوتی» (Voice UUID) هم روند کار را ادامه دهید. اما در این صورت Cartesia از صدای پیش‌فرض خود استفاده می‌کند. این موضوع می‌تواند باعث بروز نتایج ناهماهنگ در جلسات یا مناطق مختلف شود. زیرا ممکن است صدای پیش‌فرض بدون اطلاع و به صورت ناگهانی تغییر کند. بنابراین برای سیستم‌های عملیاتی، بهتر است که همیشه «Voice UUID» را مشخص کنید تا صدای هوش مصنوعی سخنگو ثابت و یکسان باقی بماند.

روش تبدیل متن به گفتار در زمان ساخت هوش مصنوعی سخنگو با پایتون

مرحله پنجم، افزودن VAD و تشخیص نوبت مکالمه

اکنون تنظیمات مربوط به VAD، یعنی «تشخیص فعالیت صوتی» و تشخیص نوبت مکالمه را به AgentSession  اضافه می‌کنیم. به این منظور کد vad=silero.VAD.load()  را در زمان ساخته شدن شی سشن به آن ارسال می‌کنیم.

AgentSession  این موارد را مدیریت می‌کند.

  • «تشخیص فعالیت صوتی» (VAD): مدل «Silero» تشخیص می‌دهد که کاربر چه زمانی شروع به صحبت می‌کند و چه زمانی صحبت او تمام می‌شود.
  • تشخیص نوبت مکالمه: مدل چندزبانه مشخص می‌کند که کاربر چه زمانی صحبت خود را به پایان رسانده است.
  • مدیریت قطع شدن صحبت: اگر کاربر وسط صحبت وارد مکالمه شود، سیستم صحبت هوش مصنوعی سخنگو را متوقف می‌کند.

مرحله ششم، اجرای عامل صوتی

پس از تنظیم AgentSession، اکنون می‌خواهیم عامل صوتی را اجرا کنیم. در این بخش از پیامی برای خوش‌آمدگویی اولیه استفاده کرده‌ایم.

نکات مهم کد بالا را در پایین نوشته‌ایم.

  • تابع session.start()  اتصال سشن را به اتاق برقرار می‌کند و «عامل» صوتی یا Assistant  را به آن متصل می‌سازد.
  • تابع generate_reply()  پیام خوش‌آمدگویی اولیه را تولید می‌کند. با این پیام، عامل یا همان هوش مصنوعی سخنگو، مکالمه را شروع کرده و منتظر صحبت کاربر نمی‌ماند.
دو تابع مهم در زمان اجرای عامل صوتی
دو تابع مهم در زمان اجرای عامل صوتی

کدهای کامل ساخت هوش مصنوعی سخنگو با پایتون

در ادامه، فایل کامل «agent.py»‌ را مشاهده می‌کنید. در این فایل تمام بخش‌های کد در جای درست مربوط به خود نوشته شده‌اند.

نکته: توجه کنید که بعضی از کدهای نوشته شده در بخش‌های قبلی حالت آموزشی داشته و با هدف کمک به درک بهتر موضوع به فایل «agent.py»‌ اضافه شده‌ بودند. در نسخه بالا تمام کدهای زائد را حذف کرده و نسخه درست آن‌ها را نوشته‌ایم.

نکته ۲: در کدهای بالا کلاس Assistant  را تعریف کرده‌ایم. این کلاس از شی Agent  ارث‌بری می‌کند. خود این شی جزو ماژول‌های از پیش‌آماده شده در فریم‌ورک LiveKit است. با اینکه فریم‌ورک‌ها به این شکل بسیار از مسائل کدنویسی را ساده‌تر می‌کنند. اما برای استفاده درست از آن‌ها لازم است با مسائلی مانند وراثت در پایتون آشنا باشید. در صورت نیاز به کمک بیشتر در این ضمینه، پیشنهاد می‌کنیم که مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.

دانلود کردن فایل‌های مدل

حالا که فایل «agent.py»‌ ساخته شده است، برای تکمیل کردن مراحل ساخت هوش مصنوعی سخنگو با پایتون، باید فایل‌های مدل موردنیاز برای VAD و تشخیص نوبت مکالمه را دانلود کنیم. عامل هوش مصنوعی برای صحبت با کاربر به این فایل‌ها نیاز دارد. دستور زیر را در خط فرمان نوشته و دکمه Enter را فشار بدهید.

uv run agent.py download-files

این مرحله فقط یک‌بار انجام می‌شود. پس از دانلود، فایل‌ها به صورت محلی ذخیره یا «کش» (Cache) می‌شوند. بنابراین لازم نیست در اجراهای بعدی دوباره آن‌ها را دانلود کنیم.

چگونه یک عامل صوتی را به صورت محلی تست کنیم؟

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

تست محلی

ابتدا باید هوش مصنوعی سخنگو را در «حالت کنسول» (Console Mode) اجرا کنیم. بنابراین لازم است ابتدا بررسی کنیم که آیا این هوش مصنوعی به درستی کار می‌کند یا نه. دستور زیر را در خط فرمان نوشته و دکمه Enter را فشار بدهید.

uv run agent.py console

حالت کنسول به کاربران اجازه می‌دهد به شکل مستقیم و صوتی در ترمینال با هوش مصنوعی سخنگو تعامل داشته باشند. یعنی در کنسول پایتون می‌توانید پیام تایپ کنید یا با میکروفون صحبت کنید. این روش برای تست تنظیمات «مدل زبانی بزرگ» (LLM) و «System Prompt» بسیار مناسب است. زیرا در این تکنیک نیازی به استقرار یا باز کردن مرورگر ندارید.

بعد از اجرای دستور بالا پیشنهاد می‌کنیم هر دو حالت زیر را امتحان کنید.

  • صحبت کردن برای تست کامل پایپ‌لاین صوتی
  • یا فشار دادن «Ctrl+T» برای ورود به حالت متنی و تایپ کردن پیام

نصب وابستگی‌ها در صورت بروز خطا

در صورتی که بعد از اجرای دستور بالا به خطا برخورد کردید، شاید لازم باشد بعضی از پکیج‌ها را به صورت دستی نصب کنید. دستور لازم برای نصب این پکیج‌ها را در پایین نوشته‌ایم.

uv add livekit-agents
uv add "livekit-agents[deepgram,cartesia,silero]"
uv add livekit-plugins-silero

تمام دستورات بالا را به شکل جداگانه یک به یک در خط فرمان بنویسید و با زدن دکمه Enter وابستگی‌های مورد نیاز را نصب کنید.

ربات کوچک هوش مصنوعی که بر روی لپتاپی با لوگوی پایتون سخنوری می‌کند.

تست با LiveKit Agent Console

«Agent Console» رابط کاربری تحت وبی است که برای تست و اشکال‌زدایی عامل صوتی در محیط توسعه استفاده می‌شود. در این روش، نیازی به «استقرار» (Deploy) پروژه ندارید. در این تکنیک، عامل هوش مصنوعی به صورت محلی روی سیستم اجرا می‌شود. سپس Console از طریق فضای ابری LiveKit به آن متصل خواهد شد.

مرحله ۱: اجرای هوش مصنوعی سخنگو به صورت محلی

ابتدا مطمئن شوید که هوش مصنوعی سخنگو در «حالت توسعه» (Dev Mode) در حال اجرا است. به منظور اجرای هوش مصنوعی سخنگو در این حالت، کافی است که کد زیر را در خط فرمان نوشته و دکمه Enter را فشار دهید.

uv run agent.py dev

پس از اجرا باید در خروجی ترمینال عبارت «registered worker» را مشاهده کنید. این یعنی هوش مصنوعی سخنگوی محلی با موفقیت به فضای ابری LiveKit متصل شده و آماده دریافت درخواست‌ها است.

اجرای هوش مصنوعی سخنگو به صورت محلی
اجرای هوش مصنوعی سخنگو به صورت محلی

مرحله ۲: باز کردن Console تحت وب

وارد بخش Agent Console در داشبورد پروژه خود شوید. لینک (+)

باز کردن Console تحت وب

مرحله ۳: بررسی تنظیمات جلسه

پنل تنظیمات با عنوان «Console Configuration» را باز کرده و تنظیمات اضافی مربوط به «سشن» (Session) را بررسی کنید. در این بخش باید نام هوش مصنوعی سخنگو (my-agent) از قبل انتخاب شده باشد.

پنل تنظیمات LiveKit با عنوان «Console Configuration»

تنظیمات مهم این بخش را در فهرست زیر نوشته‌ایم.

  1. در بخش «Participant» مقدار «Identity» را بر روی user  تنظیم کنید. سپس باید کادر «Metadata» را خالی یا با {}  رها کنید.
  2. در بخش «Agent» مقدار «Agent name» را بر روی my-agent تنظیم کنید. سپس مقدار کادر «Job metadata» را باید خالی یا {}  رها کنید.
  3. در بخش «Room» مقدار «Room name» می‌تواند هر رشته دلخواهی مانند test-room باشد.
تنظیمات مشخص شده در نوار کنار

مرحله ۴: اتصال و تست

مراحل این بخش را به ترتیب در پایین نوشته‌ا‌یم.

  1. روی دکمه آبی رنگ پایین با عنوان «Save and start session» کلیک کنید.
  2. سپس در صورت درخواست، دسترسی میکروفون را فعال کنید.
  3. حالا به صورت طبیعی صحبت کنید.
  4. می‌توانید سلام ساده بگویید یا سوالی بپرسید.

باید در کمتر از ۱ ثانیه پاسخ صوتی دریافت کنید. پس از اتصال، فضای ابری LiveKit درخواست‌ها را به هوش مصنوعی سخنگوی محلی هدایت می‌کند. همزمان با اجرای این عملیات می‌توانید فعالیت پردازشی هوش مصنوعی سخنگو را در ترمینال خود مشاهده کنید.

نکته: با توجه به سرعت اینترنت ممکن است زمان پاسخ‌گویی در کشور ایران چیزی در حد ۳ تا ۵ ثانیه باشد.

مرحله ۵: پایش مکالمه

در این مرحله، Console اطلاعات مهمی از وضعیت مکالمه را نمایش می‌دهد.

  • «نمایشگر صوتی» (Audio Visualizer): نشان می‌دهد چه زمانی کاربر در حال صحبت است و چه زمانی عامل صوتی پاسخ می‌دهد.
  • «متن مکالمه» (Transcript): در این قسمت، متن هر دو طرف مکالمه به صورت لحظه‌ای و زنده نمایش داده می‌شود.
  • وضعیت اتصال: بررسی می‌کند که آیا به «اتاق» (Room) درست متصل شده‌اید یا خیر.
  • معیارهای تاخیر و مصرف: جزئیات تاخیر را به صورت زنده و همچنین میزان استفاده از منابع را نمایش می‌دهد.

عیب‌یابی

در این قسمت چند مورد از رایج‌ترین مشکلات اجرای پروژه را بررسی کرده و برای هر کدام، راه‌حلی را ارائه داده‌ایم.

  • اگر هیچ پاسخی دریافت نمی‌کنید: بررسی کنید که آیا هوش مصنوعی سخنگو در حال اجرا است و پیام «registered worker» را در ترمینال نشان دهد یا نه.
  • اگر صدا را نمی‌شنوید: تنظیمات خروجی صوتی مرورگر خود را بررسی کنید.
  • اگر دسترسی رد شده است: در تنظیمات مرورگر، اجازه دسترسی به میکروفون را فعال کنید.

چطور با هوش مصنوعی برنامه نویسی کنیم؟

هوش مصنوعی به عنوان مفهومی جدید و مدرن، روزبه‌روز گسترده‌تر می‌شود. از این تکنولوژی جدید، می‌توان به عنوان مشاور و معلم هم استفاده کرد. کار با ابزارهای هوشمند با هدف دستیابی به راه‌حل‌های جدید، به جذب بهتر پروژه‌های بازار کار کمک می‌کند. بنابراین افراد می‌توانند فرصت‌های شغلی بهتری پیدا کنند. از این رو، فرادرس تصمیم گرفت تا مجموعه آموزشی را برای کمک به یادگیری برنامه نویسی با هوش مصنوعی تولید و منتشر کند. کاربران مختلف با کمک فیلم‌های این مجموعه آموزشی می‌توانند برنامه نویسی را یاد بگیرند. می‌توان گفت استفاده از هوش مصنوعی به عنوان معلم مجازی یکی از کاربردهای مهم این ابزار است.

در پایین، چند مورد از فیلم‌های این مجموعه آموزشی را معرفی کرده‌ایم.

برای بررسی سایر فیلم‌ها بر روی تصویر زیر کلیک کنید.

مجموعه آموزش هوش مصنوعی برای برنامه نویسی – کاربردی و عملی
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش هوش مصنوعی برای برنامه نویسی به صورت کاربردی و عملی هدایت شوید.

در بخش بعد روش اندازه‌گیری تاخیر پاسخ توسط هوش مصنوعی سخنگوی پایتون را می‌آموزیم.

اندازه‌گیری تاخیر

عامل‌های صوتی خوب باید در کمتر از ۱ ثانیه پاسخ دهند. هر پیام یا «ChatMessage» در تاریخچه مکالمه شامل معیاری برای نمایش مقدار تاخیر برای همان «نوبت» (Turn) است.

«کل تاخیر» (Total Latency) به صورت مستقیم با مقدار e2e_latency  در دسترس است. همچنین می‌توان آن را به صورت تقریبی از جمع بخش‌های مختلف end_of_turn_delay + llm_node_ttft  + tts_node_ttfb به دست آورد.

نکته: در صورت نیاز به بررسی بهتر و بیشتر به فضای ابری LiveKit مراجعه کنید. در این فضا داشبورد «Agent Observability» اطلاعات کاملی درباره جزئیات تاخیر ارائه می‌دهد. این بخش، همراه با پخش همگام‌سازی شده صدا نمایش داده می‌شود. با کلیک روی هر بخش از تایم‌لاین، می‌توانید زمان‌بندی دقیق مراحل مختلف را مشاهده و بررسی کنید.

حداقل تاخیر قابل قبول

در فهرست پایین حداقل تاخیر قابل قبول برای بخش‌‌های مختلف پایپ‌لاین را در زمان ساخت هوش مصنوعی سخنگو با پایتون نوشته‌ایم.

  • STT: زمان تبدیل صدا به متن باید کمتر از ۲۰۰ میلی‌ثانیه باشد.
  • LLM (TTFT): زمان مورد نیاز برای تولید اولین بخش پاسخ توسط مدل هوش مصنوعی باید کمتر از ۳۰۰ میلی‌ثانیه باشد.
  • TTS (TTFA): زمان مورد نیاز برای تولید اولین صدای پاسخ باید کمتر از ۳۰۰ میلی‌ثانیه باشد.
  • مجموع کل: یعنی از لحظه‌ای که کاربر حرف زدن را تمام می‌کند تا لحظه‌ای که اولین صدای پاسخ پخش می‌شود، باید کمتر از ۸۰۰ میلی‌ثانیه باشد.

نکته: به زمان بین دریافت سوال و تولید اولین کلمه «TTFT» می‌گویند.

نکته ۲: TTFA معنای زمان مورد نیاز توسط سیستم برای تولید اولین صدا است.

عیب‌یابی مشکلات رایج

در این قسمت از مطلب مربوط به ساخت هوش مصنوعی سخنگو با پایتون روش عیب‌یابی رایج‌ترین مشکلات مربوط به این ابزار را بررسی می‌کنیم. البته ممکن است که مشکلات دیگری هم وجود داشته باشند. اما توقع داریم با رعایت دقیق کدها و مراحل نوشته شده در این مطلب با کمترین مشکل بتوانید هوش مصنوعی سخنگوی خود را راه‌اندازی کنید.

چند مورد از رایج‌ترین مشکلات مربوط به هوش مصنوعی سخنگو
چند مورد از رایج‌ترین مشکلات مربوط به هوش مصنوعی سخنگو

کار نکردن کلی سیستم

اگر هیچ پاسخی از سیستم ارسال نمی‌شد، به نکات زیر، توجه کنید.

  • بررسی کنید دسترسی میکروفون فعال باشد.
  • مطمئن شوید هوش مصنوعی سخنگو در حال اجرا است و پیام «registered worker» در ترمینال نمایش داده می‌شود.

از کار افتادن سیستم فعال

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

  • حساسیت تنظیمات VAD را بررسی کنید.
  • از پایدار بودن اتصال شبکه مطمئن شوید.

تاخیر خیلی زیاد

اگر مدت زمان مورد نیاز سیستم برای پاسخ داده خیلی (برای مثال ۳ ثانیه) طول کشید به نکات زیر توجه کنید. البته با توجه به سرعت اینترنت احتمال تاخیر وجود دارد.

  • حالت «Streaming» را برای همه اجزا فعال کنید.
  • بررسی کنید از STT به صورت Batch استفاده نشده باشد.
  • اتصال شبکه به API-های ارائه‌دهنده را بررسی کنید.

عدم درک درست پیام کاربر

اگر در سیستم STT، دقت مورد انتظار وجود نداشت، به نکات زیر توجه کنید.

  • مطمئن شوید زبان به درستی تنظیم شده است.
  • کیفیت صدا مانند «نرخ نمونه‌برداری» (sample rate) و نویز را بررسی کنید.
  • یک مدل STT دیگر را امتحان کنید.

عدم پاسخ گویی سیستم فعال

اگر با خطاهای «Timeout» در LLM روبه‌رو شدید، به نکات زیر توجه کنید.

  • تعداد «Max Tokens» را کاهش دهید.
  • وضعیت سرویس OpenAI را بررسی کنید.
  • از «FallbackAdapter» داخلی LiveKit استفاده کنید تا در صورت خطا، درخواست‌ها به صورت خودکار به ارائه‌دهنده پشتیبان منتقل شوند.

استقرار در محیط تولید یا Production

در این مرحله، می‌دانیم که هوش مصنوعی سخنگو در محیط محلی به درستی کار می‌کند و آماده است. اما می‌خواهیم آن را در محیط عملیاتی اجرا کنیم.

استقرار هوش مصنوعی سخنگو بر روی فضای ابری

فضای ابری LiveKit به عنوان محل مناسبی برای استقرار هوش مصنوعی سخنگو است. این سرویس مسئولیت مدیریت «زیرساخت» (Infrastructure)، «مقیاس‌پذیری» (Scaling) و «قابلیت مشاهده» (Observability) بودن هوش مصنوعی ساخته شده است. در نتیجه، برنامه نویسان راحت‌تر می‌توانند تمرکز خود را روی توسعه بگذارند.

استقرار هوش مصنوعی سخنگو بر روی فضای ابری

با استفاده از فضای ابری LiveKit می‌توانید عامل هوش مصنوی سخنگو را به شکل مستقیم از مخزن خود و تنها با یک دستور، مستقر کنید. برای این کار ابتدا لازم است، ابزار خط فرمان LiveKit یعنی lk  را نصب کنیم. با توجه به سیستم عامل خود، دستور مناسب را انتخاب کرده و در خط فرمان اجرا کنید.

# macOS
brew install livekit-cli

# Linux
curl -sSL https://get.livekit.io/cli | bash

# Windows
winget install LiveKit.LiveKitCLI

بعد از آن می‌توانیم با کمک دستور زیر و به راحتی هوش مصنوعی سخنگوی خود را راه‌اندازی کنیم.

lk agent create

گفتار به گفتار، جایگزین جدید در حال ظهور

رویکرد جدیدتری برای ساخت هوش مصنوعی سخنگو وجود دارد. در این روش، مرحله میانی (تبدیل صوت به متن و برعکس) به طور کامل حذف می‌شود. «مدل‌های گفتار به گفتار» (Speech-To-Speech Models)، مانند «RealTime API» از شرکت «OpenAI» و «Gemini Live» از گوگل، صدا را مستقیما دریافت کرده و خروجی صوتی تولید می‌کنند.

در فهرست پایین، مزایای استفاده از مدل‌های جدید گفتار به گفتار را نوشته‌ایم.

  • تاخیر کمتر، چون تعداد مراحل پردازش کاهش پیدا می‌کند.
  • ویژگی‌های غیرکلامی مانند لحن، تاکید و احساسات بهتر حفظ می‌شوند.
  • روند مکالمه طبیعی‌تر می‌شود.

در پایین هم محدودیت‌هایی را نوشته‌ایم که این مدل‌ها دارند.

  • مشخص نیست مدل دقیقا چه چیزی را «شنیده» یا «گفته» است.
  • اشکال‌زدایی و ارزیابی آن سخت‌تر است.
  • از آنجا که این فناوری در مراحل ابتدایی قرار دارد، گزینه‌های ارائه‌دهنده هنوز محدود هستند.
  • در بیشتر موارد، هزینه استفاده به‌ازای هر دقیقه بیشتر است.

در حال حاضر، برای ساخت عامل‌های صوتی واقعی در محیط‌های عملیاتی، پایپ‌لاین آبشاری همچنان کاربردی‌ترین انتخاب است. این روش بارها آزمایش شده، امکان بررسی دقیق مراحل را فراهم می‌کند و کنترل جزئی‌تری در اختیار توسعه‌دهندگان قرار می‌دهد. با این حال، فناوری گفتار به گفتار با سرعت زیادی در حال پیشرفت است. فریم‌ورک «LiveKit Agents» از هر دو رویکرد پشتیبانی می‌کند.

چرا بلادرنگ بودن اهمیت دارد؟

الگوی سنتی درخواست و پاسخ HTTP در هر مرحله منجر به کندی سرعت سیستم می‌شود.

  1. ابتدا صدا ارسال می‌شود.
  2. سپس باید منتظر تبدیل آن به متن بمانید.
  3. بعد از آن متن ارسال می‌شود.
  4. باز هم باید منتظر پاسخ بمانید.
  5. بعد از آن، پاسخ ارسال می‌شود
  6. و دوباره باید برای تولید صدا صبر کنید.

هر رفت‌وبرگشت معمولا حدود ۱۰۰ تا ۳۰۰ میلی‌ثانیه تاخیر ایجاد می‌کند.

WebRTC این روند را تغییر می‌دهد. در این روش، به‌جای استفاده از الگوی درخواست و پاسخ، اتصال‌هایی دائمی برقرار می‌شوند که داده را به صورت هم‌زمان در هر دو جهت جریان می‌دهند. در حالی که صدا وارد سیستم می‌شود، پاسخ نیز در همان زمان در حال بازگشت است. نتیجه این کار، کاهش تاخیر کلی از چند ثانیه به چند صد میلی‌ثانیه است.

نمای کلی معماری مدل‌های گفتار به گفتار به شکل زیر است.

  • صدای کاربر
  • اجرای زنده عملیات STT
  • اجرای زنده LLM
  • اجرای زنده عملیات TTS
  • صدای مدل هوش مصنوعی
نمای کلی معماری مدل‌های گفتار به گفتار
نمای کلی معماری مدل‌های گفتار به گفتار

هر بخش، خروجی خود را به صورت زنده به بخش بعدی ارسال می‌کند. مدل زبانی بزرگ، تولید پاسخ را پیش از پایان صحبت کاربر آغاز می‌کند. همچنین، سیستم تبدیل متن به گفتار قبل از تمام شدن پاسخ LLM شروع به تولید صدا می‌کند. این پردازش هم‌زمان و موازی، دلیل اصلی طبیعی و سریع بودن عامل‌های صوتی است.

جمع‌بندی

در این مطلب از مجله فرادرس، روش ساخت هوش مصنوعی سخنگو با پایتون را با کمک پلتفرم ‌LiveKit یاد گرفتیم. ابتدا محیط پروژه را با ابزارهایی مانند uv  آماده کردیم و سپس کتابخانه‌های موردنیاز برای «تبدیل گفتار به متن» (STT)، «مدل زبانی» (LLM) و «تبدیل متن به گفتار» (TTS) را نصب کردیم. بعد از آن، متغیرهای محیطی و کلیدهای API را برای اتصال پروژه به سرویس LiveKit Cloud تنظیم کردیم. در ادامه، عامل صوتی ساده‌ای با پایتون ساختیم. این هوش مصنوعی سخنگو می‌تواند صدای کاربر را دریافت کرده، آن را پردازش کند و پاسخ صوتی مناسب تولید کند.

همچنین با ابزار Agent Console روش تست و اشکال‌زدایی هوش مصنوعی سخنگو بررسی را هم بررسی کردیم. سپس مشکلات رایج مانند تاخیر زیاد، قطع شدن صدا و خطاهای STT یا LLM را توضیح داده و برای هر کدام چند راه حل پیشنهاد دادیم. در پایان نیز مفهوم Latency و اهمیت پاسخ‌دهی سریع در سیستم‌های صوتی بررسی شده‌اند.

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر پرسشی درباره این مطلب دارید، آن را با ما مطرح کنید.
منابع:
LiveKit
PDF
مطالب مرتبط
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *