Multimodal Live API

Multimodal Live API, Gemini ile düşük gecikmeli iki yönlü ses ve görüntü etkileşimlerini sağlar. Multimodal Live API'yi kullanarak son kullanıcılara doğal, insan benzeri sesli sohbet deneyimi ve sesli komutları kullanarak modelin yanıtlarını kesintiye uğratma olanağı sunabilirsiniz. Model, metin, ses ve video girişini işleyebilir ve metin ile ses çıkışı sağlayabilir.

İşlemler

Çoklu modlu canlı API aşağıdaki temel özellikleri içerir:

  • Çok modlu: Model görebilir, duyabilir ve konuşabilir.
  • Düşük gecikmeli anlık etkileşim: Hızlı yanıtlar sağlar.
  • Oturum belleği: Model, tek bir oturumdaki tüm etkileşimlerin belleğini saklayarak daha önce duyulan veya görülen bilgileri hatırlar.
  • İşlev çağırma, kod yürütme ve Arama'yı araç olarak kullanma desteği: Harici hizmetler ve veri kaynaklarıyla entegrasyonu sağlar.
  • Otomatik ses etkinliği algılama (VAD): Model, kullanıcının ne zaman konuşmaya başladığını ve ne zaman konuşmayı bıraktığını doğru bir şekilde algılayabilir. Bu sayede doğal ve sohbet benzeri etkileşimler elde edilebilir. Ayrıca kullanıcılar istedikleri zaman modeli kesintiye uğratabilir.

Çoklu Formatlı Canlı API'yi Google AI Studio'da deneyebilirsiniz.

Başlayın

Multimodal Live API, WebSockets kullanan durum bilgisine sahip bir API'dir.

Bu bölümde, Python 3.9 ve sonraki sürümlerde metinden metne dönüştürme işlemi için Multimodal Live API'nin nasıl kullanılacağıyla ilgili bir örnek gösterilmektedir.

Gemini API kitaplığını yükleme

google-genai paketini yüklemek için aşağıdaki pip komutunu kullanın:

!pip3 install google-genai

Bağımlılıkları içe aktarma

Bağımlılıkları içe aktarmak için:

from google import genai

Kısa mesaj gönderme ve alma

import asyncio
from google import genai

client = genai.Client(api_key="GEMINI_API_KEY", http_options={'api_version': 'v1alpha'})
model_id = "gemini-2.0-flash-exp"
config = {"response_modalities": ["TEXT"]}

async def main():
    async with client.aio.live.connect(model=model_id, config=config) as session:
        while True:
            message = input("User> ")
            if message.lower() == "exit":
                break
            await session.send(message, end_of_turn=True)

            async for response in session.receive():
                if response.text is None:
                    continue
                print(response.text, end="")

if __name__ == "__main__":
    asyncio.run(main())

Entegrasyon kılavuzu

Bu bölümde, entegrasyon işleminin Multimodal Live API ile nasıl çalıştığı açıklanmaktadır.

Oturum sayısı

Oturum, istemci ile Gemini sunucusu arasındaki tek bir WebSocket bağlantısını temsil eder.

Bir istemci yeni bir bağlantı başlattıktan sonra oturum, sunucuyla mesaj alışverişinde bulunarak şunları yapabilir:

  • Gemini sunucusuna metin, ses veya video gönderme.
  • Gemini sunucusundan ses, metin veya işlev çağrısı yanıtları alın.

Oturum yapılandırması, bağlantıdan sonraki ilk mesajda gönderilir. Oturum yapılandırması; modeli, oluşturma parametrelerini, sistem talimatlarını ve araçları içerir.

Aşağıdaki örnek yapılandırmaya bakın:

{​​
  "model": string,
  "generation_config": {
    "candidate_count": integer,
    "max_output_tokens": integer,
    "temperature": number,
    "top_p": number,
    "top_k": integer,
    "presence_penalty": number,
    "frequency_penalty": number,
    "response_modalities": string,
    "speech_config":object
  },

  "system_instruction": "",
  "tools":[]
}

Daha fazla bilgi için BidiGenerateContentSetup konusuna bakın.

Mesaj gönderin

Mesajlar, WebSocket bağlantısı üzerinden paylaşılan JSON biçimli dizelerdir.

İstemcinin mesaj gönderebilmesi için açık bir WebSocket bağlantısı üzerinden JSON biçimli bir dizeyle desteklenen bir istemci mesajı göndermesi gerekir.

Desteklenen istemci mesajları

Desteklenen istemci mesajlarını aşağıdaki tabloda görebilirsiniz:

Mesaj Açıklama
BidiGenerateContentSetup İlk mesajda gönderilecek oturum yapılandırması
BidiGenerateContentClientContent İstemciden gönderilen mevcut sohbetin artımlı içerik güncellemesi
BidiGenerateContentRealtimeInput Gerçek zamanlı ses veya video girişi
BidiGenerateContentToolResponse Sunucudan alınan ToolCallMessage yanıtı

İleti alma

Gemini'den mesaj almak için WebSocket "message" etkinliğini dinleyin ve ardından sonucu, desteklenen sunucu mesajlarının tanımına göre ayrıştırın.

Aşağıdakilere bakın:

ws.addEventListener("message", async (evt) => {
  if (evt.data instanceof Blob) {
    // Process the received data (audio, video, etc.)
  } else {
    // Process JSON response
  }
});

Desteklenen sunucu mesajları

Desteklenen sunucu mesajlarını aşağıdaki tabloda görebilirsiniz:

Mesaj Açıklama
BidiGenerateContentSetupComplete Kurulum tamamlandığında istemciden gönderilen bir BidiGenerateContentSetup mesajı
BidiGenerateContentServerContent Müşteri mesajına yanıt olarak model tarafından oluşturulan içerik
BidiGenerateContentToolCall İstemcinin işlev çağrılarını çalıştırmasını ve yanıtları eşleşen kimliklerle döndürmesini isteme
BidiGenerateContentToolCallCancellation Kullanıcı model çıkışını kesintiye uğrattığı için bir işlev çağrısı iptal edildiğinde gönderilir

Artımlı içerik güncellemeleri

Metin girişi göndermek, oturum bağlamını oluşturmak veya geri yüklemek için artımlı güncellemeleri kullanın. Kısa bağlamlar için, etkinliklerin tam sırasını temsil etmek üzere adım adım etkileşimler gönderebilirsiniz. Daha uzun bağlamlarda, bağlam penceresini takip eden etkileşimler için boşaltmak amacıyla tek bir mesaj özeti sağlamanız önerilir.

Aşağıdaki örnek bağlam mesajına bakın:

{
  "client_content": {
    "turns": [
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"user"
      },
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"model"
      }
    ],
    "turn_complete": true
  }
}

İçerik bölümleri functionResponse türünde olsa da model tarafından gönderilen işlev çağrılarına yanıt vermek için BidiGenerateContentClientContent kullanılmamalıdır. Bunun yerine BidiGenerateContentToolResponse kullanılmalıdır. BidiGenerateContentClientContent yalnızca önceki bağlamı belirlemek veya görüşmeye metin girişi sağlamak için kullanılmalıdır.

Canlı ses ve video çalma

İşlev çağırma

Tüm işlevler, BidiGenerateContentSetup mesajının bir parçası olarak araç tanımları gönderilerek oturumun başında tanımlanmalıdır.

İşlev çağırma hakkında daha fazla bilgi edinmek için İşlev çağırma eğitimi başlıklı makaleyi inceleyin.

Model, tek bir istemden birden fazla işlev çağrısı ve çıktılarını zincirlemek için gereken kodu oluşturabilir. Bu kod, korumalı bir ortamda yürütülerek BidiGenerateContentToolCall iletileri oluşturur. Yürütme, her işlev çağrısının sonuçları hazır olana kadar duraklatılır. Bu, sıralı işleme sağlar.

Müşteri BidiGenerateContentToolResponse ile yanıt vermelidir.

Ses girişleri ve ses çıkışları, modelin işlev çağrısını kullanma özelliğini olumsuz etkiler.

Ses biçimleri

Multimodal Live API aşağıdaki ses biçimlerini destekler:

  • Giriş ses biçimi: 16 kHz little-endian'da ham 16 bit PCM ses
  • Çıkış ses biçimi: 24 kHz little-endian'da ham 16 bit PCM ses

Sistem talimatları

Modelin çıkışını daha iyi kontrol etmek ve sesli yanıtların üslubunu ve duygusunu belirtmek için sistem talimatları sağlayabilirsiniz.

Sistem talimatları, etkileşim başlamadan önce istem üzerine eklenir ve oturum boyunca geçerli kalır.

Sistem talimatları yalnızca bir oturumun başında, ilk bağlantıdan hemen sonra ayarlanabilir. Oturum sırasında modele daha fazla giriş sağlamak için artımlı içerik güncellemeleri kullanın.

Kesintiler

Kullanıcılar istedikleri zaman modelin çıktısını kesintiye uğratabilir. Ses etkinliği algılama (VAD) bir kesinti algıladığında, devam eden oluşturma işlemi iptal edilir ve atılır. Oturum geçmişinde yalnızca istemciye gönderilmiş olan bilgiler saklanır. Ardından sunucu, kesintiyi bildirmek için bir BidiGenerateContentServerContent mesajı gönderir.

Ayrıca Gemini sunucusu bekleyen tüm işlev çağrılarını atar ve iptal edilen çağrıların kimliklerini içeren bir BidiGenerateContentServerContent mesajı gönderir.

Sesler

Multimodal Live API şu sesleri destekler: Aoede, Charon, Fenrir, Kore ve Puck.

Ses belirtmek için oturum yapılandırmanızın bir parçası olarak speech_config nesnesinde voice_name öğesini ayarlayın.

speech_config nesnesinin aşağıdaki JSON gösterimine bakın:

{
  "voice_config": {
    "prebuilt_voice_config ": {
      "voice_name": <var>VOICE_NAME</var>
    }
  }
}

Sınırlamalar

Projenizi planlarken Multimodal Live API ve Gemini 2.0'ın aşağıdaki sınırlamalarını göz önünde bulundurun.

İstemci kimlik doğrulaması

Multimodal Live API yalnızca sunucudan sunucuya kimlik doğrulama sağlar ve doğrudan istemci kullanımı için önerilmez. Multimodal Live API ile güvenli kimlik doğrulama için istemci girişi, bir ara uygulama sunucusu üzerinden yönlendirilmelidir.

Web ve mobil uygulamalar için Daily'deki iş ortaklarımızın entegrasyonunu kullanmanızı öneririz.

Görüşme geçmişi

Model, oturum içi etkileşimleri takip eder ancak ileti dizisi geçmişi depolanmaz. Bir oturum sona erdiğinde ilgili bağlam silinir.

Önceki bir oturumu geri yüklemek veya modele kullanıcı etkileşimlerinin geçmiş bağlamını sağlamak için uygulamanın kendi sohbet günlüğünü tutması ve bu bilgileri yeni bir oturumun başında göndermek için bir BidiGenerateContentClientContent mesajı kullanması gerekir.

Maksimum oturum süresi

Oturum süresi, ses için en fazla 15 dakika veya ses ve video için en fazla 2 dakika ile sınırlıdır. Oturum süresi sınırı aştığında bağlantı sonlandırılır.

Model, bağlam boyutuyla da sınırlıdır. Video ve ses akışlarının yanı sıra büyük miktarda içerik göndermek, oturumun daha erken sonlandırılmasına neden olabilir.

Ses etkinliği algılama (VAD)

Model, sürekli bir ses girişi akışında otomatik olarak ses etkinliği algılama (VAD) işlemi gerçekleştirir. VAD her zaman etkindir ve parametreleri yapılandırılamaz.

Jeton sayısı

Jeton sayısı desteklenmez.

Hız sınırları

Aşağıdaki hız sınırları geçerlidir:

  • API anahtarı başına 3 eşzamanlı oturum
  • Dakikada 4 milyon jeton

Mesajlar ve etkinlikler

BidiGenerateContentClientContent

İstemciden gönderilen mevcut sohbetin artımlı güncellemesi. Buradaki tüm içerikler koşulsuz olarak ileti dizisine eklenir ve içerik oluşturmak için modele verilen istemin bir parçası olarak kullanılır.

Buradaki bir mesaj, mevcut model oluşturma işlemini kesintiye uğratır.

Alanlar
turns[]

Content

İsteğe bağlı. Modelle olan mevcut görüşmeye eklenen içerik.

Tek turlu sorgular için bu tek bir örnektir. Birden fazla dönüş içeren sorgular için bu, sohbet geçmişini ve son isteği içeren yinelenen bir alandır.

turn_complete

bool

İsteğe bağlı. Doğru ise sunucu içeriği oluşturma işleminin, şu anda birikmiş istemle başlaması gerektiğini belirtir. Aksi takdirde sunucu, oluşturma işlemini başlatmadan önce ek mesaj bekler.

BidiGenerateContentRealtimeInput

Gerçek zamanlı olarak gönderilen kullanıcı girişi.

Bu, BidiGenerateContentClientContent ile birkaç açıdan farklıdır:

  • Model oluşturma işlemine kesinti olmadan sürekli olarak gönderilebilir.
  • BidiGenerateContentClientContent ve BidiGenerateContentRealtimeInput arasında ardışık olarak yerleştirilmiş verileri karıştırmak gerekirse sunucu en iyi yanıt için optimizasyon yapmaya çalışır ancak bu konuda garanti verilmez.
  • Sıranın sonu açıkça belirtilmez, bunun yerine kullanıcı etkinliğinden (ör. konuşmanın sonu) türetilir.
  • Dönüş bitmeden önce bile veriler, modelden gelen yanıtın hızlı bir şekilde başlatılması için optimize edilmek üzere artımlı olarak işlenir.
  • Her zaman gerçek zamanlı olarak gönderilen doğrudan kullanıcı girişidir. Kesintisiz olarak sürekli gönderilebilir. Model, kullanıcı konuşmasının başlangıcını ve sonunu otomatik olarak algılar ve yanıtın aktarılmasını buna göre başlatır veya sonlandırır. Veriler, geldikçe artımlı olarak işlenir ve gecikme en aza indirilir.
Alanlar
media_chunks[]

Blob

İsteğe bağlı. Medya girişi için satır içi bayt verileri.

BidiGenerateContentServerContent

İstemci mesajlarına yanıt olarak model tarafından oluşturulan artımlı sunucu güncellemesi.

İçerik, gerçek zamanlı olarak değil, mümkün olduğunca hızlı bir şekilde oluşturulur. İstemciler, içeriği arabelleğe alıp gerçek zamanlı olarak oynatmayı seçebilir.

Alanlar
turn_complete

bool

Yalnızca çıkış. True (Doğru) ise modelin oluşturulmasının tamamlandığını gösterir. Oluşturma işlemi yalnızca ek istemci mesajlarına yanıt olarak başlar. content ile birlikte ayarlanabilir. Bu durumda, content'ün sıranın sonundaki öğe olduğunu belirtir.

interrupted

bool

Yalnızca çıkış. Doğru ise bir istemci mesajının mevcut model oluşturma işlemini kesintiye uğrattığını gösterir. İstemci içeriği gerçek zamanlı olarak oynatıyorsa bu, oynatmayı durdurup mevcut oynatma sırasını boşaltmak için iyi bir sinyaldir.

grounding_metadata

GroundingMetadata

Yalnızca çıkış. Oluşturulan içerik için temel meta veriler.

model_turn

Content

Yalnızca çıkış. Modelin, kullanıcıyla devam eden görüşmenin bir parçası olarak oluşturduğu içerik.

BidiGenerateContentSetup

İlk ve tek istemci mesajında gönderilecek mesaj. Akış oturumu boyunca geçerli olacak yapılandırmayı içerir.

Müşteriler ek mesaj göndermeden önce bir BidiGenerateContentSetupComplete mesajı beklemelidir.

Alanlar
model

string

Zorunlu. Modelin kaynak adı. Bu, modelin kullanacağı bir kimlik görevi görür.

Biçim: models/{model}

generation_config

GenerationConfig

İsteğe bağlı. Oluşturma yapılandırması.

Aşağıdaki alanlar desteklenmez:

  • response_logprobs
  • response_mime_type
  • logprobs
  • response_schema
  • stop_sequence
  • routing_config
  • audio_timestamp
system_instruction

Content

İsteğe bağlı. Kullanıcı, model için sistem talimatları sağladı.

Not: Bölümlerde yalnızca metin kullanılmalıdır ve her bölümdeki içerik ayrı bir paragrafta yer alır.

tools[]

Tool

İsteğe bağlı. Modelin sonraki yanıtı oluşturmak için kullanabileceği Tools öğelerinin listesi.

Tool, sistemin modelin bilgisi ve kapsamı dışında bir işlem veya işlem grubu gerçekleştirmek için harici sistemlerle etkileşim kurmasını sağlayan bir kod parçasıdır.

BidiGenerateContentSetupComplete

Bu türde alan yoktur.

İstemciden gelen bir BidiGenerateContentSetup mesajına yanıt olarak gönderilir.

BidiGenerateContentToolCall

İstemcinin function_calls'yi yürütmesini ve eşleşen id'larla yanıtları döndürmesini isteyin.

Alanlar
function_calls[]

FunctionCall

Yalnızca çıkış. Yürütülecek işlev çağrısı.

BidiGenerateContentToolCallCancellation

Belirtilen id'ler içeren daha önce verilen bir ToolCallMessage'nin yürütülmemesi ve iptal edilmesi gerektiğine dair müşteriye gönderilen bildirim. Bu araç çağrılarının yan etkileri varsa istemciler araç çağrılarını geri almaya çalışabilir. Bu mesaj yalnızca istemcilerin sunucu sırasını kesintiye uğrattığı durumlarda gösterilir.

Alanlar
ids[]

string

Yalnızca çıkış. İptal edilecek araç çağrılarının kimlikleri.

BidiGenerateContentToolResponse

Sunucudan alınan bir ToolCall için istemci tarafından oluşturulan yanıt. Ayrı FunctionResponse nesneleri, id alanı tarafından ilgili FunctionCall nesneleriyle eşleştirilir.

Tek değerli ve sunucudan aktarılan GenerateContent API'lerinde işlev çağrısının Content parçalarının değiştirilmesiyle gerçekleştiğini, çift yönlü GenerateContent API'lerinde ise işlev çağrısının bu özel mesaj grubu üzerinden gerçekleştiğini unutmayın.

Alanlar
function_responses[]

FunctionResponse

İsteğe bağlı. İşlev çağrılarına verilen yanıt.

Yaygın türler hakkında daha fazla bilgi

Sık kullanılan API kaynak türleri Blob, Content, FunctionCall, FunctionResponse, GenerationConfig, GroundingMetadata ve Tool hakkında daha fazla bilgi edinmek için İçerik oluşturma başlıklı makaleyi inceleyin.