探索 Gemini API 的音訊功能

Gemini 可回應音訊提示。舉例來說,Gemini 可以:

  • 描述、摘要或回答有關音訊內容的問題。
  • 提供音訊轉錄稿。
  • 提供音訊的特定片段答案或轉錄稿。

本指南將示範使用 Gemini API 與音訊檔案和音訊內容互動的不同方式。

支援的音訊格式

Gemini 支援下列音訊格式的 MIME 類型:

  • WAV - audio/wav
  • MP3 - audio/mp3
  • AIFF - audio/aiff
  • AAC - audio/aac
  • OGG Vorbis - audio/ogg
  • FLAC - audio/flac

音訊技術詳細資料

Gemini 對音訊設有以下規則:

  • Gemini 會將每秒的音訊表示為 25 個符記,例如一分鐘的音訊會以 1,500 個符記表示。
  • Gemini 只能針對英文語音推斷回覆。
  • Gemini 可以「理解」非語音的元素,例如鳥鳴或警鈴聲。
  • 單一提示支援的音訊資料長度上限為 9.5 小時。Gemini 不會限制單一提示中的音訊檔案數量,但單一提示中所有音訊檔案的總長度不得超過 9.5 小時。
  • Gemini 會將音訊檔案降採樣至 16 Kbps 資料解析度。
  • 如果音訊來源含有多個聲道,Gemini 會將這些聲道合併為單一聲道。

事前準備:設定專案和 API 金鑰

在呼叫 Gemini API 之前,您需要設定專案並設定 API 金鑰。

將音訊檔案提供給 Gemini

你可以透過下列任一方式,將音訊檔案提供給 Gemini:

  • 上傳音訊檔案,提出提示要求之前。
  • 將音訊檔案做為內嵌資料提供給提示要求。

上傳音訊檔案並產生內容

您可以使用 File API 上傳任何大小的音訊檔案。如果總要求大小 (包括檔案、文字提示、系統指示等) 超過 20 MB,請一律使用 File API。

呼叫 media.upload,即可使用 File API 上傳檔案。以下程式碼會上傳音訊檔案,然後在呼叫 models.generateContent 時使用該檔案。

import google.generativeai as genai

myfile = genai.upload_file(media / "sample.mp3")
print(f"{myfile=}")

model = genai.GenerativeModel("gemini-1.5-flash")
result = model.generate_content([myfile, "Describe this audio clip"])
print(f"{result.text=}")

取得檔案的中繼資料

您可以呼叫 files.get,驗證 API 是否已成功儲存上傳的檔案,並取得其中繼資料。

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")
file_name = myfile.name
print(file_name)  # "files/*"

myfile = genai.get_file(file_name)
print(myfile)

列出已上傳的檔案

你可以上傳多個音訊檔案 (和其他類型的檔案)。以下程式碼會產生所有上傳檔案的清單:

import google.generativeai as genai

print("My files:")
for f in genai.list_files():
    print("  ", f.name)

刪除已上傳的檔案

檔案會在 48 小時後自動刪除。您也可以手動刪除已上傳的檔案。例如:

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")

myfile.delete()

try:
    # Error.
    model = genai.GenerativeModel("gemini-1.5-flash")
    result = model.generate_content([myfile, "Describe this file."])
except google.api_core.exceptions.PermissionDenied:
    pass

在要求中以內嵌資料的形式提供音訊檔案

您可以改為在包含提示的相同呼叫中傳遞音訊資料,而非上傳音訊檔案。

接著,將下載的音訊檔案和提示傳送給 Gemini:

# Initialize a Gemini model appropriate for your use case.
model = genai.GenerativeModel('models/gemini-1.5-flash')

# Create the prompt.
prompt = "Please summarize the audio."

# Load the samplesmall.mp3 file into a Python Blob object containing the audio
# file's bytes and then pass the prompt and the audio to Gemini.
response = model.generate_content([
    prompt,
    {
        "mime_type": "audio/mp3",
        "data": pathlib.Path('samplesmall.mp3').read_bytes()
    }
])

# Output Gemini's response to the prompt and the inline audio.
print(response.text)

請注意,以下是提供音訊做為內嵌資料的注意事項:

  • 要求大小上限為 20 MB,其中包括文字提示、系統操作說明和內嵌檔案。如果檔案大小會導致總要求大小超過 20 MB,請使用 File API 上傳檔案,以便在要求中使用。
  • 如果您要多次使用音訊樣本,建議您使用 File API,這樣效率會更高。

更多處理音訊的方式

本節將介紹幾種額外方法,協助您從音訊中獲得更多資訊。

取得音訊檔案的轉錄稿

如要取得轉錄稿,只要在提示中要求即可。例如:

# Initialize a Gemini model appropriate for your use case.
model = genai.GenerativeModel(model_name="gemini-1.5-flash")

# Create the prompt.
prompt = "Generate a transcript of the speech."

# Pass the prompt and the audio file to Gemini.
response = model.generate_content([prompt, audio_file])

# Print the transcript.
print(response.text)

參照音訊檔案中的時間戳記

提示可以指定 MM:SS 格式的時間戳記,以便參照音訊檔案中的特定部分。舉例來說,下列提示會要求轉錄稿,其內容如下:

  • 從檔案開頭開始播放 2 分 30 秒。
  • 從檔案開頭算起,結束時間為 3 分 29 秒。
# Create a prompt containing timestamps.
prompt = "Provide a transcript of the speech from 02:30 to 03:29."

計算符記

呼叫 countTokens 方法,取得音訊檔案中的符記數量。例如:

model.count_tokens([audio_file])

後續步驟

本指南說明如何使用 File API 上傳音訊檔案,然後從音訊輸入內容產生文字輸出內容。如要進一步瞭解相關內容,請參閱下列資源:

  • 檔案提示策略:Gemini API 支援使用文字、圖片、音訊和影片資料提示,這也稱為多模態提示。
  • 系統指示:系統指示可讓您根據特定需求和用途,引導模型的行為。
  • 安全指南:生成式 AI 模型有時會產生非預期的輸出內容,例如不準確、偏頗或令人反感的輸出內容。後續處理和人工評估是限制這類輸出內容造成危害風險的必要措施。