سلام!
به چالشبرانگیزترین بخش این سری آموزش خوش اومدید!
البته چالشش برای من بوده؛ چون چندین روز درگیر دانلود چند ده گیگ مدل مختلف بودم و همه رو تست کردم تا در نهایت برسم به همین چند تا اسکریپتی که قراره شما با یک کلیک نصب و اجراشون کنید. منتّی هم نیست، فقط گفتم در جریان باشید! 🙂
البته قبل از هر چیزی برید بستهی شبانهتون رو بخرید، چون حداقل ۱۵ تا ۲۰ گیگ دانلود داریم! اگر هم اهل قهوه یا چای هستید، لیوانتون رو پر کنید که حسابی کار داریم. 🙂 تمام تلاشم رو کردم بهینهترین مدلهایی رو پیدا کنم که روی سیستمهای معمولی هم تا حد ممکن راحت اجرا بشن. ولی خب، بعضی جاها دیگه نمیشه کاری کرد و برای اجرای مدلهای قویتر به کارت گرافیک یا سیستم قدرتمندتری نیاز دارید.
البته اگر سیستم قوی ندارید هم هیچ مشکلی نیست؛ چند راه جایگزین هم معرفی میکنم که با کمترین هزینه بتونید همین Pipeline رو راهاندازی کنید. سیستمی که من روی اون تست کردم:
البته از قدیم گفتن: هر که بامش بیش، برفش بیشتر!
اگر سیستم قدرتمندتری دارید، میتونید سراغ مدلهای قویتر برای تولید متن و صدا برید که طبیعتاً به منابع سختافزاری بیشتری، مخصوصاً VRAM نیاز دارن. مدلهایی که من اینجا استفاده کردم لزوماً بهترین مدلهای موجود نیستن. اگر مدتی از انتشار این مقاله گذشته، پیشنهاد میکنم قبل از اجرا، یک بازنگری روی مدلهای انتخابی داشته باشید؛ چون مدلهای هوش مصنوعی با سرعت زیادی در حال پیشرفت هستن.
خلاصهی کلام اینکه اینها صرفاً تجربهی منه. اگر مدل بهتر یا روش بهتری سراغ دارید، خوشحال میشم داخل کامنتها یا پست این مطلب در ایکس، یا همون توییتر خودمون، بهمون بگید.
خب، حالا قراره دقیقاً چیکار کنیم؟ قراره یک ربات هوش مصنوعی کاملاً آفلاین بسازیم که بتونیم بهصورت صوتی باهاش صحبت کنیم و اون هم جوابمون رو بهصورت صوتی بده؛ چیزی شبیه Gemini Live یا ChatGPT Voice، با این تفاوت که اینجا کل پردازش رو روی سیستم خودمون انجام میدیم.
حالا بهصورت کلی به چه چیزهایی نیاز داریم؟
اول به مدلی نیاز داریم که صدای ما رو به متن تبدیل کنه که بهاختصار بهش STT یا Speech-to-Text میگن. اینجا از مدل Shenava-Koochik استفاده میکنیم که برای تشخیص گفتار فارسی طراحی شده.
بعد از تبدیل صدای ما به متن، باید این متن رو پردازش کنیم و جواب بگیریم. اینجا وارد دنیای LLMها یا مدلهای زبانی بزرگ میشیم؛ همون مدلهایی که احتمالاً همه با اسمهایی مثل GPT، Gemini، DeepSeek و… باهاشون آشنا هستید.
در این آموزش از Gemma 4 E2B استفاده میکنیم که در دستهی مدلهای Edge قرار میگیره و برای اجرا روی سختافزارهای محدودتر طراحی شده.
در مرحلهی آخر به مدلی نیاز داریم که متن تولیدشده رو دوباره به صدا تبدیل کنه که بهش TTS یا Text-to-Speech میگن. اینجا از مدل Pocket-TTS Farsi استفاده میکنیم که برای زبان فارسی آماده شده و امکان استفاده از Voice Prompt و شبیهسازی صدا رو هم داره.
یه نکته هم اینجا وجود داره؛ زمانی که من این مقاله رو مینویسم، نسخهی دوم Pocket-TTS Farsi هم منتشر شده که در بعضی تستها کیفیت و پایداری بهتری داره، اما یک مرحلهی اضافه به اسم G2P یا تبدیل متن به واج به Pipeline اضافه میکنه. نسخهای که ما اینجا استفاده میکنیم متن فارسی رو مستقیماً دریافت میکنه و به همین دلیل برای این آموزش سادهتره.
در قدم اول، ریپازیتوری این آموزش رو با دستور زیر از GitHub کلون کنید:
git clone https://github.com/mthri/sisoog-ec25.git
cd sisoog-ec25/02-ai
حالا یک محیط مجازی پایتون میسازیم:
python3 -m venv .venv
و با دستور زیر فعالش میکنیم:
source .venv/bin/activate
حالا کتابخانههای موردنیاز رو نصب میکنیم:
python -m pip install -r requirements.txt
حدود ۷ گیگ دانلود داریم؛ تا تموم بشه چای یا قهوهتون رو میل کنید! 🙂
حالا باید مدل تبدیل متن به صدا رو دانلود و تنظیم کنیم:|
hf download mehdi-hf/pocket-tts-farsi –local-dir pocket-tts
بعد از دانلود، فایل pocket-tts/farsi.yaml رو باز کنید و مقدار این دو کلید رو تغییر بدید:
weights_path: model.safetensors
و داخل بخش flow_lm و سپس lookup_table:
tokenizer_path: tokenizer.model
راستی، دوست دارید با صدای خودتون صحبت کنه؟ فقط کافیه در یک محیط ساکت حدود ۵ ثانیه از صدای خودتون ضبط کنید و فایل example_voice.wav رو داخل دایرکتوری pocket-tts با فایل خودتون جایگزین کنید. این مدل از Voice Prompt برای شبیهسازی صدای ورودی استفاده میکنه.
حالا بریم سراغ مدل Speech-to-Text:
hf download Reza2kn/Shenava-Koochik-v1.0 –local-dir shenava-koochik
همین! برای این مرحله کار دیگهای لازم نیست.
مرحلهی آخر، نصب Ollama هست. اگر سیستمی دارید که میتونه مدلهای زبانی رو بهصورت محلی اجرا کنه، بر اساس مشخصات سیستم خودتون مدل مناسب رو انتخاب کنید. من در این آموزش از gemma4:e2b استفاده میکنم. در تست من این مدل مصرف VRAM مناسبی داشت و در کنار سرعت قابلقبول، کیفیت پاسخ مناسبی هم ارائه میداد. اگر دانلود مدلها از Ollama برای شما در دسترس نیست(به علت تحریم و تحریم شکن ندارید)، میتونید فایل مدلها رو از منابع دیگر تهیه کنید و در مسیر مناسب قرار بدید.
حالا چرا اصلاً از Ollama استفاده کردم؟ چون Ollama یک API سازگار با OpenAI در اختیارمون میذاره. یعنی کد ما مستقیماً به API اختصاصی Ollama وابسته نیست و از همان ساختار استاندارد OpenAI برای ارتباط با مدل استفاده میکنیم.
شاید بگید خب که چی؟ اهمیتش اینجاست که خیلی از سرویسها و واسطههای ایرانی و خارجی، مدلهای مختلف هوش مصنوعی رو در قالب API در اختیار کاربر قرار میدن. در نتیجه اگر سیستم قدرتمندی ندارید، میتونید بهجای اجرای مدل بهصورت محلی، با هزینهی نسبتاً کم از این سرویسها استفاده کنید(ارزونترین مدل رو انتخاب کنید، لازم نیست سراغ مدلهای گرون برید)
ساختار کدی که نوشتیم هم طوریه که برای این تغییر نیاز نیست کل برنامه رو از اول بنویسید؛در فایل llm.py میتونید BASE_URL و API_KEY رو تغییر بدید. الان که همه چیز رو نصب کردید فقط کافیه با دستور python main.py برنامه رو اجرا کنید! حالا میتونید با ایجنتتون صحبت کنید!
خب، اگر آموزشها رو از اول دنبال کرده باشید، الان چه چیزهایی داریم؟ یک ماژول سیمکارت Quectel EC25-EUX که با پایتون کنترلش میکنیم، امکان ارسال و دریافت پیامک و تماس داریم و حالا هم یک دستیار صوتی هوش مصنوعی داریم که اون هم با پایتون ساخته شده.
حالا نوبت مرحلهی بعده:
اتصال ماژول به این هوش مصنوعی!
برای چی؟ برای اینکه به تماسهامون رو پاسخ بده یا حتی کارهای دیگهای انجام بده که با کمی خلاقیت خودتون میتونید بهش اضافه کنید.
تمرین در منزل!
در مورد Tool Calling سرچ کنید و سعی کنید این قابلیت رو به پروژه اضافه کنید.
با من همراه باشید.
این داستان ادامه داره…
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.