В этом руководстве описаны лучшие практики, которым вы можете следовать для оптимизации использования Live API. Обзор и примеры кода для распространенных сценариев использования см. на странице «Начало работы с Live API» .
Разработайте четкие инструкции для системы.
Для достижения наилучшей производительности Live API мы рекомендуем иметь четко определенный набор системных инструкций (СИ), определяющих профиль агента, правила диалога и ограничения, в следующем порядке.
Для достижения наилучших результатов разделите каждый агент на отдельные группы в рамках одной системы индексов чувствительности (SI).
Укажите характеристики агента: подробно опишите имя агента, его роль и любые предпочтительные качества. Если вы хотите указать акцент, обязательно укажите также предпочтительный язык вывода (например, британский акцент для носителя английского языка).
Укажите правила ведения диалога: расположите эти правила в том порядке, в котором, как вы ожидаете, будет следовать модель. Разграничьте разовые элементы диалога и циклы диалога. Например:
- Одноразовый элемент: сбор данных о клиенте один раз (например, имя, местоположение, номер карты лояльности).
- Цикл диалога: Пользователь может обсуждать рекомендации, цены, возвраты и доставку, и может захотеть переходить от одной темы к другой. Дайте модели понять, что участие в этом цикле диалога допустимо столько, сколько пожелает пользователь.
Указывайте вызовы инструментов в рамках потока отдельными предложениями: Например, если для одноразового шага по сбору данных о клиенте требуется вызвать функцию
get_user_info, вы можете сказать: «Ваш первый шаг — собрать информацию о пользователе. Сначала попросите пользователя указать свое имя, местоположение и номер карты лояльности. Затем вызовитеget_user_infoс этими данными».Добавьте необходимые ограничения: укажите любые общие ограничения в диалоге, которые вы не хотите, чтобы модель выполняла. Не стесняйтесь приводить конкретные примеры того, что если произойдет x , вы хотите, чтобы модель сделала y . Если вы все еще не получаете желаемый уровень точности, используйте слово «несомненно» , чтобы направить модель к большей точности.
Точно определите инструменты.
При использовании инструментов с Live API будьте конкретны в определениях инструментов. Обязательно укажите Gemini, при каких условиях должен вызываться вызов инструмента. Для получения более подробной информации см. раздел «Определения инструментов» в разделе примеров.
Разрабатывайте эффективные подсказки
- Используйте четкие подсказки: приводите примеры того, что модели должны и не должны делать, и старайтесь ограничивать количество подсказок до одной на каждого персонажа или роль за раз. Вместо длинных, многостраничных подсказок рассмотрите возможность использования цепочек подсказок. Модель показывает наилучшие результаты в задачах с одиночными вызовами функций.
- Предоставьте начальные команды и информацию: Live API ожидает ввода данных от пользователя перед тем, как ответить. Чтобы Live API инициировал диалог, добавьте запрос с просьбой поприветствовать пользователя или начать разговор. Укажите информацию о пользователе, чтобы Live API персонализировал приветствие.
Укажите язык
Для оптимальной производительности каскадного API Live gemini-live-2.5-flash убедитесь, что language_code API соответствует языку, на котором говорит пользователь.
Если ожидается, что модель будет отвечать на языке, отличном от английского, включите в инструкции к системе следующее:
RESPOND IN {OUTPUT_LANGUAGE}. YOU MUST RESPOND UNMISTAKABLY IN {OUTPUT_LANGUAGE}.
Стриминг
При реализации обработки звука в реальном времени следуйте этим рекомендациям:
- Размер фрагмента и задержка : Отправляйте аудиофрагменты длительностью от 20 до 40 мс.
- Обработка прерываний : Когда пользователь говорит во время ответа модели, сервер отправляет сообщение
server_contentсо значением"interrupted": true. Необходимо немедленно удалить буфер аудиоданных на стороне клиента, чтобы предотвратить продолжение разговора агента поверх голоса пользователя.
Управление контекстом
Для длительных сессий используйте ContextWindowCompressionConfig , поскольку токены нативного аудио быстро накапливаются (примерно 25 токенов в секунду аудио).
Буферизация клиента
Не следует буферизовать входной аудиосигнал на значительную длительность (например, 1 секунду) перед отправкой. Отправляйте небольшие фрагменты (20–100 мс), чтобы минимизировать задержку.
Передискретизация
Убедитесь, что ваше клиентское приложение перед передачей преобразует входной сигнал с микрофона (часто 44,1 кГц или 48 кГц) в 16 кГц.
Управление сессиями
Следуйте этим рекомендациям для управления жизненным циклом сессии и обеспечения надежного взаимодействия с пользователем:
- Включите сжатие контекстного окна: аудиотокены накапливаются примерно по 25 токенов в секунду. Без сжатия продолжительность аудиосессий ограничена 15 минутами, а аудио-видеосессий — 2 минутами. Включите сжатие контекстного окна , чтобы продлить продолжительность сессий до неограниченного значения.
- Реализуйте возобновление сессии: сервер может периодически разрывать соединение WebSocket. Используйте возобновление сессии для беспрепятственного переподключения без потери контекста. Сохраняйте последний токен возобновления из сообщений
SessionResumptionUpdateи передавайте его в качестве дескриптора при повторном подключении. Токены возобновления действительны в течение 2 часов после завершения последней сессии. - Обработка сообщений GoAway: Сервер отправляет сообщение GoAway перед завершением соединения. Прослушивайте это сообщение и используйте поле
timeLeftдля корректного завершения или повторного подключения перед закрытием соединения. - Обработка сигналов generationComplete: используйте сообщение
generationComplete, чтобы узнать, когда модель завершила генерацию ответа, чтобы ваше приложение могло обновить свой пользовательский интерфейс или перейти к следующему действию.
Подробную информацию о реализации см. в разделе «Управление сессиями» .
Примеры
В этом примере объединены лучшие практики и рекомендации по разработке системных инструкций, призванные помочь модели эффективно выполнять функции карьерного консультанта.
**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.
Определения инструментов
Этот JSON-файл определяет соответствующие функции, вызываемые в примере с карьерным консультантом. Для достижения наилучших результатов при определении функций указывайте их имена, описания, параметры и условия вызова.
[
{
"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"]
}
}
]