Mengirim permintaan prompt multimodal

Kelompok model Gemini mencakup model yang dapat digunakan dengan permintaan perintah multimodal. Istilah multimodal menunjukkan bahwa Anda dapat menggunakan lebih dari satu modalitas, atau jenis input, dalam sebuah perintah. Model yang bukan permintaan multimodal hanya menerima teks dengan teks. Modalitas dapat mencakup teks, audio, video, dan lainnya.

Ada beberapa cara untuk mengimplementasikan solusi multimodal menggunakan Gemini API, termasuk Python, Node.js, Java, dan Go SDK, konsol Google Cloud, serta REST API. Contoh kode nanti dalam dokumen ini menunjukkan cara membuat solusi multimodal menggunakan opsi ini.

Model multimodal Gemini adalah:

  • Gemini 1.0 Pro Vision
  • Gemini 1.5 Pro (Pratinjau)

Tabel berikut menunjukkan modalitas yang digunakan oleh setiap Gemini API multimodal dalam permintaan prompt.

Model Teks Kode Gambar Audio Video Video/audio PDF
Gemini 1.0 Pro
Gemini 1.0 Pro Vision
Gemini 1.5 Pro (Pratinjau)

Untuk menjelajahi model multimodal di Konsol Google Cloud, pilih kartu model gemini-1.0-pro-vision atau gemini-1.5-pro di Model Garden.

Pergi ke Model Garden


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

Perbedaan model multimodal

Perbedaan antara model multimodal Gemini dijelaskan dalam tabel berikut. Anda dapat menggunakan informasi ini untuk membantu memutuskan model mana yang terbaik untuk Anda.

Text

Berikut adalah beberapa perbedaan modalitas teks antara model multimodal Gemini:

Model Detail modalitas teks
Gemini 1.0 Pro Vision Jumlah maksimum token adalah 16.384,atau sekitar 128 buku halaman, dengan asumsi 250 kata per halaman. Jumlah maksimum ini mencakup token input dan output. Jumlah maksimum token output adalah 2.048.
Gemini 1.5 Pro (Pratinjau) Panjang konteksnya adalah 1 juta token yang setara dengan sekitar 4.000 halaman buku. Hal ini memungkinkan model menghasilkan teks berformat panjang, seperti buku, banyak PDF, atau panduan pengguna.

Code

Berikut adalah beberapa perbedaan antara model multimodal Gemini saat menangani kode:

Model Detail modalitas kode
Gemini 1.0 Pro Vision Jumlah maksimum token adalah 16.384,atau sekitar 128 buku halaman, dengan asumsi 250 kata per halaman. Jumlah maksimum ini mencakup token input dan output. Jumlah maksimum token output adalah 2.048.
Gemini 1.5 Pro (Pratinjau) Panjang konteksnya adalah 1 juta token yang memungkinkan model berfungsi dengan seluruh codebase atau seluruh codebase aplikasi.

Gambar

Berikut adalah beberapa perbedaan modalitas gambar antara model multimodal Gemini:

Model Detail modalitas gambar
Gemini 1.0 Pro Vision Jumlah maksimum gambar per perintah adalah 16.
Gemini 1.5 Pro (Pratinjau) Jumlah maksimum gambar per perintah adalah 3.000.

Audio (hanya ucapan)

Berikut adalah beberapa perbedaan modalitas audio antara model multimodal Gemini:

Model Detail modalitas audio
Gemini 1.0 Pro Vision Audio tidak didukung.
Gemini 1.5 Pro (Pratinjau) Jumlah jam audio maksimum per perintah adalah sekitar 8,4 jam, atau hingga 1 juta token. Ucapan dapat dipahami untuk ringkasan, transkripsi, dan terjemahan audio.

Video

Berikut adalah beberapa perbedaan modalitas video antara model multimodal Gemini:

Model Detail modalitas video
Gemini 1.0 Pro Vision Durasi video maksimum adalah 2 menit. Jumlah maksimum video per perintah adalah 1. Audio dalam video diabaikan.
Gemini 1.5 Pro (Pratinjau) Durasi video maksimum saat menyertakan audio adalah sekitar 50 menit. Durasi video maksimum untuk video tanpa audio adalah 1 jam. Video maksimum per perintah adalah 10. Model ini dapat menggunakan data video dan audio untuk menjawab perintah tersebut. Misalnya, rangkum video menggunakan konten visual dan ucapan dalam video.

PDF

Berikut adalah beberapa perbedaan modalitas PDF antara model multimodal Gemini:

Model Detail modalitas PDF
Gemini 1.0 Pro Vision Jumlah maksimum halaman per perintah adalah 16. Ukuran file maksimum untuk PDF adalah 50 MB.
Gemini 1.5 Pro (Pratinjau) Jumlah maksimum halaman per perintah adalah 300. Ukuran file maksimum untuk PDF adalah 50 MB.

Panduan memulai

Gunakan contoh kode berikut untuk mulai menggunakan Gemini API. Setiap contoh kode menunjukkan cara bekerja dengan modalitas yang berbeda. Beberapa contoh kode dalam dokumen ini berfungsi dengan semua model multimodal Gemini, dan beberapa contoh hanya berfungsi dengan Gemini 1.5 Pro (Pratinjau). Setiap contoh kode menentukan model yang akan digunakan.

Untuk menguji dan iterasi pada prompt multimodal, sebaiknya gunakan Konsol Google Cloud. Untuk mengirim prompt multimodal secara terprogram ke model, Anda dapat menggunakan REST API, Vertex AI SDK untuk Python, atau salah satu library dan SDK lain yang didukung yang ditampilkan di tab berikut.

Satu gambar

Kode contoh pada setiap tab berikut menunjukkan cara yang berbeda untuk mengidentifikasi isi yang ada di dalam gambar. Contoh ini berfungsi dengan semua model multimodal Gemini.

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 Vertex AI SDK untuk Python API.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah saat dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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

def generate_text(project_id: str, location: str) -> None:
    # Initialize Vertex AI
    vertexai.init(project=project_id, location=location)

    # Load the model
    model = GenerativeModel(model_name="gemini-pro-vision")

    # Load example image
    image_url = "gs://generativeai-downloads/images/scones.jpg"
    image_content = Part.from_uri(image_url, "image/jpeg")

    # Query the model
    response = model.generate_content([image_content, "what is this image?"])
    print(response)

    return response.text

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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 createNonStreamingMultipartContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-vision',
  image = 'gs://generativeai-downloads/images/scones.jpg',
  mimeType = 'image/jpeg'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // For images, the SDK supports both Google Cloud Storage URI and base64 strings
  const filePart = {
    fileData: {
      fileUri: image,
      mimeType: mimeType,
    },
  };

  const textPart = {
    text: 'what is shown in this image?',
  };

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

  console.log('Prompt Text:');
  console.log(request.contents[0].parts[1].text);

  console.log('Non-Streaming Response Text:');
  // Create the response stream
  const responseStream =
    await generativeVisionModel.generateContentStream(request);

  // Wait for the response stream to complete
  const aggregatedResponse = await responseStream.response;

  // Select the text from the response
  const fullTextResponse =
    aggregatedResponse.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  public ResponseStream 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.util.Base64;

public class MultimodalQuery {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.0-pro-vision";
    String dataImageBase64 = "your-base64-encoded-image";

    String output = multimodalQuery(projectId, location, modelName, dataImageBase64);
    System.out.println(output);
  }

  // Ask the model to recognise the brand associated with the logo image.
  public static String multimodalQuery(String projectId, String location, String modelName,
      String dataImageBase64) throws Exception {
    // 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 output;
      byte[] imageBytes = Base64.getDecoder().decode(dataImageBase64);

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "What is this image?",
              PartMaker.fromMimeTypeAndData("image/jpg", imageBytes)
          ));

      output = ResponseHandler.getText(response);
      return output;
    }
  }
}

REST

Anda dapat menggunakan REST untuk menguji perintah teks menggunakan Vertex AI API untuk mengirim permintaan POST ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • GENERATE_RESPONSE_METHOD: Jenis respons yang Anda inginkan untuk dibuat oleh model. Pilih metode yang menghasilkan cara menampilkan respons model yang Anda inginkan:
    • streamGenerateContent: Respons di-streaming saat dihasilkan untuk mengurangi persepsi latensi kepada audiens manusia.
    • generateContent: Respons ditampilkan setelah dibuat sepenuhnya.
  • LOCATION: Region untuk memproses permintaan. Opsi yang tersedia mencakup hal berikut:

    Klik untuk meluaskan wilayah yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • MODEL_ID: ID model dari model multimodal yang ingin Anda gunakan. Opsinya adalah:
    • gemini-1.0-pro-vision
  • ROLE: Peran dalam percakapan yang terkait dengan konten. Penentuan peran diperlukan bahkan dalam kasus penggunaan satu giliran. Nilai yang dapat diterima mencakup:
    • USER: Menentukan konten yang Anda kirimkan.
  • TEXT: Teks petunjuk yang akan disertakan dalam perintah.
  • B64_BASE: Encoding base64 gambar, PDF, atau video yang akan disertakan secara inline dalam perintah. Saat menyertakan media inline, Anda juga harus menentukan MIMETYPE.
  • FILE_URI: URI Cloud Storage gambar atau video yang akan disertakan dalam perintah. Bucket yang menyimpan file harus berada di project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan MIMETYPE.
  • MIME_TYPE: Jenis media gambar, PDF, atau video yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima mencakup:

    Klik untuk meluaskan jenis MIME

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: Kategori keamanan yang batasnya akan dikonfigurasi. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas kategori keamanan

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: Nilai minimum untuk respons pemblokiran yang dapat termasuk dalam kategori keamanan yang ditentukan berdasarkan probabilitas. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas nilai minimum pemblokiran

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (default)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE memblokir paling banyak, sedangkan BLOCK_ONLY_HIGH memblokir paling sedikit.
  • TEMPERATURE: 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 penggantian, coba tingkatkan suhu.

  • TOP_P: Top-P mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin (lihat top-K) hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Misalnya, jika token A, B, dan C memiliki probabilitas 0,3, 0,2, dan 0,1 dengan nilai top-P adalah 0.5, model akan memilih A atau B sebagai token berikutnya dengan menggunakan suhu dan mengecualikan C sebagai kandidat.

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

  • TOP_K: Top-K mengubah cara model memilih token untuk output. Top-K dari 1 berarti token yang dipilih berikutnya adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding greedy), sedangkan nilai top-K dari 3 berarti token berikutnya dipilih di antara tiga token yang paling mungkin 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.

  • MAX_OUTPUT_TOKENS: 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 pendek dan nilai yang lebih tinggi untuk respons yang berpotensi lebih lama.

  • STOP_SEQUENCES: Menentukan daftar string yang memberi tahu model untuk berhenti menghasilkan teks jika salah satu string ditemukan dalam respons. Jika string muncul beberapa kali dalam respons, respons akan dipotong di tempatnya pertama kali ditemukan. String peka huruf besar/kecil.

    Misalnya, jika berikut adalah respons yang ditampilkan ketika stopSequences tidak ditentukan:

    public static string reverse(string myString)

    Kemudian, respons yang ditampilkan dengan stopSequences ditetapkan ke ["Str", "reverse"] adalah:

    public static string

Metode HTTP dan URL:

POST http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

Isi JSON permintaan:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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 "http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

Anda akan melihat respons JSON yang mirip seperti berikut:

Contoh perintah curl

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
http://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

PDF tunggal

Tab berikut menunjukkan cara menyertakan PDF dalam permintaan prompt menggunakan Python SDK. Contoh PDF ini dapat digunakan dengan semua model multimodal Gemini.

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 Vertex AI SDK untuk Python API.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah saat dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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 lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

prompt = """
Your are a very professional document summarization specialist.
Please summarize the given document.
"""

pdf_file_uri = "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf"
pdf_file = Part.from_uri(pdf_file_uri, mime_type="application/pdf")
contents = [pdf_file, prompt]

response = model.generate_content(contents)
print(response.text)

Video tunggal

Setiap tab berikut menunjukkan cara yang berbeda untuk menyertakan video dalam permintaan perintah. Contoh PDF ini berfungsi dengan semua model multimodal Gemini.

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 Vertex AI SDK untuk Python API.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah saat dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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

def generate_text(project_id: str, location: str) -> str:
    # Initialize Vertex AI
    vertexai.init(project=project_id, location=location)
    # Load the model
    vision_model = GenerativeModel("gemini-1.0-pro-vision")
    # Generate text
    response = vision_model.generate_content(
        [
            Part.from_uri(
                "gs://cloud-samples-data/video/animals.mp4", mime_type="video/mp4"
            ),
            "What is in the video?",
        ]
    )
    print(response)
    return response.text

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API C# Vertex AI.

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


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

public class MultimodalVideoInput
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.0-pro-vision"
    )
    {
        // Create client
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        // Prompt
        string prompt = "What's in the video?";
        string videoUri = "gs://cloud-samples-data/video/animals.mp4";

        // Initialize request argument(s)
        var content = new Content
        {
            Role = "USER"
        };
        content.Parts.AddRange(new List<Part>()
        {
            new() {
                Text = prompt
            },
            new() {
                FileData = new() {
                    MimeType = "video/mp4",
                    FileUri = videoUri
                }
            }
        });

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}"
        };
        generateContentRequest.Contents.Add(content);

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        // Read streaming responses from server until complete
        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
        }
        return fullText.ToString();
    }
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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 sendMultiModalPromptWithVideo(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-vision'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // Pass multimodal prompt
  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            fileData: {
              fileUri: 'gs://cloud-samples-data/video/animals.mp4',
              mimeType: 'video/mp4',
            },
          },
          {
            text: 'What is in the video?',
          },
        ],
      },
    ],
  };

  // Create the response
  const response = await generativeVisionModel.generateContent(request);
  // Wait for the response to complete
  const aggregatedResponse = await response.response;
  // Select the text from the response
  const fullTextResponse =
    aggregatedResponse.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  public ResponseStream 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 MultimodalVideoInput {

  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.0-pro-vision";

    multimodalVideoInput(projectId, location, modelName);
  }

  // Analyzes the given video input.
  public static void multimodalVideoInput(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 videoUri = "gs://cloud-samples-data/video/animals.mp4";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "What is in the video?",
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri)
          ));

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

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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.go888ogle.com.fqhub.com/go/vertexai/genai"
)

// generateMultimodalContent generates a response into w, based upon the prompt
// and video provided.
// video is a Google Cloud Storage path starting with "gs://"
func generateMultimodalContent(w io.Writer, prompt, video, projectID, location, modelName string) error {
	// prompt := "What is in this video?"
	// video := "gs://cloud-samples-data/video/animals.mp4"
	// location := "us-central1"
	// modelName := "gemini-1.0-pro-vision"
	ctx := context.Background()

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

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

	// Given a video file URL, prepare video file as genai.Part
	img := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext(video)),
		FileURI:  video,
	}

	res, err := model.GenerateContent(ctx, img, genai.Text(prompt))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %v", err)
	}

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

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

REST

Anda dapat menggunakan REST untuk menguji perintah teks menggunakan Vertex AI API untuk mengirim permintaan POST ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • GENERATE_RESPONSE_METHOD: Jenis respons yang Anda inginkan untuk dibuat oleh model. Pilih metode yang menghasilkan cara menampilkan respons model yang Anda inginkan:
    • streamGenerateContent: Respons di-streaming saat dihasilkan untuk mengurangi persepsi latensi kepada audiens manusia.
    • generateContent: Respons ditampilkan setelah dibuat sepenuhnya.
  • LOCATION: Region untuk memproses permintaan. Opsi yang tersedia mencakup hal berikut:

    Klik untuk meluaskan wilayah yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • MODEL_ID: ID model dari model multimodal yang ingin Anda gunakan. Opsinya adalah:
    • gemini-1.0-pro-vision
  • ROLE: Peran dalam percakapan yang terkait dengan konten. Penentuan peran diperlukan bahkan dalam kasus penggunaan satu giliran. Nilai yang dapat diterima mencakup:
    • USER: Menentukan konten yang Anda kirimkan.
  • TEXT: Teks petunjuk yang akan disertakan dalam perintah.
  • B64_BASE: Encoding base64 gambar, PDF, atau video yang akan disertakan secara inline dalam perintah. Saat menyertakan media inline, Anda juga harus menentukan MIMETYPE.
  • FILE_URI: URI Cloud Storage gambar atau video yang akan disertakan dalam perintah. Bucket yang menyimpan file harus berada di project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan MIMETYPE.
  • MIME_TYPE: Jenis media gambar, PDF, atau video yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima mencakup:

    Klik untuk meluaskan jenis MIME

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: Kategori keamanan yang batasnya akan dikonfigurasi. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas kategori keamanan

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: Nilai minimum untuk respons pemblokiran yang dapat termasuk dalam kategori keamanan yang ditentukan berdasarkan probabilitas. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas nilai minimum pemblokiran

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (default)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE memblokir paling banyak, sedangkan BLOCK_ONLY_HIGH memblokir paling sedikit.
  • TEMPERATURE: 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 penggantian, coba tingkatkan suhu.

  • TOP_P: Top-P mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin (lihat top-K) hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Misalnya, jika token A, B, dan C memiliki probabilitas 0,3, 0,2, dan 0,1 dengan nilai top-P adalah 0.5, model akan memilih A atau B sebagai token berikutnya dengan menggunakan suhu dan mengecualikan C sebagai kandidat.

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

  • TOP_K: Top-K mengubah cara model memilih token untuk output. Top-K dari 1 berarti token yang dipilih berikutnya adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding greedy), sedangkan nilai top-K dari 3 berarti token berikutnya dipilih di antara tiga token yang paling mungkin 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.

  • MAX_OUTPUT_TOKENS: 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 pendek dan nilai yang lebih tinggi untuk respons yang berpotensi lebih lama.

  • STOP_SEQUENCES: Menentukan daftar string yang memberi tahu model untuk berhenti menghasilkan teks jika salah satu string ditemukan dalam respons. Jika string muncul beberapa kali dalam respons, respons akan dipotong di tempatnya pertama kali ditemukan. String peka huruf besar/kecil.

    Misalnya, jika berikut adalah respons yang ditampilkan ketika stopSequences tidak ditentukan:

    public static string reverse(string myString)

    Kemudian, respons yang ditampilkan dengan stopSequences ditetapkan ke ["Str", "reverse"] adalah:

    public static string

Metode HTTP dan URL:

POST http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

Isi JSON permintaan:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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 "http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

Anda akan melihat respons JSON yang mirip seperti berikut:

Contoh perintah curl

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
http://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

Konsol

Untuk mengirim prompt 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. Di bagian Prompt design (single turn), klik Open.
  3. Konfigurasi model dan parameter:

    • Region: Pilih region yang ingin Anda gunakan.
    • Model: Pilih Gemini Pro Vision.
    • 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 penggantian, coba tingkatkan suhu.

    • Batas token: Gunakan penggeser atau kotak teks untuk memasukkan nilai 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 pendek dan nilai yang lebih tinggi untuk respons yang berpotensi lebih lama.

    • Menambahkan urutan perhentian: Masukkan urutan perhentian, yang merupakan serangkaian karakter (termasuk spasi) yang menghentikan pembuatan respons jika model menemuinya. Urutan tidak disertakan sebagai bagian dari respons. Anda dapat menambahkan hingga lima urutan perhentian.
  4. Opsional: Untuk mengonfigurasi parameter lanjutan, klik Advanced, lalu konfigurasikan sebagai berikut:
  5. Klik untuk meluaskan konfigurasi lanjutan

    • Top-K: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-K.

      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 ke yang terkecil hingga jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil variabel terkecil, tetapkan top-P ke 0.
  6. Konsol Google Cloud hanya mendukung streaming, yang melibatkan penerimaan respons terhadap perintah saat dibuat. Anda siap memasukkan pesan di kotak pesan untuk memulai percakapan dengan model.

    Model ini menggunakan pesan sebelumnya sebagai konteks untuk respons baru. Untuk menyertakan gambar, PDF, atau video dalam perintah, klik ikon .

    Untuk mempelajari prompt multimodal, lihat Mendesain prompt multimodal.

  7. Opsional: Untuk menyimpan perintah ke Perintah saya, klik Simpan.
  8. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Get code.
  9. Opsional: Untuk menghapus semua pesan sebelumnya, klik Hapus percakapan

Audio tunggal

Berikut ini cara menggunakan file audio untuk meringkas podcast. Contoh ini hanya berfungsi dengan Gemini 1.5 Pro (Pratinjau).

import vertexai
from vertexai.generative_models import GenerativeModel, Part

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

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

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.
"""

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)

Contoh lanjutan

Contoh berikut lebih kompleks daripada contoh sebelumnya.

Beberapa gambar

Setiap tab berikut menunjukkan cara yang berbeda untuk menyertakan beberapa gambar dalam permintaan perintah. Contoh gambar ini berfungsi dengan semua model multimodal Gemini.

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 Vertex AI SDK untuk Python API.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah saat dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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 http.client
import typing
import urllib.request
from vertexai.generative_models import GenerativeModel, Image

# create helper function
def load_image_from_url(image_url: str) -> Image:
    with urllib.request.urlopen(image_url) as response:
        response = typing.cast(http.client.HTTPResponse, response)
        image_bytes = response.read()
    return Image.from_bytes(image_bytes)

# Load images from Cloud Storage URI
landmark1 = load_image_from_url(
    "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"
)
landmark2 = load_image_from_url(
    "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png"
)
landmark3 = load_image_from_url(
    "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png"
)

# Pass multimodal prompt
model = GenerativeModel("gemini-1.0-pro-vision")
response = model.generate_content(
    [
        landmark1,
        "city: Rome, Landmark: the Colosseum",
        landmark2,
        "city: Beijing, Landmark: Forbidden City",
        landmark3,
    ]
)
print(response)

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API C# Vertex AI.

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


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using Google.Protobuf;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public class MultimodalMultiImage
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.0-pro-vision"
    )
    {
        // Create client
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        // Images
        ByteString colosseum = await ReadImageFileAsync(
            "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png");

        ByteString forbiddenCity = await ReadImageFileAsync(
            "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png");

        ByteString christRedeemer = await ReadImageFileAsync(
            "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png");

        // Initialize request argument(s)
        var content = new Content
        {
            Role = "USER"
        };
        content.Parts.AddRange(new List<Part>()
        {
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = colosseum

                }
            },
            new()
            {
                Text = "city: Rome, Landmark: the Colosseum"
            },
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = forbiddenCity
                }
            },
            new()
            {
                Text = "city: Beijing, Landmark: Forbidden City"
            },
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = christRedeemer
                }
            }
        });

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}"
        };
        generateContentRequest.Contents.Add(content);

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        // Read streaming responses from server until complete
        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
        }
        return fullText.ToString();
    }

    private static async Task<ByteString> ReadImageFileAsync(string url)
    {
        using HttpClient client = new();
        using var response = await client.GetAsync(url);
        byte[] imageBytes = await response.Content.ReadAsByteArrayAsync();
        return ByteString.CopyFrom(imageBytes);
    }
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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');
const axios = require('axios');

async function getBase64(url) {
  const image = await axios.get(url, {responseType: 'arraybuffer'});
  return Buffer.from(image.data).toString('base64');
}

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function sendMultiModalPromptWithImage(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-vision'
) {
  // For images, the SDK supports base64 strings
  const landmarkImage1 = await getBase64(
    'http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png'
  );
  const landmarkImage2 = await getBase64(
    'http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png'
  );
  const landmarkImage3 = await getBase64(
    'http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png'
  );

  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // Pass multimodal prompt
  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            inlineData: {
              data: landmarkImage1,
              mimeType: 'image/png',
            },
          },
          {
            text: 'city: Rome, Landmark: the Colosseum',
          },

          {
            inlineData: {
              data: landmarkImage2,
              mimeType: 'image/png',
            },
          },
          {
            text: 'city: Beijing, Landmark: Forbidden City',
          },
          {
            inlineData: {
              data: landmarkImage3,
              mimeType: 'image/png',
            },
          },
        ],
      },
    ],
  };

  // Create the response
  const response = await generativeVisionModel.generateContent(request);
  // Wait for the response to complete
  const aggregatedResponse = await response.response;
  // Select the text from the response
  const fullTextResponse =
    aggregatedResponse.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim setelah semua token output dibuat.

Untuk respons streaming, gunakan metode generateContentStream.

  public ResponseStream 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.Content;
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.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MultimodalMultiImage {

  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.0-pro-vision";

    multimodalMultiImage(projectId, location, modelName);
  }

  // Generates content from multiple input images.
  public static void multimodalMultiImage(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)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      Content content = ContentMaker.fromMultiModalData(
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png")),
          "city: Rome, Landmark: the Colosseum",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png")),
          "city: Beijing, Landmark: Forbidden City",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png"))
      );

      GenerateContentResponse response = model.generateContent(content);

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

  // Reads the image data from the given URL.
  public static byte[] readImageFile(String url) throws IOException {
    URL urlObj = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
    connection.setRequestMethod("GET");

    int responseCode = connection.getResponseCode();

    if (responseCode == HttpURLConnection.HTTP_OK) {
      InputStream inputStream = connection.getInputStream();
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

      byte[] buffer = new byte[1024];
      int bytesRead;
      while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
      }

      return outputStream.toByteArray();
    } else {
      throw new RuntimeException("Error fetching file: " + responseCode);
    }
  }
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau respons non-streaming. Streaming melibatkan penerimaan respons terhadap perintah setelah dihasilkan. Artinya, segera setelah model menghasilkan token output, token output akan dikirim. Respons non-streaming terhadap perintah hanya dikirim 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"
	"fmt"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
	"strings"

	"cloud.go888ogle.com.fqhub.com/go/vertexai/genai"
)

func main() {
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	location := "us-central1"
	modelName := "gemini-1.0-pro-vision"
	temperature := 0.4

	if projectID == "" {
		log.Fatal("require environment variable GOOGLE_CLOUD_PROJECT")
	}

	// construct this multimodal prompt:
	// [image of colosseum] city: Rome, Landmark: the Colosseum
	// [image of forbidden city]  city: Beijing, Landmark: the Forbidden City
	// [new image]

	// create prompt image parts
	// colosseum
	colosseum, err := partFromImageURL("http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}
	// forbidden city
	forbiddenCity, err := partFromImageURL("http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}
	// new image
	newImage, err := partFromImageURL("http://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}

	// create a multimodal (multipart) prompt
	prompt := []genai.Part{
		colosseum,
		genai.Text("city: Rome, Landmark: the Colosseum "),
		forbiddenCity,
		genai.Text("city: Beijing, Landmark: the Forbidden City "),
		newImage,
	}

	// generate the response
	err = generateMultimodalContent(os.Stdout, prompt, projectID, location, modelName, float32(temperature))
	if err != nil {
		log.Fatalf("unable to generate: %v", err)
	}
}

// generateMultimodalContent provide a generated response using multimodal input
func generateMultimodalContent(w io.Writer, parts []genai.Part, projectID, location, modelName string, temperature float32) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

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

	res, err := model.GenerateContent(ctx, parts...)
	if err != nil {
		return fmt.Errorf("unable to generate contents: %v", err)
	}

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

	return nil
}

// partFromImageURL create a multimodal prompt part from an image URL
func partFromImageURL(image string) (genai.Part, error) {
	var img genai.Blob

	imageURL, err := url.Parse(image)
	if err != nil {
		return img, err
	}
	res, err := http.Get(image)
	if err != nil || res.StatusCode != 200 {
		return img, err
	}
	defer res.Body.Close()
	data, err := io.ReadAll(res.Body)
	if err != nil {
		return img, fmt.Errorf("unable to read from http: %v", err)
	}

	position := strings.LastIndex(imageURL.Path, ".")
	if position == -1 {
		return img, fmt.Errorf("couldn't find a period to indicate a file extension")
	}
	ext := imageURL.Path[position+1:]

	img = genai.ImageData(ext, data)
	return img, nil
}

REST

Anda dapat menggunakan REST untuk menguji perintah teks menggunakan Vertex AI API untuk mengirim permintaan POST ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • GENERATE_RESPONSE_METHOD: Jenis respons yang Anda inginkan untuk dibuat oleh model. Pilih metode yang menghasilkan cara menampilkan respons model yang Anda inginkan:
    • streamGenerateContent: Respons di-streaming saat dihasilkan untuk mengurangi persepsi latensi kepada audiens manusia.
    • generateContent: Respons ditampilkan setelah dibuat sepenuhnya.
  • LOCATION: Region untuk memproses permintaan. Opsi yang tersedia mencakup hal berikut:

    Klik untuk meluaskan wilayah yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • MODEL_ID: ID model dari model multimodal yang ingin Anda gunakan. Opsinya adalah:
    • gemini-1.0-pro-vision
  • ROLE: Peran dalam percakapan yang terkait dengan konten. Penentuan peran diperlukan bahkan dalam kasus penggunaan satu giliran. Nilai yang dapat diterima mencakup:
    • USER: Menentukan konten yang Anda kirimkan.
  • TEXT: Teks petunjuk yang akan disertakan dalam perintah.
  • B64_BASE: Encoding base64 gambar, PDF, atau video yang akan disertakan secara inline dalam perintah. Saat menyertakan media inline, Anda juga harus menentukan MIMETYPE.
  • FILE_URI: URI Cloud Storage gambar atau video yang akan disertakan dalam perintah. Bucket yang menyimpan file harus berada di project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan MIMETYPE.
  • MIME_TYPE: Jenis media gambar, PDF, atau video yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima mencakup:

    Klik untuk meluaskan jenis MIME

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: Kategori keamanan yang batasnya akan dikonfigurasi. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas kategori keamanan

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: Nilai minimum untuk respons pemblokiran yang dapat termasuk dalam kategori keamanan yang ditentukan berdasarkan probabilitas. Nilai yang dapat diterima mencakup:

    Klik untuk memperluas nilai minimum pemblokiran

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (default)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE memblokir paling banyak, sedangkan BLOCK_ONLY_HIGH memblokir paling sedikit.
  • TEMPERATURE: 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 penggantian, coba tingkatkan suhu.

  • TOP_P: Top-P mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin (lihat top-K) hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Misalnya, jika token A, B, dan C memiliki probabilitas 0,3, 0,2, dan 0,1 dengan nilai top-P adalah 0.5, model akan memilih A atau B sebagai token berikutnya dengan menggunakan suhu dan mengecualikan C sebagai kandidat.

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

  • TOP_K: Top-K mengubah cara model memilih token untuk output. Top-K dari 1 berarti token yang dipilih berikutnya adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding greedy), sedangkan nilai top-K dari 3 berarti token berikutnya dipilih di antara tiga token yang paling mungkin 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.

  • MAX_OUTPUT_TOKENS: 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 pendek dan nilai yang lebih tinggi untuk respons yang berpotensi lebih lama.

  • STOP_SEQUENCES: Menentukan daftar string yang memberi tahu model untuk berhenti menghasilkan teks jika salah satu string ditemukan dalam respons. Jika string muncul beberapa kali dalam respons, respons akan dipotong di tempatnya pertama kali ditemukan. String peka huruf besar/kecil.

    Misalnya, jika berikut adalah respons yang ditampilkan ketika stopSequences tidak ditentukan:

    public static string reverse(string myString)

    Kemudian, respons yang ditampilkan dengan stopSequences ditetapkan ke ["Str", "reverse"] adalah:

    public static string

Metode HTTP dan URL:

POST http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

Isi JSON permintaan:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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 "http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

Anda akan melihat respons JSON yang mirip seperti berikut:

Contoh perintah curl

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
http://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

Konsol

Untuk mengirim prompt 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. Di bagian Prompt design (single turn), klik Open.
  3. Konfigurasi model dan parameter:

    • Region: Pilih region yang ingin Anda gunakan.
    • Model: Pilih Gemini Pro Vision.
    • 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 penggantian, coba tingkatkan suhu.

    • Batas token: Gunakan penggeser atau kotak teks untuk memasukkan nilai 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 pendek dan nilai yang lebih tinggi untuk respons yang berpotensi lebih lama.

    • Menambahkan urutan perhentian: Masukkan urutan perhentian, yang merupakan serangkaian karakter (termasuk spasi) yang menghentikan pembuatan respons jika model menemuinya. Urutan tidak disertakan sebagai bagian dari respons. Anda dapat menambahkan hingga lima urutan perhentian.
  4. Opsional: Untuk mengonfigurasi parameter lanjutan, klik Advanced, lalu konfigurasikan sebagai berikut:
  5. Klik untuk meluaskan konfigurasi lanjutan

    • Top-K: Gunakan penggeser atau kotak teks untuk memasukkan nilai untuk top-K.

      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 ke yang terkecil hingga jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil variabel terkecil, tetapkan top-P ke 0.
  6. Konsol Google Cloud hanya mendukung streaming, yang melibatkan penerimaan respons terhadap perintah saat dibuat. Anda siap memasukkan pesan di kotak pesan untuk memulai percakapan dengan model.

    Model ini menggunakan pesan sebelumnya sebagai konteks untuk respons baru. Untuk menyertakan gambar, PDF, atau video dalam perintah, klik ikon .

    Untuk mempelajari prompt multimodal, lihat Mendesain prompt multimodal.

  7. Opsional: Untuk menyimpan perintah ke Perintah saya, klik Simpan.
  8. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Get code.
  9. Opsional: Untuk menghapus semua pesan sebelumnya, klik Hapus percakapan

Audio dengan stempel waktu

Berikut ini cara menggunakan file audio untuk membuat transkripsi podcast dengan stempel waktu. Contoh ini hanya berfungsi dengan Gemini 1.5 Pro (Pratinjau).

import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

prompt = """
  Can you transcribe this interview, in the format of timecode, speaker, caption.
  Use speaker A, speaker B, etc. to identify the 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)
print(response.text)

Video dengan audio

Berikut ini cara meringkas file video dengan audio dan menampilkan segmen dengan stempel waktu. Contoh ini hanya berfungsi dengan Gemini 1.5 Pro (Pratinjau).

import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

prompt = """
  Provide a description of the video.
  The description should also contain anything important which people say in the video.
"""

video_file_uri = "gs://cloud-samples-data/generative-ai/video/pixel8.mp4"
video_file = Part.from_uri(video_file_uri, mime_type="video/mp4")

contents = [video_file, prompt]

response = model.generate_content(contents)
print(response.text)

Semua modalitas

Berikut ini cara memproses gambar, video, audio, dan teks secara bersamaan. Contoh ini hanya berfungsi dengan Gemini 1.5 Pro (Pratinjau).

import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

video_file_uri = "gs://cloud-samples-data/generative-ai/video/behind_the_scenes_pixel.mp4"
video_file = Part.from_uri(video_file_uri, mime_type="video/mp4")

image_file_uri = "gs://cloud-samples-data/generative-ai/image/a-man-and-a-dog.png"
image_file = Part.from_uri(image_file_uri, mime_type="image/png")

prompt = """
  Watch each frame in the video carefully and answer the questions.
  Only base your answers strictly on what information is available in the video attached.
  Do not make up any information that is not part of the video and do not be too
  verbose, be to the point.

  Questions:
  - When is the moment in the image happening in the video? Provide a timestamp.
  - What is the context of the moment and what does the narrator say about it?
"""

contents = [
    video_file,
    image_file,
    prompt,
]

response = model.generate_content(contents)
print(response.text)

Menetapkan parameter model

Parameter model berikut dapat disetel pada model multimodal:

Top-P

Top-P mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin (lihat top-K) hingga yang paling tidak mungkin sampai jumlah probabilitasnya sama dengan nilai top-P. Misalnya, jika token A, B, dan C memiliki probabilitas 0,3, 0,2, dan 0,1 dengan nilai top-P 0.5, model akan memilih A atau B sebagai token berikutnya dengan menggunakan suhu dan mengecualikan C sebagai kandidat.

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

Top-K

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.

Temperature (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 penggantian, coba tingkatkan suhu.

Parameter value yang valid

Parameter Gemini 1.0 Pro Vision Gemini 1.5 Pro (Pratinjau)
Top-K 1 - 40 (default 32) Tidak didukung
Top-P 0 - 1.0 (default 1.0) 0 - 1,0 (default 0,95)
Temperature (suhu) 0 - 1,0 (default 0,4) 0 - 2.0 (default 1.0)

Persyaratan media

Saat Anda menggunakan file media dalam permintaan perintah, pastikan file tersebut memenuhi persyaratan berikut:

Persyaratan gambar

Tidak ada batasan khusus jumlah {i>pixel<i} dalam sebuah gambar. Namun, gambar yang lebih besar akan diperkecil dan diberi padding agar sesuai dengan resolusi maksimum 3072x3072 dengan tetap mempertahankan rasio aspek aslinya.

Untuk Gemini 1.0 Pro Vision, setiap gambar menyumbang 258 token.

Untuk Gemini 1.5 Pro (Pratinjau):

  • Gambar dengan rasio aspek lebih kecil dari 1,2 atau dengan dimensi yang lebih panjang lebih kecil dari 768, masing-masing memperhitungkan 258 token.
  • Gambar dengan dimensi lebih panjang dari 768 dan rasio aspek yang lebih besar dari 1,2 akan ditampilkan oleh kartu persegi yang berjarak sama di sepanjang dimensi yang lebih panjang. Kartu digunakan dengan gambar asli untuk mewakili gambar dalam Gemini. Setiap kartu menyumbang 258 token. Misalnya, untuk gambar dengan resolusi 1.000x2.000, token 258 x 3 = 774 digunakan (1 untuk gambar asli, dan 2 untuk ubin persegi 1000x1000)

Jumlah maksimum gambar yang dapat ada dalam permintaan dialog adalah:

  • 16 untuk Gemini 1.0 Pro Vision
  • 3.000 untuk Gemini 1.5 Pro (Pratinjau)

Persyaratan audio

Gemini 1.5 Pro (Pratinjau) mendukung jenis MIME audio berikut. Gemini 1.0 Pro Vision tidak mendukung audio.

  • audio/mp3
  • audio/wav

Persyaratan video

Video diambil sampelnya pada kecepatan 1 fps. Setiap frame video menyumbang 258 token.

Khusus untuk Gemini 1.5 Pro (Pratinjau), trek audio dienkode dengan frame video. Trek audio juga dipecah menjadi trunk 1 detik yang masing-masing memperhitungkan 32 token. Frame video dan token audio disisipkan bersama dengan stempel waktunya. Stempel waktu direpresentasikan sebagai 7 token.

Model multimodal Gemini mendukung jenis MIME video berikut:

Jenis MIME video Gemini 1.0 Pro Vision Gemini 1.5 Pro (Pratinjau)
MOV - video/mov
MPEG - video/mpeg
MP4 - video/mp4
MPG - video/mpg
AVI - video/avi
WMV - video/wmv
MPEGPS - video/mpegps
FLS - video/flv

Persyaratan PDF

Jenis MIME yang diperlukan untuk PDF adalah application/pdf.

Praktik terbaik

Bagian ini mencakup praktik terbaik untuk berbagai modalitas.

Praktik terbaik gambar

Saat menggunakan gambar, gunakan praktik terbaik dan informasi berikut untuk mendapatkan hasil terbaik.

  • Gunakan perintah dengan satu gambar untuk memberikan hasil yang lebih baik daripada perintah dengan beberapa gambar saat Anda ingin mendeteksi teks dalam gambar.
  • Jika perintah Anda berisi satu gambar, tempatkan gambar tersebut sebelum prompt teks.
  • Jika ada beberapa gambar dalam perintah, dan Anda ingin merujuknya nanti dalam perintah atau meminta model merujuk ke gambar tersebut dalam respons model, sebaiknya berikan indeks pada setiap gambar sebelum gambar. Gunakan a b c, atau image 1 image 2 image 3 untuk indeks Anda. Berikut adalah contoh penggunaan gambar yang diindeks dalam perintah:

    image 1 <piano_recital.jpeg>
    image 2 <family_dinner.jpeg>
    image 3 <coffee_shop.jpeg>
    
    Write a blogpost about my day using image 1 and image 2. Then, give me ideas
    for tomorrow based on image 3.
    
  • Gambar dengan resolusi lebih tinggi akan memberikan hasil yang lebih baik.

  • Sertakan beberapa contoh dalam perintah.

  • Putar gambar ke orientasi yang tepat sebelum menambahkannya ke perintah.

  • Hindari gambar yang buram.

Praktik terbaik video

Saat menggunakan video, gunakan praktik terbaik dan informasi berikut untuk mendapatkan hasil terbaik:

  • Jangan gunakan lebih dari satu video per perintah.
  • Jika perintah Anda berisi satu video, tempatkan video tersebut sebelum prompt teks.
  • Jika Anda menggunakan Gemini 1.0 Pro Vision, model akan memproses video sebagai frame gambar yang tidak berdekatan dari video. Audio tidak disertakan. Jika Anda melihat model tidak memiliki beberapa konten dari video, coba persingkat video tersebut agar model dapat menangkap sebagian besar konten video.
  • Jika Anda menggunakan Gemini 1.0 Pro Vision, hanya informasi dalam dua menit pertama yang akan diproses.
  • Jika Anda menggunakan Gemini 1.0 Pro Vision, tidak ada informasi audio atau metadata stempel waktu yang dianalisis. Akibatnya, model mungkin tidak berfungsi dengan baik dalam kasus penggunaan yang memerlukan input audio, seperti pemberian teks pada audio, atau informasi terkait waktu, seperti kecepatan atau ritme.
  • Jika pelokalan stempel waktu dalam video dengan audio diperlukan, minta model untuk membuat stempel waktu dalam format MM:SS dengan dua digit pertama mewakili menit dan dua digit terakhir mewakili detik. Gunakan format yang sama untuk pertanyaan yang menanyakan tentang stempel waktu.

Praktik terbaik PDF

Saat menggunakan PDF, gunakan praktik terbaik dan informasi berikut untuk mendapatkan hasil terbaik:

  • PDF diperlakukan sebagai gambar, sehingga satu halaman PDF diperlakukan sebagai satu gambar.
    • Jumlah halaman yang didukung terbatas pada jumlah gambar yang dapat didukung model. Untuk Gemini 1.0 Pro Vision, batasnya adalah 16. Untuk Gemini 1.5 Pro, batasnya adalah 300. Jika Anda memiliki dokumen yang panjang, sebaiknya bagi menjadi beberapa PDF untuk memprosesnya.
    • Saat menggunakan PDF sebagai input, biayanya mengikuti harga gambar Gemini. Misalnya, jika Anda menyertakan PDF dua halaman dalam panggilan API Gemini, Anda akan dikenai biaya input untuk pemrosesan dua gambar.
  • Jika perintah Anda berisi satu PDF, tempatkan PDF sebelum prompt teks.
  • Gunakan PDF yang dibuat dengan teks yang dirender sebagai teks, bukan menggunakan teks dalam gambar yang dipindai. Format ini memastikan teks dapat dibaca mesin sehingga lebih mudah bagi model untuk diedit, ditelusuri, dan dimanipulasi dibandingkan dengan gambar PDF yang dipindai. Praktik ini memberikan hasil optimal saat mengerjakan dokumen yang sarat teks seperti kontrak.

Untuk tips terkait perintah multimodal lainnya, lihat Mendesain perintah multimodal.

Batasan multimodal

Meskipun model multimodal Gemini sangat berguna dalam banyak kasus pengguna multimodal, penting untuk memahami batasan model:

  • Penalaran spasial: Model ini tidak secara akurat menemukan teks atau objek dalam gambar dan PDF. Fungsi ini mungkin hanya menampilkan perkiraan jumlah objek.
  • Penggunaan medis: Model ini tidak cocok untuk menafsirkan gambar medis (misalnya, sinar-x dan CT pemindaian) atau memberikan saran medis.
  • Pengenalan orang: Model ini tidak dimaksudkan untuk mengidentifikasi orang yang bukan selebritas dalam gambar.
  • Moderasi konten: Model ini menolak memberikan jawaban tentang gambar atau video yang melanggar kebijakan keamanan kami.
  • Akurasi: Model mungkin berhalusinasi atau membuat kesalahan saat menafsirkan gambar yang berkualitas rendah, dirotasi, atau yang memiliki resolusi sangat rendah. Model tersebut mungkin juga berhalusinasi saat menafsirkan teks tulisan tangan dalam gambar atau dokumen PDF.
  • Pengenalan suara non-suara: Model yang mendukung audio mungkin membuat kesalahan mengenali suara yang bukan ucapan.
  • Gerakan kecepatan tinggi: Karena frekuensi pengambilan sampel 1 frame per detik (fps) tetap, model dapat membuat kesalahan saat memahami gerakan kecepatan tinggi dalam video.

Langkah selanjutnya