Pemahaman audio (khusus ucapan)

Anda dapat menambahkan audio ke permintaan Gemini untuk melakukan tugas yang melibatkan pemahaman konten audio yang disertakan. Halaman ini menunjukkan cara menambahkan audio ke permintaan Anda ke Gemini di Vertex AI menggunakan konsol Google Cloud dan Vertex AI API.

Model yang didukung

Tabel berikut mencantumkan model yang mendukung pemahaman audio:

Model Detail modalitas audio

Gemini 1.5 Flash

Buka kartu model Gemini 1.5 Flash

Durasi audio maksimum per perintah: ~8,4 jam atau hingga 1 juta token.

Ucapan dapat dipahami untuk ringkasan, transkripsi, dan terjemahan audio.

Gemini 1.5 Pro

Buka kartu model Gemini 1.5 Pro

Durasi audio maksimum per perintah: ~8,4 jam atau hingga 1 juta token.

Ucapan dapat dipahami untuk ringkasan, transkripsi, dan terjemahan audio.

Untuk mengetahui daftar bahasa yang didukung oleh model Gemini, lihat informasi model model Google. Untuk mempelajari lebih lanjut cara mendesain perintah multimodal, lihat Mendesain perintah multimodal. Jika Anda mencari cara untuk menggunakan Gemini langsung dari aplikasi seluler dan web, lihat Vertex AI di Firebase SDK untuk aplikasi Android, Swift, web, dan Flutter.

Menambahkan audio ke permintaan

Anda dapat menambahkan file audio dalam permintaan ke Gemini.

Audio tunggal

Berikut ini cara menggunakan file audio untuk meringkas podcast.

Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Vertex AI SDK untuk Python.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan parameter stream di generate_content.

  response = model.generate_content(contents=[...], stream = True)
  

Untuk respons non-streaming, hapus parameter, atau tetapkan parameter ke False.

Kode contoh


import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

prompt = """
Please provide a summary for the audio.
Provide chapter titles, be concise and short, no need to provide chapter summaries.
Do not make up any information that is not part of the audio and do not be verbose.
"""

audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

contents = [audio_file, prompt]

response = model.generate_content(contents)
print(response.text)
# Example response:
# **Made By Google Podcast Summary**
# **Chapter Titles:**
# * Introduction
# * Transformative Pixel Features
# ...

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Vertex AI Java SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Untuk respons non-streaming, gunakan metode generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Kode contoh

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class AudioInputSummarization {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    summarizeAudio(projectId, location, modelName);
  }

  // Analyzes the given audio input.
  public static String summarizeAudio(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String audioUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "Please provide a summary for the audio.\n"
                  + "Provide chapter titles with timestamps, be concise and short, "
                  + "no need to provide chapter summaries.\n"
                  + "Do not make up any information that is not part of the audio "
                  + "and do not be verbose.",
              PartMaker.fromMimeTypeAndData("audio/mp3", audioUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);

      return output;
    }
  }
}

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai AI Generatif menggunakan Node.js SDK. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Node.js SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Untuk respons non-streaming, gunakan metode generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Kode contoh

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function summarize_audio(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/audio/pixel.mp3',
      mime_type: 'audio/mpeg',
    },
  };
  const textPart = {
    text: `
    Please provide a summary for the audio.
    Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
    Do not make up any information that is not part of the audio and do not be verbose.`,
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  const resp = await generativeModel.generateContent(request);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Vertex AI Go SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode GenerateContentStream.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

Untuk respons non-streaming, gunakan metode GenerateContent.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

Kode contoh

import (
	"context"
	"errors"
	"fmt"
	"io"
	"mime"
	"path/filepath"

	"cloud.google.com/go/vertexai/genai"
)

// summarizeAudio shows how to send an audio asset and a text question to a model, writing the response to the
// provided io.Writer.
func summarizeAudio(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)
	model.SetTemperature(0.4)

	// Given an audio file URL, prepare audio file as genai.Part
	part := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext("pixel.mp3")),
		FileURI:  "gs://cloud-samples-data/generative-ai/audio/pixel.mp3",
	}

	res, err := model.GenerateContent(ctx, part, genai.Text(`
		Please provide a summary for the audio.
		Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
		Do not make up any information that is not part of the audio and do not be verbose.
	`,
	))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated summary:\n%s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi C# Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Untuk respons non-streaming, gunakan metode GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Untuk mengetahui informasi selengkapnya tentang cara server melakukan streaming respons, lihat Streaming RPC.

Kode contoh


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class AudioInputSummarization
{
    public async Task<string> SummarizeAudio(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        string prompt = @"Please provide a summary for the audio.
Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
Do not make up any information that is not part of the audio and do not be verbose.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "audio/mp3", FileUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3" } }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST

Setelah menyiapkan lingkungan, Anda dapat menggunakan REST untuk menguji perintah teks. Contoh berikut mengirimkan permintaan ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region untuk memproses permintaan. Masukkan wilayah yang didukung. Untuk mengetahui daftar lengkap region yang didukung, lihat Lokasi yang tersedia.

    Klik untuk meluaskan sebagian daftar region yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • FILE_URI: URI atau URL file yang akan disertakan dalam perintah. Nilai yang dapat diterima mencakup hal berikut:
    • URI bucket Cloud Storage: Objek harus dapat dibaca secara publik atau berada di project Google Cloud yang sama dengan yang mengirim permintaan. Untuk gemini-1.5-pro dan gemini-1.5-flash, batas ukurannya adalah 2 GB. Untuk gemini-1.0-pro-vision, batas ukurannya adalah 20 MB.
    • URL HTTP: URL file harus dapat dibaca secara publik. Anda dapat menentukan satu file video, satu file audio, dan maksimal 10 file gambar per permintaan. File audio, file video, dan dokumen tidak boleh melebihi 15 MB.
    • URL video YouTube: Video YouTube harus dimiliki oleh akun yang Anda gunakan untuk login ke konsol Google Cloud atau bersifat publik. Hanya satu URL video YouTube yang didukung per permintaan.

    Saat menentukan fileURI, Anda juga harus menentukan jenis media (mimeType) file. Jika Kontrol Layanan VPC diaktifkan, menentukan URL file media untuk fileURI tidak didukung.

    Jika tidak memiliki file audio di Cloud Storage, Anda dapat menggunakan file berikut yang tersedia secara publik: gs://cloud-samples-data/generative-ai/audio/pixel.mp3 dengan jenis mime audio/mp3. Untuk mendengarkan audio ini, buka file MP3 contoh.

  • MIME_TYPE: Jenis media file yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima mencakup hal berikut:

    Klik untuk meluaskan jenis MIME

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • image/webp
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • TEXT
    Petunjuk teks yang akan disertakan dalam perintah. Misalnya, Please provide a summary for the audio. Provide chapter titles, be concise and short, no need to provide chapter summaries. Do not make up any information that is not part of the audio and do not be verbose.

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

cat > request.json << 'EOF'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
EOF

Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent"

PowerShell

Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

@'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

Anda akan menerima respons JSON yang mirip dengan berikut ini.

Perhatikan hal berikut di URL untuk contoh ini:
  • Gunakan metode generateContent untuk meminta respons ditampilkan setelah sepenuhnya dibuat. Untuk mengurangi persepsi latensi kepada audiens manusia, streaming respons saat dihasilkan menggunakan metode streamGenerateContent.
  • ID model multimodal terletak di akhir URL sebelum metode (misalnya, gemini-1.5-flash atau gemini-1.0-pro-vision). Contoh ini juga dapat mendukung model lainnya.

Konsol

Untuk mengirim perintah multimodal menggunakan konsol Google Cloud, lakukan hal berikut:

  1. Di bagian Vertex AI pada konsol Google Cloud, buka halaman Vertex AI Studio.

    Buka Vertex AI Studio

  2. Klik Open freeform.

  3. Opsional: Konfigurasikan model dan parameter:

    • Model: Pilih model.
    • Region: Pilih region yang ingin Anda gunakan.
    • Suhu: Gunakan penggeser atau kotak teks untuk memasukkan nilai suhu.

      Suhu digunakan untuk pengambilan sampel selama pembuatan respons, yang terjadi saat topP dan topK diterapkan. Suhu mengontrol tingkat keacakan dalam pemilihan token. Suhu yang lebih rendah cocok untuk perintah yang memerlukan respons yang kurang terbuka atau kreatif, sedangkan suhu yang lebih tinggi dapat memberikan hasil yang lebih beragam atau kreatif. Suhu 0 berarti token probabilitas tertinggi selalu dipilih. Dalam hal ini, respons untuk permintaan tertentu sebagian besar deterministik, tetapi sedikit variasi masih dapat dilakukan.

      Jika model menampilkan respons yang terlalu umum, terlalu pendek, atau model memberikan respons pengganti, coba tingkatkan suhunya.

    • Batas token output: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk batas output maksimum.

      Jumlah maksimum token yang dapat dibuat dalam respons. Token terdiri dari sekitar empat karakter. 100 token setara dengan sekitar 60-80 kata.

      Tentukan nilai yang lebih rendah untuk respons yang lebih singkat dan nilai yang lebih tinggi untuk respons yang berpotensi lebih panjang.

    • Tambahkan urutan perhentian: Opsional. Masukkan urutan perhentian, yang merupakan rangkaian karakter yang menyertakan spasi. Jika model menemukan urutan berhenti, pembuatan respons akan berhenti. Urutan perhentian tidak disertakan dalam respons, dan Anda dapat menambahkan hingga lima urutan perhentian.

  4. Opsional: Untuk mengonfigurasi parameter lanjutan, klik Advanced dan konfigurasikan sebagai berikut:

    Klik untuk meluaskan konfigurasi lanjutan

    • Top-K: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-K. (tidak didukung untuk Gemini 1.5).

      Top-K mengubah cara model memilih token untuk output. Top-K 1 berarti token yang dipilih berikutnya adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding greedy), sedangkan top-K 3 berarti token berikutnya dipilih di antara tiga token yang paling mungkin dengan menggunakan suhu.

      Untuk setiap langkah pemilihan token, token top-K dengan probabilitas tertinggi akan diambil sampelnya. Kemudian token akan difilter lebih lanjut berdasarkan top-P dengan token akhir yang dipilih menggunakan pengambilan sampel suhu.

      Tentukan nilai yang lebih rendah untuk respons acak yang lebih sedikit dan nilai yang lebih tinggi untuk respons acak yang lebih banyak.

    • Top-P: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-P. Token dipilih dari yang paling mungkin hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil yang paling sedikit variabelnya, tetapkan top-P ke 0.
    • Respons maksimum: Gunakan penggeser atau kotak teks untuk memasukkan nilai jumlah respons yang akan dihasilkan.
    • Streaming respons: Aktifkan untuk mencetak respons saat dihasilkan.
    • Nilai minimum filter keamanan: Pilih nilai minimum kemungkinan Anda melihat respons yang dapat berbahaya.
    • Aktifkan Grounding: Grounding tidak didukung untuk perintah multimodal.

  5. Klik Sisipkan Media, lalu pilih sumber untuk file Anda.

    Upload

    Pilih file yang ingin Anda upload, lalu klik Buka.

    Melalui URL

    Masukkan URL file yang ingin Anda gunakan, lalu klik Sisipkan.

    Cloud Storage

    Pilih bucket, lalu file dari bucket yang ingin Anda impor, lalu klik Select.

    Google Drive

    1. Pilih akun dan beri izin kepada Vertex AI Studio untuk mengakses akun Anda saat pertama kali Anda memilih opsi ini. Anda dapat mengupload beberapa file yang memiliki total ukuran hingga 10 MB. Satu file tidak boleh melebihi 7 MB.
    2. Klik file yang ingin Anda tambahkan.
    3. Klik Pilih.

      Thumbnail file akan ditampilkan di panel Prompt. Jumlah total token juga ditampilkan. Jika data perintah Anda melebihi batas token, token akan terpotong dan tidak disertakan dalam pemrosesan data Anda.

  6. Masukkan perintah teks Anda di panel Prompt.

  7. Opsional: Untuk melihat Token ID to text dan Token IDs, klik tokens count di panel Prompt.

  8. Klik Kirim.

  9. Opsional: Untuk menyimpan perintah Anda ke My prompts, klik Save.

  10. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Get code.

Transkripsi audio

Berikut ini cara menggunakan file audio untuk mentranskripsikan wawancara. Untuk mengaktifkan pemahaman stempel waktu untuk file audio saja, aktifkan parameter audioTimestamp di GenerationConfig.

Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Vertex AI SDK untuk Python.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan parameter stream di generate_content.

  response = model.generate_content(contents=[...], stream = True)
  

Untuk respons non-streaming, hapus parameter, atau tetapkan parameter ke False.

Kode contoh


import vertexai
from vertexai.generative_models import GenerativeModel, GenerationConfig, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

prompt = """
Can you transcribe this interview, in the format of timecode, speaker, caption.
Use speaker A, speaker B, etc. to identify speakers.
"""

audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

contents = [audio_file, prompt]

response = model.generate_content(contents, generation_config=GenerationConfig(audio_timestamp=True))

print(response.text)
# Example response:
# [00:00:00] Speaker A: Your devices are getting better over time...
# [00:00:16] Speaker B: Welcome to the Made by Google podcast, ...
# [00:01:00] Speaker A: So many features. I am a singer. ...
# [00:01:33] Speaker B: Amazing. DeCarlos, same question to you, ...

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Vertex AI Java SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Untuk respons non-streaming, gunakan metode generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Kode contoh

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class AudioInputTranscription {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    transcribeAudio(projectId, location, modelName);
  }

  // Analyzes the given audio input.
  public static String transcribeAudio(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String audioUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "Can you transcribe this interview, in the format of timecode, speaker, caption.\n"
                  + "Use speaker A, speaker B, etc. to identify speakers.",
              PartMaker.fromMimeTypeAndData("audio/mp3", audioUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);

      return output;
    }
  }
}

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai AI Generatif menggunakan Node.js SDK. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Node.js SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Untuk respons non-streaming, gunakan metode generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Kode contoh

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function transcript_audio(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/audio/pixel.mp3',
      mime_type: 'audio/mpeg',
    },
  };
  const textPart = {
    text: `
    Can you transcribe this interview, in the format of timecode, speaker, caption?
    Use speaker A, speaker B, etc. to identify speakers.`,
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  const resp = await generativeModel.generateContent(request);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Vertex AI Go SDK untuk Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode GenerateContentStream.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

Untuk respons non-streaming, gunakan metode GenerateContent.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

Kode contoh

import (
	"context"
	"errors"
	"fmt"
	"io"
	"mime"
	"path/filepath"

	"cloud.google.com/go/vertexai/genai"
)

// transcribeAudio generates a response into w
func transcribeAudio(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"

	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)

	// Optional: set an explicit temperature
	model.SetTemperature(0.4)

	// Given an audio file URL, prepare audio file as genai.Part
	img := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext("pixel.mp3")),
		FileURI:  "gs://cloud-samples-data/generative-ai/audio/pixel.mp3",
	}

	res, err := model.GenerateContent(ctx, img, genai.Text(`
			Can you transcribe this interview, in the format of timecode, speaker, caption.
			Use speaker A, speaker B, etc. to identify speakers.
	`))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated transcript:\n%s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di panduan memulai Vertex AI. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi C# Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model menghasilkan respons streaming atau respons non-streaming. Untuk respons streaming, Anda akan menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda akan menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan metode StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Untuk respons non-streaming, gunakan metode GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Untuk mengetahui informasi selengkapnya tentang cara server melakukan streaming respons, lihat Streaming RPC.

Kode contoh


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class AudioInputTranscription
{
    public async Task<string> TranscribeAudio(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        string prompt = @"Can you transcribe this interview, in the format of timecode, speaker, caption.
Use speaker A, speaker B, etc. to identify speakers.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "audio/mp3", FileUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3" } }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST

Setelah menyiapkan lingkungan, Anda dapat menggunakan REST untuk menguji perintah teks. Contoh berikut mengirimkan permintaan ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region untuk memproses permintaan. Masukkan wilayah yang didukung. Untuk mengetahui daftar lengkap region yang didukung, lihat Lokasi yang tersedia.

    Klik untuk meluaskan sebagian daftar region yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • FILE_URI: URI atau URL file yang akan disertakan dalam perintah. Nilai yang dapat diterima mencakup hal berikut:
    • URI bucket Cloud Storage: Objek harus dapat dibaca secara publik atau berada di project Google Cloud yang sama dengan yang mengirim permintaan. Untuk gemini-1.5-pro dan gemini-1.5-flash, batas ukurannya adalah 2 GB. Untuk gemini-1.0-pro-vision, batas ukurannya adalah 20 MB.
    • URL HTTP: URL file harus dapat dibaca secara publik. Anda dapat menentukan satu file video, satu file audio, dan maksimal 10 file gambar per permintaan. File audio, file video, dan dokumen tidak boleh melebihi 15 MB.
    • URL video YouTube: Video YouTube harus dimiliki oleh akun yang Anda gunakan untuk login ke konsol Google Cloud atau bersifat publik. Hanya satu URL video YouTube yang didukung per permintaan.

    Saat menentukan fileURI, Anda juga harus menentukan jenis media (mimeType) file. Jika Kontrol Layanan VPC diaktifkan, menentukan URL file media untuk fileURI tidak didukung.

    Jika tidak memiliki file audio di Cloud Storage, Anda dapat menggunakan file berikut yang tersedia secara publik: gs://cloud-samples-data/generative-ai/audio/pixel.mp3 dengan jenis mime audio/mp3. Untuk mendengarkan audio ini, buka file MP3 contoh.

  • MIME_TYPE: Jenis media file yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima mencakup hal berikut:

    Klik untuk meluaskan jenis MIME

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • image/webp
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • TEXT
    Petunjuk teks yang akan disertakan dalam perintah. Misalnya, Can you transcribe this interview, in the format of timecode, speaker, caption. Use speaker A, speaker B, etc. to identify speakers.

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

cat > request.json << 'EOF'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "generatationConfig": {
    "audioTimestamp": true
  }
}
EOF

Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent"

PowerShell

Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

@'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "generatationConfig": {
    "audioTimestamp": true
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

Anda akan menerima respons JSON yang mirip dengan berikut ini.

Perhatikan hal berikut di URL untuk contoh ini:
  • Gunakan metode generateContent untuk meminta respons ditampilkan setelah sepenuhnya dibuat. Untuk mengurangi persepsi latensi kepada audiens manusia, streaming respons saat dihasilkan menggunakan metode streamGenerateContent.
  • ID model multimodal terletak di akhir URL sebelum metode (misalnya, gemini-1.5-flash atau gemini-1.0-pro-vision). Contoh ini juga dapat mendukung model lainnya.

Konsol

Untuk mengirim perintah multimodal menggunakan konsol Google Cloud, lakukan hal berikut:

  1. Di bagian Vertex AI pada konsol Google Cloud, buka halaman Vertex AI Studio.

    Buka Vertex AI Studio

  2. Klik Open freeform.

  3. Opsional: Konfigurasikan model dan parameter:

    • Model: Pilih model.
    • Region: Pilih region yang ingin Anda gunakan.
    • Suhu: Gunakan penggeser atau kotak teks untuk memasukkan nilai suhu.

      Suhu digunakan untuk pengambilan sampel selama pembuatan respons, yang terjadi saat topP dan topK diterapkan. Suhu mengontrol tingkat keacakan dalam pemilihan token. Suhu yang lebih rendah cocok untuk perintah yang memerlukan respons yang kurang terbuka atau kreatif, sedangkan suhu yang lebih tinggi dapat memberikan hasil yang lebih beragam atau kreatif. Suhu 0 berarti token probabilitas tertinggi selalu dipilih. Dalam hal ini, respons untuk permintaan tertentu sebagian besar deterministik, tetapi sedikit variasi masih dapat dilakukan.

      Jika model menampilkan respons yang terlalu umum, terlalu pendek, atau model memberikan respons pengganti, coba tingkatkan suhunya.

    • Batas token output: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk batas output maksimum.

      Jumlah maksimum token yang dapat dibuat dalam respons. Token terdiri dari sekitar empat karakter. 100 token setara dengan sekitar 60-80 kata.

      Tentukan nilai yang lebih rendah untuk respons yang lebih singkat dan nilai yang lebih tinggi untuk respons yang berpotensi lebih panjang.

    • Tambahkan urutan perhentian: Opsional. Masukkan urutan perhentian, yang merupakan rangkaian karakter yang menyertakan spasi. Jika model menemukan urutan berhenti, pembuatan respons akan berhenti. Urutan perhentian tidak disertakan dalam respons, dan Anda dapat menambahkan hingga lima urutan perhentian.

  4. Opsional: Untuk mengonfigurasi parameter lanjutan, klik Advanced dan konfigurasikan sebagai berikut:

    Klik untuk meluaskan konfigurasi lanjutan

    • Top-K: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-K. (tidak didukung untuk Gemini 1.5).

      Top-K mengubah cara model memilih token untuk output. Top-K 1 berarti token yang dipilih berikutnya adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding greedy), sedangkan top-K 3 berarti token berikutnya dipilih di antara tiga token yang paling mungkin dengan menggunakan suhu.

      Untuk setiap langkah pemilihan token, token top-K dengan probabilitas tertinggi akan diambil sampelnya. Kemudian token akan difilter lebih lanjut berdasarkan top-P dengan token akhir yang dipilih menggunakan pengambilan sampel suhu.

      Tentukan nilai yang lebih rendah untuk respons acak yang lebih sedikit dan nilai yang lebih tinggi untuk respons acak yang lebih banyak.

    • Top-P: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-P. Token dipilih dari yang paling mungkin hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil yang paling sedikit variabelnya, tetapkan top-P ke 0.
    • Respons maksimum: Gunakan penggeser atau kotak teks untuk memasukkan nilai jumlah respons yang akan dihasilkan.
    • Streaming respons: Aktifkan untuk mencetak respons saat dihasilkan.
    • Nilai minimum filter keamanan: Pilih nilai minimum kemungkinan Anda melihat respons yang dapat berbahaya.
    • Aktifkan Grounding: Grounding tidak didukung untuk perintah multimodal.

  5. Klik Sisipkan Media, lalu pilih sumber untuk file Anda.

    Upload

    Pilih file yang ingin Anda upload, lalu klik Buka.

    Melalui URL

    Masukkan URL file yang ingin Anda gunakan, lalu klik Sisipkan.

    Cloud Storage

    Pilih bucket, lalu file dari bucket yang ingin Anda impor, lalu klik Select.

    Google Drive

    1. Pilih akun dan beri izin kepada Vertex AI Studio untuk mengakses akun Anda saat pertama kali Anda memilih opsi ini. Anda dapat mengupload beberapa file yang memiliki total ukuran hingga 10 MB. Satu file tidak boleh melebihi 7 MB.
    2. Klik file yang ingin Anda tambahkan.
    3. Klik Pilih.

      Thumbnail file akan ditampilkan di panel Prompt. Jumlah total token juga ditampilkan. Jika data perintah Anda melebihi batas token, token akan terpotong dan tidak disertakan dalam pemrosesan data Anda.

  6. Masukkan perintah teks Anda di panel Prompt.

  7. Opsional: Untuk melihat Token ID to text dan Token IDs, klik tokens count di panel Prompt.

  8. Klik Kirim.

  9. Opsional: Untuk menyimpan perintah Anda ke My prompts, klik Save.

  10. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Get code.

Menetapkan parameter model opsional

Setiap model memiliki kumpulan parameter opsional yang dapat Anda tetapkan. Untuk mengetahui informasi selengkapnya, lihat Parameter pembuatan konten.

Persyaratan audio

Model multimodal Gemini mendukung jenis MIME audio berikut:

Jenis MIME audio Gemini 1.5 Flash Gemini 1.5 Pro
AAC - audio/aac
FLAC - audio/flac
MP3 - audio/mp3
MPA - audio/m4a
MPEG - audio/mpeg
MPGA - audio/mpga
MP4 - audio/mp4
OPUS - audio/opus
PCM - audio/pcm
WAV - audio/wav
WEBM - audio/webm

Anda dapat menyertakan maksimal 1 file audio dalam permintaan perintah.

Batasan

Meskipun model multimodal Gemini sangat canggih dalam banyak kasus penggunaan multimodal, penting untuk memahami keterbatasan model:

  • Pengenalan suara non-ucapan: Model yang mendukung audio mungkin melakukan kesalahan saat mengenali suara yang bukan ucapan.
  • Stempel waktu khusus audio: Untuk membuat stempel waktu secara akurat untuk file khusus audio, Anda harus mengonfigurasi parameter audio_timestamp di generation_config.
  • Tanda baca transkripsi: (jika menggunakan Gemini 1.5 Flash) Model mungkin menampilkan transkripsi yang tidak menyertakan tanda baca.

Langkah selanjutnya