پرش به محتوای اصلی
پرش به محتوای مقاله

کنترل احساسات صدا در Gemini 3.1 Flash: تگ‌های صوتی چگونه عمل می‌کنند؟

·۱۸ خرداد ۱۴۰۵۷ دقیقه مطالعه
راهنما
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

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

اگر امروز در حال توسعه‌ی یک اپلیکیشن هوش مصنوعی هستید، فاصله میان صدای رباتیک و بیان انسانی بالاخره در حال بسته شدن است. در ۷ ژوئن ۲۰۲۶، یک مستند فنی دقیق فاش کرد که مدل Gemini 3.1 Flash TTS Preview چگونه از مکانیزم تگ‌گذاری خاصی برای تزریق احساسات و ریتم مستقیماً به خروجی‌های صوتی استفاده می‌کند. این مدل از طریق Gemini API، Gemini in Vertex AI و Gemini AI Studio در دسترس است.

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

طبق راهنمای فنی وب‌سایت dev.to، هسته‌ی این قابلیت «تگ‌های صوتی» (Audio tags) است. این ویژگی به توسعه‌دهندگان اجازه می‌دهد دستورات خاصی — مانند [panicked] یا [very slow] — را مستقیماً دور بلوک‌های متنی بپیچند تا اجرای صوتی را دیکته کنند.

معماری فنی

این پیاده‌سازی از یک استک مدرن شامل Angular 21 (آخرین نسخه تا می ۲۰۲۶)، Node.js LTS (می ۲۰۲۶) و Firebase Cloud Functions استفاده می‌کند. گردش کار زمانی شروع می‌شود که کاربر عکسی را آپلود می‌کند؛ سپس یک مدل Gemini آن را تحلیل کرده تا توصیه‌هایی برای بهبود تصویر، یک توصیف، تگ‌های جایگزین و یک «فکت ناشناخته» (obscure fact) تولید کند.

این فکت سپس به یک تابع در Firebase ارسال می‌شود که به عنوان پل ارتباطی با Vertex AI عمل می‌کند. توسعه‌دهنده به دلیل محدودیت‌های منطقه‌ای در هنگ‌کنگ، Vertex AI را به Google AI Studio ترجیح داد تا پایداری سطح سازمانی را برای تولید TTS تضمین کند. اپلیکیشن همچنین از Firebase Remote Config برای مدیریت پارامترهای پویا و از Firebase Local Emulator Suite برای تست‌های محلی در آدرس http://localhost:5001 استفاده می‌کند.

High-level architecture of obscure fact generation

جزئیات استقرار فنی

برای آماده‌سازی محیط، توسعه‌دهنده از Firebase CLI با ترتیب دستورات زیر استفاده می‌کند:

  • npm i -g firebase-tools: نصب سراسری ابزارها.
  • firebase logout و سپس firebase login: برای اطمینان از احراز هویت صحیح.
  • firebase init: تنظیم Cloud Functions، محیط شبیه‌ساز محلی (Local Emulator Suite)، Cloud Storage و Remote Config. در صورت وجود چندین پروژه، از فلگ --project <PROJECT_ID> استفاده می‌شود.

نصب وابستگی‌ها برای شروع به کار توابع ابری حیاتی است. پروژه به firebase-admin و firebase-functions و همچنین کتابخانه‌های خاص GenAI نیاز دارد:

  • @google/genai: SDK اصلی برای دسترسی به Gemini.
  • @cfworker/json-schema: وابستگی مورد نیاز برای SDK مدل‌های GenAI.
  • @modelcontextprotocol/sdk: وابستگی مورد نیاز برای SDK مدل‌های GenAI.

بدون این سه کتابخانه خاص، توابع ابری قادر به اجرا نخواهند بود. در بخش فرانت‌اند، اپلیکیشن Angular برای مقداردهی اولیه برنامه، بارگذاری تنظیمات Remote Config و فراخوانی توابع، به وابستگی firebase نیاز دارد.

مهندسی پرامپت برای بیان احساسی

تولید صدای واقع‌گرایانه به چیزی بیشتر از یک تگ نیاز دارد؛ مدل به یک «صحنه» نیاز دارد. سیستم از یک SCENE_DICTIONARY استفاده می‌کند تا بافت محیطی را به مدل بفهماند. این آرایه شامل محیط‌های متنوعی برای آماده‌سازی عملکرد مدل است:

  • کتابخانه: محیطی تاریک و غبارآلود با آرشیویستی که با میکروفون‌های قدیمی نواری، با شدت و صدای پایین درباره‌ی یک راز فراموش‌شده در یک دست‌نوشته در حال پوسیدن صحبت می‌کند.
  • استودیو: استودیویی با دیوارهای شیشه‌ای در لندن در ساعت ۱۰ شب، با چراغ روشن «ON AIR» و گوینده‌ای پرانرژی که با ریتم یک آهنگ تپنده، سعی می‌کند ملتی را بیدار کند.
  • اتاق خواب: محیطی صمیمی در یک اتاق خواب حومه‌شهری با پرده‌های مخملی و فرش ضخیم، که آکوستیکی شبیه به یک «دوست مورد اعتماد» ایجاد می‌کند.
  • آزمایشگاه: محیطی مینیمالیست و پیشرفته با شیشه و فولاد، با دانشمندی عجیب‌وغریب که سریعاً در یک هدست صحبت می‌کند تا پدیده‌ای پیچیده را توضیح دهد.

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

  • قانون مرز توکن: تگ‌ها باید با یک فاصله از متن جدا شوند. استفاده از [slow]Before اغلب شکست می‌خورد، در حالی که [slow] Before رفتار صحیح را فعال می‌کند. کد از یک تابع makeTag استفاده می‌کند تا اطمینان حاصل شود که یک فاصله به تگ اضافه شده است.
  • وزن‌دهی تکراری: تگ‌های استاندارد مانند [slow] ممکن است بیش از حد نامحسوس باشند. افزودن کلمه «بسیار» (مثلاً [very, very, very slow]) اثر دراماتیک را افزایش داده و طول فایل صوتی را بیشتر می‌کند.
  • پاک‌سازی ورودی: سیستم از توابع sanitizeScene و sanitizeTranscript برای حذف هدرهای Markdown (مانند #) و نقل‌قول‌های سه‌گانه استفاده می‌کند. این کار مانع از شکست پارسر LLM شده و صحنه را به یک پاراگراف واحد و ایمن تبدیل می‌کند.
  • تخت‌سازی خطوط جدید: نویسه‌های خط جدید (\n) برای تبدیل خطوط به یک رشته داده‌ای پیوسته، Escape می‌شوند.
  • پرهیز از اصطلاحات: مدل اصطلاحات یا Idiomها را نمی‌فهمد. برای مثال، استفاده از تگ [at a snail's pace] باعث شد مدل عبارت را عیناً بخواند، به جای اینکه سرعت صحبت را کم کند.

مدیریت جریان‌های صوتی و Blobها

از آن‌جایی که مدل Gemini 3.1 Flash TTS Preview به صورت بومی از استریمینگ پشتیبانی نمی‌کند، پیاده‌سازی داده‌ها را به دو روش متمایز از طریق تابع readFact مدیریت می‌کند. تابع readFactFunction یک رشته base64 کدگذاری شده را برای تحویل همزمان (Synchronous) برمی‌گرداند. این تابع از convertToWav برای تبدیل داده‌های خام پیش از کدگذاری به صورت data:audio/wav;base64,... استفاده می‌کند.

در روش جایگزین، readFactStreamFunction با ارسال تکه‌های (Chunks) صوتی به کلاینت، استریم را شبیه‌سازی می‌کند. فرآیند به این صورت است:

  1. تابع generateAudioStream تکه‌های دریافتی از ai.models.generateContentStream را پیمایش می‌کند.
  2. داده‌های خام و انواع mime را استخراج کرده و ابتدا نرخ نمونه‌برداری (sample rate) را به عنوان متادیتا از طریق response.sendChunk ارسال می‌کند.
  3. بافر خام هر تکه را ارسال کرده و مجموع byteLength را جمع‌آوری می‌کند.
  4. پس از ارسال تمام تکه‌ها، تابع createWavHeader با استفاده از طول کل بایت‌ها و تنظیمات صوتی، یک هدر WAV می‌سازد و آن را به کلاینت بازمی‌گرداند.

High-level architecture of audio generation

لایه‌های امنیتی و زیرساختی

برای تأمین امنیت خط لوله، توسعه‌دهنده یک IIFE (عبارت تابعی فوراً اجرا شونده) برای اعتبارسنجی متغیرهای محیطی پیاده کرد. IIFE مربوط به AUDIO_CONFIG تضمین می‌کند که GOOGLE_CLOUD_LOCATION (تنظیم شده روی "global" برای دسترسی به آخرین مدل)، GEMINI_TTS_MODEL_NAME (gemini-3.1-flash-tts-preview) و GCLOUD_PROJECT موجود باشند. در صورت نبود هر یک، یک خطای HttpsError از نوع failed-precondition صادر می‌شود.

برای Node.js ۲۴ (تا می ۲۰۲۶)، سیستم از تابع داخلی process.loadEnvFile() استفاده می‌کند. برای نسخه‌های قدیمی‌تر، dotenv به عنوان جایگزین به کار می‌رود. امنیت بیشتر با استفاده از Firebase App Check و یک کلید سایت reCAPTCHA Enterprise تقویت شده است. این کار از دسترسی‌های غیرمجاز به توابع ابری جلوگیری می‌کند. این توابع با محدودیت زمانی ۶۰۰ ثانیه و محدودیت‌های CORS (از طریق متغیرهای WHITELIST و REFERER) پیکربندی شده‌اند تا پردازش‌های پیچیده تولید صوت را مدیریت کنند.

پیاده‌سازی در فرانت‌اند Angular

بخش فرانت‌اند دارای یک AudioTagsComponent است که از یک فرم سیگنالی (Signal Form) آزمایشی استفاده می‌کند. این به کاربران اجازه می‌دهد صحنه، احساس و سرعت را وارد کنند. audioPromptForm با یک سیگنال حاوی مقادیر پیش‌فرض مقداردهی شده است: صحنه یک گوینده خبر حرفه‌ای، احساس «حرفه‌ای و کمی جدی» و سرعت «تلفظ متوسط و واضح». این کامپوننت از یک سیگنال computed برای مرتب‌سازی VOICE_OPTIONS بر اساس نام و نگاشت آن‌ها به برچسبی شامل نام و توصیف استفاده می‌کند.

در کامپوننت ObscureFactComponent متد generateSpeech هماهنگی تحویل صدا را بر اساس حالت انتخاب شده مدیریت می‌کند:

  • همزمان/استریم: از SpeechService.generateAudio یا generateAudioBlobURL استفاده می‌کند. دومی یک Blob از آرایه تکه‌ها ساخته و با URL.createObjectURL یک URL قابل پخش ایجاد می‌کند. ابزار revokeBlobURL در هنگام پاک‌سازی برای جلوگیری از نشت حافظه (Memory Leak) استفاده می‌شود.
  • Web Audio API: از AudioPlayerService.playStream برای پردازش و پخش فوری تکه‌ها استفاده می‌کند.

پیکربندی اپلیکیشن فایربیس

برای مدیریت ارتباط بین فرانت‌اند و بک‌اند، یک IIFE برای اعتبارسنجی APP_API_KEY ،APP_ID ،APP_MESSAGING_SENDER_ID و RECAPTCHA_ENTERPRISE_SITE_KEY استفاده شده است. این پیکربندی از طریق تابع getFirebaseConfig ارائه می‌شود که از هدر Cache-Control با مقدار public, max-age=3600, s-maxage=3600 برای کش کردن تنظیمات به مدت یک ساعت بهره می‌برد.

در فرآیند بوت‌استرپ، تابع bootstrapFirebase چندین گام کلیدی را طی می‌کند:

  • فراخوانی loadFirebaseConfig برای دریافت تنظیمات از تابع ابری.
  • مقداردهی اولیه FirebaseApp و App Check با استفاده از ReCaptchaEnterpriseProvider.
  • دریافت Remote Configuration برای تعیین functionRegion.
  • اتصال به شبیه‌ساز محلی در صورتی که نام میزبان localhost باشد، با استفاده از connectFunctionsEmulator.

تحلیل: گذار به سوی «هوش مصنوعی نمایشی»

این پیشرفت نشان‌دهنده تغییری از «متن به گفتار» (TTS) به «متن به اجرا» (Text-to-Performance) است. با treating کردن تولید صدا به عنوان یک صحنه کارگردانی شده به جای یک تبدیل داده‌ای ساده، توسعه‌دهندگان اکنون می‌توانند شخصیت‌های AI غوطه‌ورکننده‌ای خلق کنند که به بافت محیط واکنش نشان می‌دهند.

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

با این حال، محدودیت‌ها همچنان پابرجا هستند؛ پنجره متنی ۳۲ هزار توکنی و نبود استریمینگ بومی نشان می‌دهد که اگرچه کیفیت بالاست، اما تأخیر (Latency) برای فایل‌های صوتی بسیار طولانی همچنان یک مانع برای اپلیکیشن‌های بلادرنگ است. برای آزمایش این قابلیت‌ها، توسعه‌دهندگان باید زبان‌های پشتیبانی شده در Gemini API را بررسی کنند، هرچند باید توجه داشت که برخی گویش‌ها مانند کانتونزی در این نسخه پیش‌نمایش پشتیبانی نمی‌شوند. باید منتظر انتقال از نسخه Preview به General Availability بود تا مشخص شود آیا استریمینگ بومی به خط تولید Flash TTS اضافه می‌شود یا خیر.

چرا این موضوع مهم است؟

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

تأثیر برای ایران

به‌دلیل محدودیت‌های دسترسی به Vertex AI و Google AI Studio، بهره‌برداری از این قابلیت برای توسعه‌دهندگان ایرانی با چالش‌های جدی همراه است.

·نگاه ما
تحریریه دات‌هوش

تحلیل ما این است که گوگل با این به‌روزرسانی، پارامترهای صوتی را از حالت «انتخابی» به حالت «برنامه‌ریز» درآورده است. نگاه ما نشان می‌دهد که صدا دیگر یک خروجی ثابت نیست، بلکه متغیری است که می‌توان آن را با کد کنترل کرد و این یعنی گامی بزرگ به سمت حذف مرز بین متن و اجرا در **هوش مصنوعی زاینده** (Generative AI).

منابع

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

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

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