Авторские права 2026 Google LLC.
# @title Лицензировано в соответствии с лицензией Apache, версия 2.0 ("Лицензия");
# вы не можете использовать этот файл, кроме как в соответствии с Лицензией.
# Вы можете получить копию Лицензии по адресу
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Если иное не предусмотрено применимым законодательством или не согласовано в письменной форме, программное обеспечение
# распространяется по Лицензии на условиях "КАК ЕСТЬ",
# БЕЗ ГАРАНТИЙ И УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.
# См. Лицензию для получения информации о конкретных разрешениях и
# ограничениях в соответствии с Лицензией.
Gemini API: Краткое руководство по работе с аудио
Этот notebook демонстрирует пример того, как использовать Gemini Flash с помощью аудиофайла. В данном случае вы будете использовать звукозапись обращения президента Джона Ф. Кеннеди «О положении в стране» 1961 года.
Примечание: Этот notebook использует Interactions API, новейший способ взаимодействия с моделями Gemini. Ищете версию с
generateContent? Проверьте архивную ветку.
Настройка
Установка зависимостей
%pip install -U -q "google-genai>=2.9.0" # 2.0 for Interactions API
Настройка вашего API key
Для запуска следующей cell ваш API key должен быть сохранен в Colab Secret с именем GEMINI_API_KEY. Если у вас еще нет API key или вы не знаете, как создать Colab Secret, см. Аутентификация для пошагового руководства.
from google.colab import userdata
from google import genai
GEMINI_API_KEY = userdata.get('GEMINI_API_KEY')
client = genai.Client(api_key=GEMINI_API_KEY)
Выберите model, которую вы хотите использовать в этом руководстве:
MODEL_ID = "gemini-3.7-flash" # @param ["gemini-3.1-pro-preview", "gemini-3.7-flash", "gemini-3.5-flash-lite", "gemini-2.5-pro"] {"allow-input":true, isTemplate: true}
Загрузка аудиофайла с помощью File API
Чтобы использовать аудиофайл в вашем prompt, вы должны сначала загрузить его с помощью File API.
URL = "https://storage.googleapis.com/generativeai-downloads/data/State_of_the_Union_Address_30_January_1961.mp3"
!wget -q $URL -O sample.mp3
your_audio_file = client.files.upload(file='sample.mp3')
Использование файла в вашем prompt
interaction = client.interactions.create(
model=MODEL_ID,
input=[
{"type": "text", "text": "Внимательно прослушайте следующий аудиофайл. Предоставьте краткое резюме."},
{"type": "audio", "uri": your_audio_file.uri},
],
)
print(interaction.steps[-1].content[0].text)
В своем первом обращении «О положении в стране» 30 января 1961 года президент Джон Ф. Кеннеди представил откровенную оценку нации, столкнувшейся как с "национальной опасностью, так и с национальными возможностями". Он подробно описал испытывающую трудности внутреннюю экономику, характеризующуюся рецессией, высоким уровнем безработицы и стагнацией роста, предложив ряд законодательных мер — включая повышение минимальной заработной платы, городское переустройство и расширение пособий по безработице — для стимулирования восстановления.
На международной арене Кеннеди затронул обострение напряженности Холодной войны, выделив кризисы в Азии, Африке и Латинской Америке. Он призвал к значительному укреплению военного потенциала США, в частности, за счет увеличения пропускной способности воздушных перевозок и ускоренных программ по ракетам и подводным лодкам. Одновременно он отстаивал активную внешнюю политику, ориентированную на международное развитие, предложив "Альянс за прогресс" для Латинской Америки и создание Корпуса мира. Кеннеди завершил свое выступление, подчеркнув необходимость научного сотрудничества, контроля над вооружениями и непоколебимой преданности американского народа для преодоления предстоящих трудных лет.
Встроенное аудио
Для небольших запросов вы можете встраивать аудиоданные непосредственно в запрос, как и в случае с изображениями. Аудиоданные должны быть закодированы в base64 для отправки с prompt. Используйте, например, PyDub, чтобы обрезать первые 10 секунд аудио:
%pip install -Uq pydub
from pydub import AudioSegment
from .audio_segment import AudioSegment
File "/usr/local/google/home/giom/.gemini/jetski/scratch/cookbook-agentB-interactions/.venv/lib/python3.13/site-packages/pydub/audio_segment.py", line 11, in <module>
from .utils import mediainfo_json, fsdecode
File "/usr/local/google/home/giom/.gemini/jetski/scratch/cookbook-agentB-interactions/.venv/lib/python3.13/site-packages/pydub/utils.py", line 16, in <module>
import pyaudioop as audioop
ModuleNotFoundError: No module named 'pyaudioop'
sound = AudioSegment.from_mp3("sample.mp3")
Traceback (most recent call last):
File "/tmp/execute_notebook.py", line 103, in execute_notebook
result = exec(compile(prepared, f"{name}:cell_{i}", 'exec'), ns)
File "Audio.ipynb:cell_22", line 1, in <module>
NameError: name 'AudioSegment' is not defined
sound[:10000] # срезы указаны в мс
Traceback (most recent call last):
File "/tmp/execute_notebook.py", line 103, in execute_notebook
result = exec(compile(prepared, f"{name}:cell_{i}", 'exec'), ns)
File "Audio.ipynb:cell_23", line 1, in <module>
NameError: name 'sound' is not defined. Did you mean: 'round'?
Добавьте его в список частей в prompt:
import base64
audio_data = base64.b64encode(sound[:10000].export().read()).decode('utf-8')
interaction = client.interactions.create(
model=MODEL_ID,
input=[
{"type": "text", "text": "Опишите этот аудиоклип"},
{"type": "audio", "data": audio_data, "mime_type": "audio/mp3"},
],
)
print(interaction.steps[-1].content[0].text)
Traceback (most recent call last):
File "/tmp/execute_notebook.py", line 103, in execute_notebook
result = exec(compile(prepared, f"{name}:cell_{i}", 'exec'), ns)
File "Audio.ipynb:cell_25", line 3, in <module>
NameError: name 'sound' is not defined. Did you mean: 'round'?
Обратите внимание на следующее при предоставлении аудио в виде встроенных данных:
- Максимальный размер запроса составляет 100 МБ, что включает текстовые prompts, системные инструкции и встроенные файлы. Если размер вашего файла превысит 100 МБ, то используйте File API для загрузки файлов.
- Если вы используете аудиообразец несколько раз, эффективнее использовать File API.
Получение транскрипции аудиофайла
Чтобы получить транскрипцию, просто запросите ее в prompt. Например:
prompt = "Сгенерируйте транскрипцию речи."
interaction = client.interactions.create(
model=MODEL_ID,
input=[
{"type": "text", "text": prompt},
{"type": "audio", "uri": your_audio_file.uri},
],
)
from IPython.display import Markdown
display(Markdown(interaction.steps[-1].content[0].text))
Ссылка на временные метки в аудиофайле
Prompt может указывать временные метки в формате MM:SS для ссылки на определенные разделы в аудиофайле. Например:
# Создайте prompt, содержащий временные метки.
prompt = "Предоставьте транскрипцию речи между временными метками 02:30 и 03:29."
interaction = client.interactions.create(
model=MODEL_ID,
input=[
{"type": "text", "text": prompt},
{"type": "audio", "uri": your_audio_file.uri},
],
)
display(Markdown(interaction.steps[-1].content[0].text))
Вот транскрипция речи между временными метками 02:30 и 03:29:
Возвращение среди стольких друзей — это счастливое событие. Я уверен, что эта дружба будет продолжаться. Наша Конституция мудро отводит как совместные, так и отдельные роли каждой ветви власти; и Президент, и Конгресс, взаимно уважающие друг друга, не допустят и не предпримут никаких посягательств. Со своей стороны, я не буду скрывать ни от Конгресса, ни от народа никаких фактов или отчетов, прошлых, настоящих или будущих, которые необходимы для информированного суждения о нашем поведении и опасностях. Я не буду перекладывать бремя исполнительных решений на Конгресс и не буду уклоняться от ответственности за результаты этих решений.
Использование видео с YouTube
from IPython.display import display, Markdown
youtube_url = "https://www.youtube.com/watch?v=RDOMKIw1aF4" # @param {type:"string"}
prompt = """
Проанализируйте следующее содержимое видео с YouTube. Предоставьте краткое резюме, охватывающее:
1. **Основной тезис/утверждение:** Какова центральная идея, которую высказывает автор?
2. **Ключевые темы:** Перечислите основные обсуждаемые темы, ссылаясь на конкретные примеры или упомянутые технологии (например, AI models, языки программирования, проекты).
3. **Призыв к действию:** Определите любые явные запросы, сделанные зрителю.
4. **Резюме:** Предоставьте краткое резюме содержимого видео.
Используйте предоставленное название, временные метки/описания глав и текст описания для вашего анализа.
"""
# Проанализируйте видео
interaction = client.interactions.create(
model=MODEL_ID,
input=[
{"type": "text", "text": prompt},
{"type": "video", "uri": youtube_url},
],
)
display(Markdown(interaction.steps[-1].content[0].text))
<IPython.core.display.Markdown object>
Подсчет аудио токенов
Вы можете подсчитать количество tokens в вашем аудиофайле с помощью метода count_tokens.
Аудиофайлы имеют фиксированную скорость token в секунду (более подробная информация в специальном кратком руководстве по подсчету token).
count_tokens_response = client.models.count_tokens(
model=MODEL_ID,
contents=[your_audio_file],
)
print("Токены аудиофайла:",count_tokens_response.total_tokens)
Токены аудиофайла: 83528
Дальнейшие шаги
Полезные ссылки на API:
Более подробная информация о возможностях зрения Gemini API в документации.
Если вы хотите узнать о File API, ознакомьтесь с его API reference или кратким руководством по File API.
Связанные примеры
Ознакомьтесь с этим примером использования аудиофайлов, чтобы получить больше идей о том, что Gemini API может с ними делать:
- Делитесь голосовыми заметками с Gemini API и обменивайтесь идеями
Продолжите изучение Gemini API
Ознакомьтесь с кратким руководством по аудио, чтобы узнать о другом типе медиафайлов, затем узнайте больше о prompting с медиафайлами в документации, включая поддерживаемые форматы и максимальную длину для аудиофайлов. .