Live API memungkinkan interaksi suara dan video dua arah dengan latensi rendah bersama Gemini. Gunakan Live API untuk memberikan percakapan suara yang alami dan seperti manusia kepada pengguna akhir, termasuk kemampuan untuk menyela respons model dengan perintah suara.
Dokumen ini membahas dasar-dasar penggunaan Live API, termasuk kemampuannya, contoh untuk memulai, dan contoh kode kasus penggunaan dasar. Jika Anda mencari informasi tentang cara memulai percakapan interaktif menggunakan Live API, lihat Percakapan interaktif dengan Live API. Jika Anda mencari informasi tentang alat yang dapat digunakan Live API, lihat Alat bawaan.
Model yang didukung
Live API didukung untuk digunakan di Google Gen AI SDK dan menggunakan Vertex AI Studio. Beberapa fitur (seperti input dan output teks) hanya tersedia menggunakan Gen AI SDK.
Anda dapat menggunakan Live API dengan model berikut:
Versi model | Tingkat ketersediaan |
---|---|
gemini-live-2.5-flash |
GA Pribadi* |
gemini-live-2.5-flash-preview-native-audio |
Pratinjau publik |
* Hubungi perwakilan tim akun Google Anda untuk meminta akses.
Untuk mengetahui informasi selengkapnya, termasuk spesifikasi dan batasan teknis, lihat panduan referensi Live API.
Contoh pemicu
Anda dapat mulai menggunakan Live API dengan salah satu contoh kami:
Notebook Jupyter:
- Mulai Menggunakan Live API di Vertex AI menggunakan WebSockets
- Mulai Menggunakan Live API menggunakan Google Gen AI SDK
Aplikasi dan panduan demo:
Kemampuan Live API
- Pemahaman multimodal real-time: Lakukan percakapan dengan Gemini tentang apa yang dilihatnya di feed video atau melalui berbagi layar, menggunakan dukungan bawaan untuk streaming audio dan video.
- Penggunaan alat bawaan: Integrasikan alat seperti panggilan fungsi dan Perujukan dengan Google Penelusuran ke dalam percakapan Anda dengan lancar untuk interaksi yang lebih praktis dan dinamis.
- Interaksi latensi rendah: Lakukan interaksi latensi rendah yang mirip dengan interaksi manusia dengan Gemini.
- Dukungan multibahasa: Berbicara dalam 24 bahasa yang didukung.
- (Khusus versi GA) Dukungan untuk Throughput yang Disediakan: Gunakan langganan biaya tetap dan jangka waktu tetap yang tersedia dalam beberapa jangka waktu yang mencadangkan throughput untuk model AI generatif yang didukung di Vertex AI, termasuk Live API.
Gemini 2.5 Flash dengan Live API juga menyertakan audio asli sebagai penawaran pratinjau publik. Audio native memperkenalkan:
- Dialog Afektif: API Live memahami dan merespons intonasi suara pengguna. Kata-kata yang sama yang diucapkan dengan cara yang berbeda dapat menghasilkan percakapan yang sangat berbeda dan lebih bernuansa.
- Audio Proaktif dan kepekaan terhadap konteks: Live API secara cerdas mengabaikan percakapan di sekitar dan audio lain yang tidak relevan, memahami kapan harus mendengarkan dan kapan harus tetap diam.
Untuk mengetahui informasi selengkapnya tentang audio native, lihat Alat bawaan.
Format audio yang didukung
Live API mendukung format audio berikut:
- Input audio: Audio PCM 16-bit mentah pada 16 kHz, little-endian
- Output audio: Audio PCM 16-bit mentah pada 24 kHz, little-endian
Mendapatkan respons teks dari input audio
Anda dapat mengirim audio dan menerima respons teks dengan mengonversi audio ke format PCM 16-bit, 16 kHz, mono. Contoh berikut membaca file WAV dan mengirimkannya dalam format yang benar:
Gen AI SDK untuk Python
# Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav # Install helpers for converting files: pip install librosa soundfile import asyncio import io from pathlib import Path from google import genai from google.genai import types import soundfile as sf import librosa client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) model = "gemini-live-2.5-flash" config = {"response_modalities": ["TEXT"]} async def main(): async with client.aio.live.connect(model=model, config=config) as session: buffer = io.BytesIO() y, sr = librosa.load("sample.wav", sr=16000) sf.write(buffer, y, sr, format="RAW", subtype="PCM_16") buffer.seek(0) audio_bytes = buffer.read() # If already in correct format, you can use this: # audio_bytes = Path("sample.pcm").read_bytes() await session.send_realtime_input( audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000") ) async for response in session.receive(): if response.text is not None: print(response.text) if __name__ == "__main__": asyncio.run(main())
Mendapatkan respons suara dari input teks
Gunakan contoh ini untuk mengirim input teks dan menerima respons ucapan yang disintesis:
Gen AI SDK untuk Python
import asyncio import numpy as np from IPython.display import Audio, Markdown, display from google import genai from google.genai.types import ( Content, LiveConnectConfig, HttpOptions, Modality, Part, SpeechConfig, VoiceConfig, PrebuiltVoiceConfig, ) client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) voice_name = "Aoede" config = LiveConnectConfig( response_modalities=["AUDIO"], speech_config=SpeechConfig( voice_config=VoiceConfig( prebuilt_voice_config=PrebuiltVoiceConfig( voice_name=voice_name, ) ), ), ) async with client.aio.live.connect( model="gemini-live-2.5-flash", config=config, ) as session: text_input = "Hello? Gemini are you there?" display(Markdown(f"**Input:** {text_input}")) await session.send_client_content( turns=Content(role="user", parts=[Part(text=text_input)])) audio_data = [] async for message in session.receive(): if ( message.server_content.model_turn and message.server_content.model_turn.parts ): for part in message.server_content.model_turn.parts: if part.inline_data: audio_data.append( np.frombuffer(part.inline_data.data, dtype=np.int16) ) if audio_data: display(Audio(np.concatenate(audio_data), rate=24000, autoplay=True))
Untuk contoh pengiriman teks lainnya, lihat panduan Memulai kami.
Mentranskripsikan audio
Live API dapat mentranskripsikan audio input dan output. Gunakan contoh berikut untuk mengaktifkan transkripsi:
Gen AI SDK untuk Python
import asyncio from google import genai from google.genai import types client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) model = "gemini-live-2.5-flash" config = { "response_modalities": ["AUDIO"], "input_audio_transcription": {}, "output_audio_transcription": {} } async def main(): async with client.aio.live.connect(model=model, config=config) as session: message = "Hello? Gemini are you there?" await session.send_client_content( turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True ) async for response in session.receive(): if response.server_content.model_turn: print("Model turn:", response.server_content.model_turn) if response.server_content.input_transcription: print("Input transcript:", response.server_content.input_transcription.text) if response.server_content.output_transcription: print("Output transcript:", response.server_content.output_transcription.text) if __name__ == "__main__": asyncio.run(main())
WebSockets
# Set model generation_config CONFIG = { 'response_modalities': ['AUDIO'], } headers = { "Content-Type": "application/json", "Authorization": f"Bearer {bearer_token[0]}", } # Connect to the server async with connect(SERVICE_URL, additional_headers=headers) as ws: # Setup the session await ws.send( json.dumps( { "setup": { "model": "gemini-2.0-flash-live-preview-04-09", "generation_config": CONFIG, 'input_audio_transcription': {}, 'output_audio_transcription': {} } } ) ) # Receive setup response raw_response = await ws.recv(decode=False) setup_response = json.loads(raw_response.decode("ascii")) # Send text message text_input = "Hello? Gemini are you there?" display(Markdown(f"**Input:** {text_input}")) msg = { "client_content": { "turns": [{"role": "user", "parts": [{"text": text_input}]}], "turn_complete": True, } } await ws.send(json.dumps(msg)) responses = [] input_transcriptions = [] output_transcriptions = [] # Receive chucks of server response async for raw_response in ws: response = json.loads(raw_response.decode()) server_content = response.pop("serverContent", None) if server_content is None: break if (input_transcription := server_content.get("inputTranscription")) is not None: if (text := input_transcription.get("text")) is not None: input_transcriptions.append(text) if (output_transcription := server_content.get("outputTranscription")) is not None: if (text := output_transcription.get("text")) is not None: output_transcriptions.append(text) model_turn = server_content.pop("modelTurn", None) if model_turn is not None: parts = model_turn.pop("parts", None) if parts is not None: for part in parts: pcm_data = base64.b64decode(part["inlineData"]["data"]) responses.append(np.frombuffer(pcm_data, dtype=np.int16)) # End of turn turn_complete = server_content.pop("turnComplete", None) if turn_complete: break if input_transcriptions: display(Markdown(f"**Input transcription >** {''.join(input_transcriptions)}")) if responses: # Play the returned audio message display(Audio(np.concatenate(responses), rate=24000, autoplay=True)) if output_transcriptions: display(Markdown(f"**Output transcription >** {''.join(output_transcriptions)}"))
Informasi selengkapnya
Untuk mengetahui informasi selengkapnya tentang penggunaan Live API, lihat: