Gemini יכול לנתח ולהבין קלט אודיו, וכך מאפשר תרחישים לדוגמה כמו:
- לתאר, לסכם או לענות על שאלות לגבי תוכן אודיו.
- יש לספק תמליל של האודיו.
- לנתח קטעים ספציפיים באודיו.
במדריך הזה מוסבר איך להשתמש ב-Gemini API כדי ליצור תגובה בטקסט לתשובה קולית.
לפני שמתחילים
לפני שמפעילים את Gemini API, צריך לוודא שה-SDK שבחרתם מותקן ושהגדרתם מפתח Gemini API מוכן לשימוש.
קלט אודיו
אפשר לספק נתוני אודיו ל-Gemini בדרכים הבאות:
- מעלים קובץ אודיו לפני ששולחים בקשה אל
generateContent
. - מעבירים נתוני אודיו בקוד עם הבקשה אל
generateContent
.
העלאת קובץ אודיו
אפשר להשתמש ב-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();
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
localAudioPath := "/path/to/sample.mp3"
uploadedFile, _ := client.Files.UploadFromPath(
ctx,
localAudioPath,
nil,
)
parts := []*genai.Part{
genai.NewPartFromText("Describe this audio clip"),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-2.0-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
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);
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
audioBytes, _ := os.ReadFile("/path/to/small-sample.mp3")
parts := []*genai.Part{
genai.NewPartFromText("Describe this audio clip"),
&genai.Part{
InlineData: &genai.Blob{
MIMEType: "audio/mp3",
Data: audioBytes,
},
},
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-2.0-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
כמה דברים שכדאי לזכור לגבי נתוני אודיו בקוד:
- הגודל המקסימלי של הבקשה הוא 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);
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
localAudioPath := "/path/to/sample.mp3"
uploadedFile, _ := client.Files.UploadFromPath(
ctx,
localAudioPath,
nil,
)
parts := []*genai.Part{
genai.NewPartFromText("Generate a transcript of the speech."),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-2.0-flash",
contents,
nil,
)
fmt.Println(result.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."
// Create a prompt containing timestamps.
const prompt = "Provide a transcript of the speech from 02:30 to 03:29."
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
localAudioPath := "/path/to/sample.mp3"
uploadedFile, _ := client.Files.UploadFromPath(
ctx,
localAudioPath,
nil,
)
parts := []*genai.Part{
genai.NewPartFromText("Provide a transcript of the speech " +
"between the timestamps 02:30 and 03:29."),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-2.0-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
ספירת אסימונים
קוראים ל-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);
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
localAudioPath := "/path/to/sample.mp3"
uploadedFile, _ := client.Files.UploadFromPath(
ctx,
localAudioPath,
nil,
)
parts := []*genai.Part{
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
tokens, _ := client.Models.CountTokens(
ctx,
"gemini-2.0-flash",
contents,
nil,
)
fmt.Printf("File %s is %d tokens\n", localAudioPath, 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) והערכה אנושית הם חיוניים כדי להגביל את הסיכון לנזק כתוצאה מפלט כזה.