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[] |
İ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_ |
İ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
veBidiGenerateContentRealtimeInput
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_ |
İ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_ |
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. |
interrupted |
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_ |
Yalnızca çıkış. Oluşturulan içerik için temel meta veriler. |
model_ |
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 |
Zorunlu. Modelin kaynak adı. Bu, modelin kullanacağı bir kimlik görevi görür. Biçim: |
generation_ |
İsteğe bağlı. Oluşturma yapılandırması. Aşağıdaki alanlar desteklenmez:
|
system_ |
İ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[] |
İsteğe bağlı. Modelin sonraki yanıtı oluşturmak için kullanabileceği
|
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_ |
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[] |
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_ |
İ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.