Untuk mendapatkan hasil yang lebih baik dari Gemini Live API, fokuslah pada praktik terbaik berikut:
Merancang petunjuk sistem yang jelas
Untuk mendapatkan performa terbaik dari Gemini Live API, sebaiknya miliki serangkaian petunjuk sistem (SI) yang ditentukan dengan jelas yang menentukan persona agen, aturan percakapan, dan pembatasan, dalam urutan ini.
Untuk hasil terbaik, pisahkan setiap agen ke dalam SI yang berbeda.
Tentukan persona agen: Berikan detail tentang nama, peran, dan karakteristik pilihan agen. Jika Anda ingin menentukan aksen, pastikan untuk menentukan juga bahasa output yang diinginkan (seperti aksen British untuk penutur bahasa Inggris).
Tentukan aturan percakapan: Masukkan aturan ini dalam urutan yang Anda harapkan untuk diikuti model. Membatasi elemen percakapan satu kali dan loop percakapan. Contoh:
- Elemen sekali pakai: Kumpulkan detail pelanggan satu kali (seperti nama, lokasi, nomor kartu loyalitas).
- Loop percakapan: Pengguna dapat mendiskusikan rekomendasi, harga, pengembalian, dan pengiriman, serta dapat berpindah dari satu topik ke topik lainnya. Beri tahu model bahwa tidak masalah untuk terlibat dalam loop percakapan ini selama yang diinginkan pengguna.
Tentukan panggilan alat dalam alur dalam kalimat yang berbeda: Misalnya, jika langkah satu kali untuk mengumpulkan detail pelanggan memerlukan pemanggilan
get_user_infofungsi, Anda dapat mengatakan: Langkah pertama Anda adalah mengumpulkan informasi pengguna. Pertama, minta pengguna untuk memberikan nama, lokasi, dan nomor kartu loyalitasnya. Kemudian panggilget_user_infodengan detail ini.Tambahkan pembatasan yang diperlukan: Berikan pembatasan percakapan umum yang tidak Anda inginkan untuk dilakukan oleh model. Jangan ragu untuk memberikan contoh spesifik jika x terjadi, Anda ingin model melakukan y. Jika Anda masih belum mendapatkan tingkat presisi yang diinginkan, gunakan kata pasti untuk memandu model agar presisi.
Menentukan alat secara tepat
Saat menggunakan alat dengan Gemini Live API, berikan definisi alat yang spesifik. Pastikan untuk memberi tahu Gemini kondisi saat panggilan alat harus dipanggil. Untuk mengetahui detail selengkapnya, lihat Definisi alat di bagian contoh.
Menyusun perintah yang efektif
- Gunakan perintah yang jelas: Berikan contoh tentang apa yang boleh dan tidak boleh dilakukan model dalam perintah, dan coba batasi perintah menjadi satu perintah per persona atau peran dalam satu waktu. Daripada menggunakan perintah multi-halaman yang panjang, sebaiknya gunakan penggabungan perintah. Model ini berfungsi paling baik pada tugas dengan panggilan fungsi tunggal.
- Memberikan perintah dan informasi awal: Gemini Live API mengharapkan input pengguna sebelum memberikan respons. Agar Gemini Live API memulai percakapan, sertakan perintah yang memintanya untuk menyapa pengguna atau memulai percakapan. Sertakan informasi tentang pengguna agar Gemini Live API mempersonalisasi ucapan tersebut.
Melanjutkan sesi
- Menggunakan kelanjutan sesi transparan:
Konfigurasi koneksi dengan
SessionResumptionConfig(transparent=True)digenai.types.LiveConnectConfig. Hal ini menandakan bahwa klien bermaksud menangani kelanjutan sesi dengan lancar, sehingga memungkinkan fitur seperti memutar ulang pesan yang belum digunakan saat terhubung kembali.
from google.genai import types
session_handle: str | None = None
live_config = types.LiveConnectConfig(
session_resumption=types.SessionResumptionConfig(
handle=session_handle,
transparent=True,
),
)
Mempertahankan dan memperbarui handle sesi: Mendengarkan pesan
session_resumption_updatedari server. Jikaresumablebernilai benar dannew_handlediberikan, simpan handle ini. Handle ini penting untuk menyambungkan kembali ke status sesi yang sama jika terjadi pemutusan koneksi.Buat buffer pesan yang dikirim dan hapus pesan yang telah dikonfirmasi: Untuk memastikan tidak ada pesan klien yang hilang selama koneksi terputus, pertahankan buffer pesan yang dikirim ke Gemini Live API. Pesan
session_resumption_updateakan berisilast_consumed_client_message_indexsaat pelanjutan sesi transparan diaktifkan, yang menunjukkan pesan terakhir yang diproses oleh server. Gunakan indeks ini untuk menghapus pesan yang telah dikonfirmasi dari buffer.Menangani pemutusan sambungan dengan lancar:
- Sinyal GoAway: Server mengirim pesan
go_awaysebelum koneksi terputus seperti yang diharapkan (seperti waktu tunggu habis). Pengelola harus memprosesnya, lalu secara proaktif menghubungkan kembali menggunakan handle terbaru. - Error API: Masalah jaringan dapat menyebabkan
genai_errors.APIError(misalnya, kode 1000 atau 1006 untuk error WebSocket). Pengelola harus menangkap error ini dalam loop pengiriman dan penerimaan serta memicu proses pembaruan sesi atau koneksi ulang.
- Sinyal GoAway: Server mengirim pesan
Terapkan koneksi ulang dengan pemutaran ulang pesan: Saat koneksi terputus, buat sesi baru menggunakan
client.aio.live.connectdengan handle sesi terbaru. Setelah membuat koneksi baru, kirim ulang pesan apa pun di buffer yang belum dikonfirmasi oleh server sebelum koneksi terputus.
Mengaktifkan kompresi jendela konteks
Gunakan ContextWindowCompressionConfig untuk mengonfigurasi jendela konteks sesi
untuk sesi panjang, karena token audio native terakumulasi dengan cepat (sekitar
25 token per detik audio).
Peringatan: Kompresi konteks akan menyebabkan hilangnya histori percakapan.
from google.genai import types
live_config = types.LiveConnectConfig(
context_window_compression=types.ContextWindowCompressionConfig(
trigger_tokens=100_000,
sliding_window=types.SlidingWindow(target_tokens=4_000),
),
)
Deteksi aktivitas suara (VAD)
Secara default, Gemini Live API menggunakan VAD yang disediakan oleh Gemini.
Jika Anda lebih memilih menggunakan sistem deteksi aktivitas kustom, Anda harus menonaktifkan
Deteksi Aktivitas Suara (VAD) default
dan memberi sinyal secara manual saat pengguna beralih ke model Gemini. Hal ini dilakukan dengan mengirimkan peristiwa ActivityStart atau ActivityEnd untuk menentukan batas interaksi.
from google.genai import live
from google.genai import types
# Disable VAD in config
live_config = types.LiveConnectConfig(
realtime_input_config=types.RealtimeInputConfig(
automatic_activity_detection=types.AutomaticActivityDetection(
disabled=True
),
),
)
session: live.AsyncSession
await session.send_realtime_input( # Send activity start
activity_start=types.ActivityStart()
)
for audio_bytes in bytes_to_send_queue: # Send user data.
await session.send_realtime_input(
audio=types.Blob(
data=audio_bytes,
mime_type=f"audio/pcm;rate=16000",
)
)
await session.send_realtime_input(activity_end=types.ActivityEnd()) # Send activity end
Menetapkan kode bahasa audio
Sebaiknya tetapkan kode bahasa dan suara secara eksplisit dalam konfigurasi Anda untuk menjaga konsistensi; tanpa definisi ini, Gemini dapat mengubah bahasa percakapan bergantung pada konteks yang diberikan.
from google.genai import types
config = types.LiveConnectConfig(
speech_config=types.SpeechConfig(
language_code="en-US",
),
)
Sebutkan juga dalam petunjuk sistem:
RESPOND IN {OUTPUT_LANGUAGE}. YOU MUST RESPOND UNMISTAKABLY IN {OUTPUT_LANGUAGE}.
Menetapkan kode bahasa transkripsi
Tentukan kode bahasa transkripsi untuk meningkatkan akurasi transkripsi menggunakan format kode bahasa BCP-47.
Catatan: Mengaktifkan transkripsi akan menambahkan lebih banyak token.
from google.genai import types
config = types.LiveConnectConfig(
input_audio_transcription=types.AudioTranscriptionConfig(
language_codes=['en-US'] # This supports multiple language codes.
),
output_audio_transcription=types.AudioTranscriptionConfig(
language_codes=['en-US']
),
)
Buffering klien
Jangan melakukan buffering audio input secara signifikan (misalnya, 1 detik) sebelum mengirim. Kirim chunk kecil (antara 20 md dan 40 md) untuk meminimalkan latensi.
Pengambilan ulang sampel
Pastikan aplikasi klien Anda melakukan pengambilan sampel ulang input mikrofon (sering kali 44,1 kHz atau 48 kHz) menjadi 16 kHz sebelum transmisi.
Contoh
Contoh ini menggabungkan praktik terbaik dan pedoman untuk desain petunjuk sistem guna memandu performa model sebagai pelatih karier.
**Persona:**
You are Laura, a career coach from Brooklyn, NY. You specialize in providing
data driven advice to give your clients a fresh perspective on the career
questions they're navigating. Your special sauce is providing quantitative,
data-driven insights to help clients think about their issues in a different
way. You leverage statistics, research, and psychology as much as possible.
You only speak to your clients in English, no matter what language they speak
to you in.
**Conversational Rules:**
1. **Introduce yourself:** Warmly greet the client.
2. **Intake:** Ask for your client's full name, date of birth, and state they're
calling in from. Call `create_client_profile` to create a new patient profile.
3. **Discuss the client's issue:** Get a sense of what the client wants to
cover in the session. DO NOT repeat what the client is saying back to them in
your response. Don't ask more than a few questions here.
4. **Reframe the client's issue with real data:** NO PLATITUDES. Start providing
data-driven insights for the client, but embed these as general facts within
conversation. This is what they're coming to you for: your unique thinking on
the subjects that are stressing them out. Show them a new way of thinking about
something. Let this step go on for as long as the client wants. As part of this,
if the client mentions wanting to take any actions, update
`add_action_items_to_profile` to remind the client later.
5. **Next appointment:** Call `get_next_appointment` to see if another
appointment has already been scheduled for the client. If so, then share the
date and time with the client and confirm if they'll be able to attend. If
there is no appointment, then call `get_available_appointments` to see openings.
Share the list of openings with the client and ask what they would prefer. Save
their preference with `schedule_appointment`. If the client prefers to schedule
offline, then let them know that's perfectly fine and to use the patient portal.
**General Guidelines:** You're meant to be a witty, snappy conversational
partner. Keep your responses short and progressively disclose more information
if the client requests it. Don't repeat back what the client says back to them.
Each response you give should be a net new addition to the conversation, not a
recap of what the client said. Be relatable by bringing in your own background
growing up professionally in Brooklyn, NY. If a client tries to get you off
track, gently bring them back to the workflow articulated above.
**Guardrails:** If the client is being hard on themselves, never encourage that.
Remember that your ultimate goal is to create a supportive environment for your
clients to thrive.
Definisi alat
JSON ini menentukan fungsi relevan yang dipanggil dalam contoh pelatih karier. Untuk hasil terbaik saat menentukan fungsi, sertakan nama, deskripsi, parameter, dan kondisi pemanggilan.
[
{
"name": "create_client_profile",
"description": "Creates a new client profile with their personal details. Returns a unique client ID. \n**Invocation Condition:** Invoke this tool *only after* the client has provided their full name, date of birth, AND state. This should only be called once at the beginning of the 'Intake' step.",
"parameters": {
"type": "object",
"properties": {
"full_name": {
"type": "string",
"description": "The client's full name."
},
"date_of_birth": {
"type": "string",
"description": "The client's date of birth in YYYY-MM-DD format."
},
"state": {
"type": "string",
"description": "The 2-letter postal abbreviation for the client's state (e.g., 'NY', 'CA')."
}
},
"required": ["full_name", "date_of_birth", "state"]
}
},
{
"name": "add_action_items_to_profile",
"description": "Adds a list of actionable next steps to a client's profile using their client ID. \n**Invocation Condition:** Invoke this tool *only after* a list of actionable next steps has been discussed and agreed upon with the client during the 'Actions' step. Requires the `client_id` obtained from the start of the session.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client, obtained from create_client_profile."
},
"action_items": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of action items for the client (e.g., ['Update resume', 'Research three companies'])."
}
},
"required": ["client_id", "action_items"]
}
},
{
"name": "get_next_appointment",
"description": "Checks if a client has a future appointment already scheduled using their client ID. Returns the appointment details or null. \n**Invocation Condition:** Invoke this tool at the *start* of the 'Next Appointment' workflow step, immediately after the 'Actions' step is complete. This is used to check if an appointment *already exists*.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client."
}
},
"required": ["client_id"]
}
},
{
"name": "get_available_appointments",
"description": "Fetches a list of the next available appointment slots. \n**Invocation Condition:** Invoke this tool *only if* the `get_next_appointment` tool was called and it returned `null` (or an empty response), indicating no future appointment is scheduled.",
"parameters": {
"type": "object",
"properties": {}
}
},
{
"name": "schedule_appointment",
"description": "Books a new appointment for a client at a specific date and time. \n**Invocation Condition:** Invoke this tool *only after* `get_available_appointments` has been called, a list of openings has been presented to the client, and the client has *explicitly confirmed* which specific date and time they want to book.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client."
},
"appointment_datetime": {
"type": "string",
"description": "The chosen appointment slot in ISO 8601 format (e.g., '2025-10-30T14:30:00')."
}
},
"required": ["client_id", "appointment_datetime"]
}
}
]
Informasi selengkapnya
Untuk mengetahui informasi selengkapnya tentang cara menggunakan Gemini Live API, lihat:
- Halaman ringkasan Gemini Live API
- Panduan referensi Gemini Live API
- Memulai dan mengelola sesi live
- Mengonfigurasi kemampuan Gemini