הבנת אודיו

Gemini יכול לנתח ולהבין קלט אודיו, וכך מאפשר תרחישים לדוגמה כמו:

  • לתאר, לסכם או לענות על שאלות לגבי תוכן אודיו.
  • יש לספק תמליל של האודיו.
  • לנתח קטעים ספציפיים באודיו.

במדריך הזה מוסבר איך להשתמש ב-Gemini API כדי ליצור תגובה בטקסט לתגובת אודיו.

קלט אודיו

אתם יכולים לספק נתוני אודיו ל-Gemini בדרכים הבאות:

העלאת קובץ אודיו

אפשר להשתמש ב-Files API כדי להעלות קובץ אודיו. תמיד צריך להשתמש ב-Files API כשגודל הבקשה הכולל (כולל הקבצים, הנחיות הטקסט, הוראות המערכת וכו') גדול מ-20MB.

הקוד הבא מעלה קובץ אודיו ולאחר מכן משתמש בקובץ בקריאה ל-generateContent.

from google import genai

client = genai.Client(api_key="GOOGLE_API_KEY")

myfile = client.files.upload(file="path/to/sample.mp3")

response = client.models.generate_content(
    model="gemini-2.0-flash", contents=["Describe this audio clip", myfile]
)

print(response.text)
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });

async function main() {
  const myfile = await ai.files.upload({
    file: "path/to/sample.mp3",
    config: { mimeType: "audio/mp3" },
  });

  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash",
    contents: createUserContent([
      createPartFromUri(myfile.uri, myfile.mimeType),
      "Describe this audio clip",
    ]),
  });
  console.log(response.text);
}

await main();
file, err := client.UploadFileFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
    log.Fatal(err)
}
defer client.DeleteFile(ctx, file.Name)

model := client.GenerativeModel("gemini-2.0-flash")
resp, err := model.GenerateContent(ctx,
    genai.FileData{URI: file.URI},
    genai.Text("Describe this audio clip"))
if err != nil {
    log.Fatal(err)
}

printResponse(resp)
AUDIO_PATH="path/to/sample.mp3"
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Describe this audio clip"},
          {"file_data":{"mime_type": "${MIME_TYPE}", "file_uri": '$file_uri'}}]
        }]
      }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

מידע נוסף על עבודה עם קובצי מדיה זמין במאמר Files API.

העברת נתוני אודיו בתוך שורה

במקום להעלות קובץ אודיו, אפשר להעביר נתוני אודיו בקוד בתוך הבקשה ל-generateContent:

from google.genai import types

with open('path/to/small-sample.mp3', 'rb') as f:
    audio_bytes = f.read()

response = client.models.generate_content(
  model='gemini-2.0-flash',
  contents=[
    'Describe this audio clip',
    types.Part.from_bytes(
      data=audio_bytes,
      mime_type='audio/mp3',
    )
  ]
)

print(response.text)
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const base64AudioFile = fs.readFileSync("path/to/small-sample.mp3", {
  encoding: "base64",
});

const contents = [
  { text: "Please summarize the audio." },
  {
    inlineData: {
      mimeType: "audio/mp3",
      data: base64AudioFile,
    },
  },
];

const response = await ai.models.generateContent({
  model: "gemini-2.0-flash",
  contents: contents,
});
console.log(response.text);
// Initialize a Gemini model appropriate for your use case.
model := client.GenerativeModel("gemini-2.0-flash")

bytes, err := os.ReadFile("path/to/small-sample.mp3")
if err != nil {
  log.Fatal(err)
}

prompt := []genai.Part{
  genai.Blob{MIMEType: "audio/mp3", Data: bytes},
  genai.Text("Please summarize the audio."),
}

// Generate content using the prompt.
resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
  log.Fatal(err)
}

// Handle the response of generated text
for _, c := range resp.Candidates {
  if c.Content != nil {
    fmt.Println(*c.Content)
  }
}

כמה דברים שכדאי לזכור לגבי נתוני אודיו בקוד:

  • הגודל המקסימלי של הבקשה הוא 20MB, כולל הנחיות טקסט, הוראות מערכת וקבצים שסופקו בתוך שורת הקוד. אם גודל הקובץ גורם לגודל הבקשה הכולל לחרוג מ-20MB, צריך להשתמש ב-Files API כדי להעלות קובץ אודיו לשימוש בבקשה.
  • אם אתם משתמשים בטעימה של אודיו כמה פעמים, העלאת קובץ אודיו היא יעילה יותר.

קבלת תמליל

כדי לקבל תמליל של נתוני אודיו, פשוט מבקשים זאת בהנחיה:

myfile = client.files.upload(file='path/to/sample.mp3')
prompt = 'Generate a transcript of the speech.'

response = client.models.generate_content(
  model='gemini-2.0-flash',
  contents=[prompt, myfile]
)

print(response.text)
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const myfile = await ai.files.upload({
  file: "path/to/sample.mp3",
  config: { mimeType: "audio/mpeg" },
});

const result = await ai.models.generateContent({
  model: "gemini-2.0-flash",
  contents: createUserContent([
    createPartFromUri(myfile.uri, myfile.mimeType),
    "Generate a transcript of the speech.",
  ]),
});
console.log("result.text=", result.text);
// Initialize a Gemini model appropriate for your use case.
model := client.GenerativeModel("gemini-2.0-flash")

// Create a prompt using text and the URI reference for the uploaded file.
prompt := []genai.Part{
  genai.FileData{URI: sampleAudio.URI},
  genai.Text("Generate a transcript of the speech."),
}

// Generate content using the prompt.
resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
  log.Fatal(err)
}

// Handle the response of generated text
for _, c := range resp.Candidates {
  if c.Content != nil {
    fmt.Println(*c.Content)
  }
}

עיון בחותמות הזמן

אפשר להפנות לקטע ספציפי בקובץ אודיו באמצעות חותמות זמן בפורמט MM:SS. לדוגמה, ההנחיה הבאה מבקשת תמליל שכולל

  • החלק מתחיל אחרי 2 דקות ו-30 שניות מתחילת הקובץ.
  • הסרטון מסתיים אחרי 3 דקות ו-29 שניות מתחילת הקובץ.

# Create a prompt containing timestamps.
prompt = "Provide a transcript of the speech from 02:30 to 03:29."
// Create a prompt containing timestamps.
const prompt = "Provide a transcript of the speech from 02:30 to 03:29."
// Create a prompt containing timestamps.
prompt := []genai.Part{
    genai.FileData{URI: sampleAudio.URI},
    genai.Text("Provide a transcript of the speech from 02:30 to 03:29."),
}

ספירת אסימונים

קוראים ל-method‏ countTokens כדי לקבל ספירה של מספר האסימונים בקובץ אודיו. לדוגמה:

response = client.models.count_tokens(
  model='gemini-2.0-flash',
  contents=[myfile]
)

print(response)
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const myfile = await ai.files.upload({
  file: "path/to/sample.mp3",
  config: { mimeType: "audio/mpeg" },
});

const countTokensResponse = await ai.models.countTokens({
  model: "gemini-2.0-flash",
  contents: createUserContent([
    createPartFromUri(myfile.uri, myfile.mimeType),
  ]),
});
console.log(countTokensResponse.totalTokens);
tokens, err := model.CountTokens(ctx, genai.FileData{URI: sampleAudio.URI})
if err != nil {
    log.Fatal(err)
}
fmt.Printf("File %s is %d tokens", sampleAudio.DisplayName, tokens.TotalTokens)

פורמטים נתמכים של קובצי אודיו

Gemini תומך בסוגי ה-MIME הבאים של פורמטים של אודיו:

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

פרטים טכניים על אודיו

  • Gemini מייצג כל שנייה של אודיו באמצעות 32 אסימונים. לדוגמה, דקה אחת של אודיו מיוצגת באמצעות 1,920 אסימונים.
  • Gemini יכול להסיק תשובות רק לדיבור באנגלית.
  • Gemini יכול "להבין" רכיבים שאינם דיבור, כמו ציוץ ציפורים או סירנות.
  • האורך המקסימלי של נתוני אודיו בהנחיה אחת הוא 9.5 שעות. אין הגבלה על מספר קובצי האודיו בהנחיה אחת ב-Gemini, אבל משך הזמן הכולל של כל קובצי האודיו בהנחיה אחת לא יכול לחרוג מ-9.5 שעות.
  • Gemini מבצעת דגימה לאחור של קובצי אודיו לרזולוציית נתונים של 16Kbps.
  • אם מקור האודיו מכיל כמה ערוצים, Gemini משלבת את הערוצים האלה לערוץ אחד.

המאמרים הבאים

במדריך הזה מוסבר איך ליצור טקסט בתגובה לנתוני אודיו. מידע נוסף זמין במקורות המידע הבאים:

  • אסטרטגיות להצגת בקשות להעלאת קבצים: Gemini API תומך בהצגת בקשות להעלאת קבצים עם נתוני טקסט, תמונות, אודיו וסרטונים, שנקראות גם בקשות להעלאת קבצים במגוון מודלים.
  • הוראות מערכת: הוראות המערכת מאפשרות לכם לקבוע את התנהגות המודל בהתאם לצרכים ולתרחישים הספציפיים שלכם.
  • הנחיות בטיחות: לפעמים מודלים של AI גנרטיבי יוצרים פלטים לא צפויים, כמו פלטים לא מדויקים, מוטים או פוגעניים. עיבוד תמונה (Post Processing) והערכה אנושית חיוניים כדי להגביל את הסיכון לנזק כתוצאה מפלט כזה.