خيارات الإعداد لواجهة برمجة التطبيقات Live API


حتى مع التنفيذ الأساسي لـ Live API، يمكنك إنشاء تفاعلات جذابة وفعّالة للمستخدمين. يمكنك تخصيص التجربة بشكل أكبر باستخدام خيارات الضبط التالية:



صوت الرد ولغته

يمكنك جعل النموذج يردّ بصوت محدّد و توجيهه للردّ بلغات مختلفة.

تحديد صوت الردّ

انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة.

تتيح Live API استخدام 30 صوتًا اصطناعيًا مختلفًا بدقة عالية، ولكل منها خصائص مميزة. يمكنك الاطّلاع على قائمة بخيارات أصوات الردود والاستماع إلى عيّنات من كل صوت من خلال توسيع القسم أدناه.

إذا لم تحدّد صوتًا للردّ، سيتم استخدام الصوت التلقائي Puck.

لتحديد صوت الردّ، اضبط اسم الصوت ضمن عنصر speechConfig كجزء من إعدادات النموذج.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    speech: SpeechConfig(voiceName: "VOICE_NAME")
  )
)

// ...

Kotlin


// ...

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        speechConfig = SpeechConfig(voice = Voice("VOICE_NAME"))
    }
)

// ...

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    new LiveGenerationConfig.Builder()
        .setResponseModality(ResponseModality.AUDIO)
        .setSpeechConfig(new SpeechConfig(new Voice("VOICE_NAME")))
        .build()
);

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    speechConfig: {
      voiceConfig: {
        prebuiltVoiceConfig: { voiceName: "VOICE_NAME" },
      },
    },
  },
});

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to use a specific voice for its audio response.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    speechConfig: SpeechConfig(voiceName: 'VOICE_NAME'),
  ),
);

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        speechConfig: SpeechConfig.UsePrebuiltVoice("VOICE_NAME")
    )
);

// ...

التأثير في لغة الردّ

تختار نماذج Live API تلقائيًا اللغة المناسبة لردودها.

إذا أردت أن يردّ النموذج بلغة غير الإنجليزية أو دائمًا بلغة معيّنة، يمكنك التأثير في ردود النموذج باستخدام تعليمات النظام مثل الأمثلة التالية:

  • التأكيد للنموذج على أنّ لغة غير الإنجليزية قد تكون مناسبة

    Listen to the speaker carefully. If you detect a non-English language, respond
    in the language you hear from the speaker. You must respond unmistakably in the
    speaker's language.
    
  • اطلب من النموذج الردّ دائمًا بلغة معيّنة

    RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
    



تحويل الصوت إلى نص للإدخال والإخراج الصوتي

انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة.

كجزء من ردّ النموذج، يمكنك تلقّي نصوص للإدخال الصوتي وردّ النموذج الصوتي. يمكنك ضبط هذه الإعدادات كجزء من إعدادات النموذج.

  • لتحويل الإدخال الصوتي إلى نص، أضِف inputAudioTranscription.

  • لتحويل الردّ الصوتي للنموذج إلى نص، أضِف outputAudioTranscription.

لاحظ ما يلي:

  • يمكنك ضبط النموذج لعرض نصوص لكل من الإدخال والإخراج (كما هو موضّح في المثال التالي)، أو يمكنك ضبطه لعرض أحدهما فقط.

  • يتم بث النصوص مع الصوت، لذا من الأفضل جمعها كما تفعل مع أجزاء النص في كل دور.

  • يتم استنتاج لغة تحويل الصوت إلى نص من الإدخال الصوتي والردّ الصوتي للنموذج.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig()
  )
)

var inputTranscript: String = ""
var outputTranscript: String = ""

do {
  let session = try await liveModel.connect()
  for try await response in session.responses {
    if case let .content(content) = response.payload {
      if let inputText = content.inputAudioTranscription?.text {
        // Handle transcription text of the audio input.
        inputTranscript += inputText
      }

      if let outputText = content.outputAudioTranscription?.text {
        // Handle transcription text of the audio output.
        outputTranscript += outputText
      }

      if content.isTurnComplete {
        // Log the transcripts after the current turn is complete.
        print("Input audio: \(inputTranscript)")
        print("Output audio: \(outputTranscript)")

        // Reset the transcripts for the next turn.
        inputTranscript = ""
        outputTranscript = ""
      }
    }
  }


} catch {
  // Handle error
}

// ...

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        inputAudioTranscription = AudioTranscriptionConfig()
        outputAudioTranscription = AudioTranscriptionConfig()
   }
)

val liveSession = liveModel.connect()

fun handleTranscription(input: Transcription?, output: Transcription?) {
    input?.text?.let { text ->
        // Handle transcription text of the audio input.
        println("Input Transcription: $text")
    }
    output?.text?.let { text ->
        // Handle transcription text of the audio output.
        println("Output Transcription: $text")
    }
}

liveSession.startAudioConversation(null, ::handleTranscription)

// ...

Java


// ...

ExecutorService executor = Executors.newFixedThreadPool(1);

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    new LiveGenerationConfig.Builder()
            .setResponseModality(ResponseModality.AUDIO)
            .setInputAudioTranscription(new AudioTranscriptionConfig())
            .setOutputAudioTranscription(new AudioTranscriptionConfig())
            .build()
    );

LiveModelFutures liveModel = LiveModelFutures.from(lm);
ListenableFuture<LiveSessionFutures> sessionFuture = liveModel.connect();

Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
    @Override
    public void onSuccess(LiveSessionFutures ses) {
        LiveSessionFutures session = ses;
        session.startAudioConversation((Transcription input, Transcription output) -> {
            if (input != null) {
                // Handle transcription text of the audio input.
                System.out.println("Input Transcription: " + input.getText());
            }
            if (output != null) {
                // Handle transcription text of the audio output.
                System.out.println("Output Transcription: " + output.getText());
            }
            return null;
        });
    }

    @Override
    public void onFailure(Throwable t) {
        // Handle exceptions
        t.printStackTrace();
    }
}, executor);

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    inputAudioTranscription: {},
    outputAudioTranscription: {},
  },
});

const liveSession = await liveModel.connect();

liveSession.sendAudioRealtime({ data, mimeType: "audio/pcm" });

const messages = liveSession.receive();
for await (const message of messages) {
  switch (message.type) {
    case 'serverContent':
      if (message.inputTranscription) {
        // Handle transcription text of the audio input.
        console.log(`Input transcription: ${message.inputTranscription.text}`);
      }
      if (message.outputTranscription) {
        // Handle transcription text of the audio output.
        console.log(`Output transcription: ${message.outputTranscription.text}`);
      } else {
      	 // Handle other message types (modelTurn, turnComplete, interruption).
      }
    default:
      // Handle other message types (toolCall, toolCallCancellation).
  }
}

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig(),
  ),
);

final LiveSession _session = await _liveModel.connect();

await for (final response in _session.receive()) {
  if (response.message case LiveServerContent message) {
    if (message.inputTranscription?.text case final inputText?) {
      // Handle transcription text of the audio input.
      print('Input: $inputText');
    }

    if (message.outputTranscription?.text case final outputText?) {
      // Handle transcription text of the audio output.
      print('Output: $outputText');
    }
  }
}

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        inputAudioTranscription: new AudioTranscriptionConfig(),
        outputAudioTranscription: new AudioTranscriptionConfig()
    )
);

try
{
    var session = await liveModel.ConnectAsync();
    var stream = session.ReceiveAsync();
    await foreach (var response in stream) {
        if (response.Message is LiveSessionContent sessionContent) {
            if (!string.IsNullOrEmpty(sessionContent.InputTranscription?.Text)) {
              // handle transcription text of input audio
            }

            if (!string.IsNullOrEmpty(sessionContent.OutputTranscription?.Text)) {
              // handle transcription text of output audio
            }
        }
    }
}
catch (Exception e)
{
    // Handle error
}

// ...



رصد النشاط الصوتي (VAD)

تتيح ميزة "رصد النشاط الصوتي" (VAD) للنموذج التعرّف على وقت تحدّث الشخص. هذا الإجراء ضروري لإنشاء محادثات طبيعية، لأنّه يتيح لك مقاطعة النموذج في أي وقت. يتم تفعيل ميزة VAD تلقائيًا.

يمكنك تخصيص سلوك ميزة "رصد النشاط الصوتي"، بما في ذلك التعامل مع المقاطعات. يمكنك بدلاً من ذلك إيقاف ميزة &quot;رصد النشاط الصوتي&quot; التلقائية للتحكّم يدويًا بشكل كامل في أدوار المحادثة (مثل واجهة الضغط للتحدّث).

ضبط ميزة "رصد النشاط الصوتي" (VAD)

انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة.

يوضّح المثال التالي كيفية تخصيص سلوك ميزة "رصد النشاط الصوتي" من خلال ضبط realtimeInputConfig كجزء من إعدادات النموذج. يمكنك الاطّلاع على الإعدادات المتاحة لهذا الضبط في الجدول أدناه في هذا القسم.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: .low,
        endSensitivity: .low,
        prefixPadding: .milliseconds(20),
        silenceDuration: .milliseconds(500)
      ),
      activityHandling: .interrupt,
      turnCoverage: .onlyActivity
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.builder()
                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setPrefixPaddingMs(20)
                .setSilenceDurationMs(500)
                .build()
            activityHandling = RealtimeInputConfig.ActivityHandling.INTERRUPT
            turnCoverage = RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Configure voice activity detection (VAD), interruption handling, and turn coverage.
                // IMPORTANT: Example values shown here. Make sure to update for your use case.
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.builder()
                                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setPrefixPaddingMs(20)
                                .setSilenceDurationMs(500)
                                .build())
                        .setActivityHandling(RealtimeInputConfig.ActivityHandling.INTERRUPT)
                        .setTurnCoverage(RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY)
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: Sensitivity.low,
        endSensitivity: Sensitivity.low,
        prefixPaddingMS: 20,
        silenceDurationMS: 500,
      ),
      activityHandling: ActivityHandling.interrupt,
      turnCoverage: TurnCoverage.onlyActivity,
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: new ActivityDetectionConfig(
                startSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                endSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                prefixPaddingMS: 20,
                silenceDurationMS: 500
            ),
            activityHandling: RealtimeInputConfig.ActivityHandling.Interrupt,
            turnCoverage: RealtimeInputConfig.TurnCoverage.OnlyActivity
        )
    )
);

إعدادات ضبط VAD المتاحة

الإعداد القيم المسموح بها الوصف
الرصد التلقائي للنشاط (automaticActivityDetection)
startSensitivity
  • LOW (تلقائي)
  • HIGH

يحدّد هذا الإعداد مدى سرعة رصد الخادم لبدء المستخدم الكلام:

  • LOW: أقل حساسية للأصوات الخافتة يساعد ذلك في منع الضوضاء المحيطة من بدء دور في الكلام عن غير قصد.
  • ‫HIGH: أكثر حساسية يساعد ذلك في رصد الكلام الهادئ أو الكلمات المنطوقة بصوت منخفض بسرعة.
endSensitivity
  • LOW (تلقائي)
  • HIGH

يحدّد هذا الإعداد مدى سرعة الخادم في رصد توقّف المستخدم عن الكلام:

  • ‫LOW: أقل حساسية لفترات التوقف المؤقت في نهاية الجملة. يستوعب الخادم الترددات الطبيعية أو الكلمات الأكثر هدوءًا في نهاية الجملة.
  • ‫HIGH: أكثر حساسية ينهي الخادم دور الكلام فورًا عندما تنخفض مستويات الصوت.
prefixPadding المدة بالملي ثانية
(القيمة التلقائية: لا شيء (0 ملي ثانية))

يحدّد هذا الحقل مقدار الصوت الذي يجب تضمينه قبل رصد الكلام.

يضمن هذا المخزن المؤقت "للنظر إلى الوراء" أن يلتقط النموذج بداية الكلام بالكامل، بما في ذلك المقطع الأول الذي غالبًا ما يبدأ قبل تشغيل الكاشف.

  • يمكن أن تؤدي القيمة التلقائية لـ 0 إلى اقتطاع بداية الكلمات.
  • المدة المقترَحة: من 20 إلى 50 ملي ثانية
silenceDuration المدة بالمللي ثانية
(القيمة التلقائية: 800 مللي ثانية تقريبًا)

يحدّد هذا الإعداد مدة انتظار الخادم في حالة الصمت قبل إنهاء دور الكلام. يحدّد هذا الإعداد مدى تسامح النظام مع فترات التوقّف الطبيعية في منتصف الجملة (مثل التفكير أو التنفس أو حدود الجمل).

  • المدة المقترَحة (من 500 إلى 800 ملي ثانية): توفّر توازنًا جيدًا، إذ يتلقّى النموذج مقاطع صوتية كاملة وغنية بالسياق مع الحفاظ على وقت استجابة معقول.
  • منخفضة جدًا (أقل من 200 ملي ثانية): تنهي دور الكلام أثناء فترات التوقف الطبيعية، ما يؤدي إلى تقسيم العبارات إلى أجزاء صغيرة يمكن أن تؤدي إلى تدهور جودة تحويل الصوت إلى نص والاستجابة.
  • مرتفع جدًا (أكثر من 2000 ملي ثانية): يضيف تأخيرًا ملحوظًا قبل أن يبدأ النموذج في الردّ.
سلوك المقاطعة (activityHandling)
activityHandling
  • INTERRUPT (تلقائي)
  • NO_INTERRUPT

تحدّد هذه المَعلمة كيفية تعامل الخادم مع نشاط المستخدم الوارد أثناء إنشاء الردّ:

  • INTERRUPT: تلغي هذه السمة على الفور الردّ الحالي للنموذج عند رصد نشاط المستخدم.
  • ‫NO_INTERRUPT: يواصل إنشاء الردّ بدون انقطاع.
تغطية سياق المنعطفات (turnCoverage)
turnCoverage
  • ONLY_ACTIVITY (تلقائي)
  • ALL_INPUT
  • AUDIO_ACTIVITY_AND_ALL_VIDEO

تحدّد هذه السمة الإدخال المضمّن في سياق دور المحادثة:

  • ONLY_ACTIVITY: يستبعد هذا الخيار المقاطع الصامتة، ويحتفظ فقط بالمقاطع التي تم رصد نشاط المستخدم فيها.
  • ALL_INPUT: يحتفظ بجميع الإدخالات التي يتم بثها، بما في ذلك الصمت.
  • ‫AUDIO_ACTIVITY_AND_ALL_VIDEO: تحتفظ هذه القيمة بجميع إطارات الفيديو التي تم بثّها، ولكنّها تحتفظ فقط بالمقاطع الصوتية التي تم رصد نشاط فيها.

التعامل مع المقاطعات

إذا رصد الخادم كلامًا واردًا من المستخدم أثناء إنشاء النموذج لردّ، وتم ضبط activityHandling على INTERRUPT (الإعداد التلقائي)، يُرجى الانتباه إلى السلوكيات التالية:

  • إلغاء عملية الإنشاء: يوقف النموذج ردّه على الفور ويتجاهل أي طلبات معلّقة للأدوات.

  • اقتطاع سجلّ الجلسة: يتم الاحتفاظ فقط بالمحتوى الذي تم إرساله إلى تطبيقك قبل الانقطاع في نافذة سياق الجلسة.

  • يتم إرسال إشارة مقاطعة: يرسل الخادم رسالة استجابة تشير إلى أنّه تمّت مقاطعة عملية الإنشاء (مثل wasInterrupted في Swift أو interrupted في Kotlin وJava وWeb وFlutter وUnity).

إيقاف ميزة "رصد النشاط الصوتي" (VAD) التلقائية

للتحكّم يدويًا بشكل كامل في أدوار المحادثة (مثل واجهة الضغط للتحدّث)، يمكنك إيقاف ميزة "رصد النشاط الصوتي" (VAD) التلقائية بدلاً من ضبط مَعلمات الحساسية.

عند إيقاف ميزة "الرصد التلقائي"، لن يرصد الخادم الكلام تلقائيًا أو يقدّم ردودًا استنادًا إلى الصمت. بدلاً من ذلك، يجب أن يشير تطبيقك يدويًا إلى حدود نشاط المستخدم أثناء الجلسة النشطة.

1. إيقاف ميزة "رصد النشاط الصوتي" التلقائية في إعدادات النموذج

انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: .disabled()
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.disabled()
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Disable automatic voice activity detection (VAD).
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.disabled())
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig.disabled(),
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: ActivityDetectionConfig.Disabled()
        )
    )
);

2. الإشارة يدويًا إلى حدود نشاط المستخدم

في حال إيقاف ميزة VAD، يجب أن يحدّد تطبيقك يدويًا حدود كل دور في نشاط المستخدم:

  1. الإشارة إلى بدء النشاط: يمكنك استدعاء sendStartActivityRealtime قبل إرسال البيانات الصوتية (على سبيل المثال، عندما يضغط المستخدم على زر "اضغط للتحدّث").

  2. إدخال المستخدم للبث: يمكنك بث بيانات الصوت (أو الفيديو) باستمرار باستخدام sendAudioRealtime.

  3. الإشارة إلى انتهاء النشاط: يمكنك استدعاء sendStopActivityRealtime عندما ينتهي المستخدم من التحدّث (على سبيل المثال، عندما يحرّر المستخدم زر الضغط للتحدّث). يشير ذلك إلى نهاية دور المستخدم ويؤدي إلى بدء استجابة النموذج.

Swift

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime()

Kotlin

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime()

Java

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime();

Web

Not yet supported for Web apps - check back soon!

Dart

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime();

Unity

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.SendStartActivityRealtimeAsync();

// Stream user audio data while the user speaks.
await session.SendAudioRealtimeAsync(audio: audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.SendStopActivityRealtimeAsync();



إدارة الجلسات

تعرَّف على المواضيع التالية ذات الصلة بالجلسات: