Pemahaman gambar

Anda dapat menambahkan gambar ke permintaan Gemini untuk melakukan tugas yang melibatkan pemahaman konten gambar yang disertakan. Halaman ini menunjukkan cara menambahkan gambar 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 gambar:

Model Detail modalitas gambar

Flash Gemini 1.5

Buka kartu model Flash Gemini 1.5
Gambar maksimum per perintah: 3.000

Gemini 1.5 Pro

Buka kartu model Gemini 1.5 Pro
Gambar maksimum per perintah: 3.000

Gemini 1.0 Pro Vision

Buka kartu model Gemini 1.0 Pro Vision
Gambar maksimum per perintah: 16

Untuk 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 Anda, lihat Google AI SDK untuk Android, Swift, dan web.

Menambahkan gambar ke permintaan

Anda dapat menambahkan satu atau beberapa gambar dalam permintaan Anda ke Gemini.

Satu gambar

Kode contoh di setiap tab berikut menunjukkan cara yang berbeda untuk mengidentifikasi konten 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan parameter stream dalam 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 = "PROJECT_ID"

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

model = GenerativeModel(model_name="gemini-1.5-flash-001")

image_file = Part.from_uri(
    "gs://cloud-samples-data/generative-ai/image/scones.jpg", "image/jpeg"
)

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

Java

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

Untuk mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda menerima semua respons 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.5-flash-001";
    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/png", imageBytes)
          ));

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

Node.js

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

Untuk mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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 createNonStreamingMultipartContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-flash-001',
  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);
}

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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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"
	"encoding/json"
	"fmt"
	"io"

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

func tryGemini(w io.Writer, projectID string, location string, 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("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)

	img := genai.FileData{
		MIMEType: "image/jpeg",
		FileURI:  "gs://generativeai-downloads/images/scones.jpg",
	}
	prompt := genai.Text("What is in this image?")

	resp, err := gemini.GenerateContent(ctx, img, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	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 mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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 dapat melakukan streaming respons, lihat RPC Streaming.

Kode contoh


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

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

        // Initialize content request
        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            GenerationConfig = new GenerationConfig
            {
                Temperature = 0.4f,
                TopP = 1,
                TopK = 32,
                MaxOutputTokens = 2048
            },
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "What's in this photo?" },
                        new Part { FileData = new() { MimeType = "image/png", FileUri = "gs://generativeai-downloads/images/scones.jpg" } }
                    }
                }
            }
        };

        // 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();
    }
}

REST

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

Anda dapat menyertakan gambar yang disimpan di Cloud Storage atau menggunakan data gambar berenkode base64.

Gambar di Cloud Storage

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

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

    Klik untuk meluaskan daftar sebagian wilayah 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 Cloud Storage file yang akan disertakan dalam perintah. Objek bucket harus dapat dibaca secara publik atau berada dalam project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan jenis media (mimeType) file tersebut.

    Jika Anda tidak memiliki file gambar di Cloud Storage, Anda dapat menggunakan file yang tersedia untuk publik berikut ini: gs://cloud-samples-data/generative-ai/image/scones.jpg dengan jenis mime image/jpeg. Untuk melihat gambar ini, buka file contoh file.

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

    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
  • TEXT: Petunjuk teks yang akan disertakan dalam perintah. Misalnya, What is shown in this image?

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 yang berikut ini:

Data gambar base64

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

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

    Klik untuk meluaskan daftar sebagian wilayah yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • B64_BASE_IMAGE
    Encoding base64 gambar, PDF, atau video yang akan disertakan dalam perintah inline. Saat menyertakan media secara inline, Anda juga harus menentukan jenis media (mimeType) data.
  • MIME_TYPE: Jenis media file yang ditentukan dalam kolom data atau fileUri. Nilai yang dapat diterima meliputi:

    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
  • TEXT: Petunjuk teks yang akan disertakan dalam perintah. Misalnya, What is shown in this image?.

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": [
      {
        "inlineData": {
          "data": "B64_BASE_IMAGE",
          "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": [
      {
        "inlineData": {
          "data": "B64_BASE_IMAGE",
          "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 yang berikut ini:

Perhatikan hal berikut dalam URL untuk contoh ini:
  • Gunakan metode generateContent untuk meminta agar respons ditampilkan setelah dibuat sepenuhnya. Untuk mengurangi persepsi latensi kepada audiens manusia, streaming respons saat dibuat 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. Di bagian Prompt design (single turn), klik Open.
  3. Konfigurasi model dan parameter:

    • Model: Pilih model.
    • Region: Pilih wilayah 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 penggantian, coba tingkatkan suhunya.

    • 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 singkat dan nilai yang lebih tinggi untuk respons yang berpotensi lebih panjang.

    • Tambahkan urutan perhentian (opsional): Masukkan urutan perhentian, yang merupakan serangkaian karakter (termasuk spasi) yang menghentikan pembuatan respons jika model menemukannya. 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. (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 kecil sampai jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil yang paling tidak bervariasi, tetapkan top-P ke 0.
    • Aktifkan Grounding: Grounding tidak didukung untuk perintah multimodal.
  6. Untuk mengupload media, seperti file PDF, MP4, WAV, dan PNG, lakukan langkah berikut:
    1. Klik Sisipkan Media, lalu pilih sumber. Jika memilih Google Drive sebagai sumber, Anda harus memilih akun dan memberikan izin kepada Vertex AI Studio untuk mengakses akun Anda saat pertama kali memilih opsi ini. Anda dapat mengupload beberapa gambar yang memiliki ukuran total hingga 10 MB. Satu file tidak boleh melebihi 7 MB.
    2. Klik file yang ingin ditambahkan.
    3. Klik Select. Thumbnail file akan ditampilkan di panel Prompt.
  7. Masukkan perintah teks Anda di panel Prompt. Model ini menggunakan pesan sebelumnya sebagai konteks untuk respons baru.
  8. Klik Kirim, dan respons akan dibuat.
  9. Opsional: Untuk menyimpan perintah Anda ke Dialog saya, klik Simpan.
  10. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Dapatkan kode.
  11. Opsional: Untuk menghapus semua pesan sebelumnya, klik Hapus percakapan.

Beberapa gambar

Masing-masing tab berikut menunjukkan cara berbeda untuk menyertakan beberapa gambar dalam permintaan perintah. Setiap sampel mengambil dua set input berikut:

  • Gambar bangunan terkenal kota yang populer
  • Jenis media gambar
  • Teks yang menunjukkan kota dan tempat terkenal pada gambar

Contoh juga mengambil gambar ketiga dan jenis media, tetapi tanpa teks. Contoh ini menampilkan respons teks yang menunjukkan kota dan tempat terkenal pada gambar ketiga.

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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan parameter stream dalam 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 = "PROJECT_ID"

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

# Load images from Cloud Storage URI
image_file1 = Part.from_uri(
    "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png",
    mime_type="image/png",
)
image_file2 = Part.from_uri(
    "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark2.png",
    mime_type="image/png",
)
image_file3 = Part.from_uri(
    "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark3.png",
    mime_type="image/png",
)

model = GenerativeModel(model_name="gemini-1.5-flash-001")
response = model.generate_content(
    [
        image_file1,
        "city: Rome, Landmark: the Colosseum",
        image_file2,
        "city: Beijing, Landmark: Forbidden City",
        image_file3,
    ]
)
print(response.text)

Java

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

Untuk mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda menerima semua respons 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.5-flash-001";

    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(
              "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png")),
          "city: Rome, Landmark: the Colosseum",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png")),
          "city: Beijing, Landmark: Forbidden City",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "https://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);
    }
  }
}

Node.js

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

Untuk mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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');
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.5-flash-001'
) {
  // For images, the SDK supports base64 strings
  const landmarkImage1 = await getBase64(
    'https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png'
  );
  const landmarkImage2 = await getBase64(
    'https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png'
  );
  const landmarkImage3 = await getBase64(
    'https://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);
}

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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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"
	"fmt"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
	"strings"

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

func main() {
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	location := "us-central1"
	modelName := "gemini-1.5-flash-001"
	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("https://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("https://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("https://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: %w", 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: %w", 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
}

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 mengautentikasi 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. Untuk respons bertahap, Anda akan menerima setiap respons segera setelah token outputnya dibuat. Untuk respons non-streaming, Anda 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 dapat melakukan streaming respons, lihat RPC Streaming.

Kode contoh


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using Google.Protobuf;
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.5-flash-001"
    )
    {
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

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

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

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

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { InlineData = new() { MimeType = "image/png", Data = colosseum }},
                        new Part { Text = "city: Rome, Landmark: the Colosseum" },
                        new Part { InlineData = new() { MimeType = "image/png", Data = forbiddenCity }},
                        new Part { Text = "city: Beijing, Landmark: Forbidden City"},
                        new Part { InlineData = new() { MimeType = "image/png", Data = christRedeemer }}
                    }
                }
            }
        };

        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        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);
    }
}

REST

Setelah menyiapkan lingkungan, Anda dapat menggunakan REST untuk menguji perintah teks. Contoh berikut mengirim 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 wilayah yang didukung, lihat Lokasi yang tersedia.

    Klik untuk meluaskan daftar sebagian wilayah yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • FILE_URI1: URI Cloud Storage file yang akan disertakan dalam perintah. Objek bucket harus dapat dibaca secara publik atau berada dalam project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan jenis media (mimeType) file tersebut.

    Jika Anda tidak memiliki file gambar di Cloud Storage, Anda dapat menggunakan file yang tersedia untuk publik berikut ini: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png dengan jenis mime image/png. Untuk melihat gambar ini, buka file contoh file.

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

    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
    Agar lebih mudah, contoh ini menggunakan jenis media yang sama untuk ketiga gambar input.
  • TEXT1: Petunjuk teks yang akan disertakan dalam perintah. Misalnya, city: Rome, Landmark: the Colosseum
  • FILE_URI2: URI Cloud Storage file yang akan disertakan dalam perintah. Objek bucket harus dapat dibaca secara publik atau berada dalam project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan jenis media (mimeType) file tersebut.

    Jika Anda tidak memiliki file gambar di Cloud Storage, Anda dapat menggunakan file yang tersedia untuk publik berikut ini: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark2.png dengan jenis mime image/png. Untuk melihat gambar ini, buka file contoh file.

  • TEXT2: Petunjuk teks yang akan disertakan dalam perintah. Misalnya, city: Beijing, Landmark: Forbidden City
  • FILE_URI3: URI Cloud Storage file yang akan disertakan dalam perintah. Objek bucket harus dapat dibaca secara publik atau berada dalam project Google Cloud yang sama dengan yang mengirim permintaan. Anda juga harus menentukan jenis media (mimeType) file tersebut.

    Jika Anda tidak memiliki file gambar di Cloud Storage, Anda dapat menggunakan file yang tersedia untuk publik berikut ini: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark3.png dengan jenis mime image/png. Untuk melihat gambar ini, buka file contoh file.

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_URI1",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT1"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI2",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT2"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI3",
          "mimeType": "MIME_TYPE"
        }
      }
    ]
  }
}
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_URI1",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT1"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI2",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT2"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI3",
          "mimeType": "MIME_TYPE"
        }
      }
    ]
  }
}
'@  | 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 yang berikut ini:

Perhatikan hal-hal berikut dalam URL untuk contoh ini:
  • Gunakan metode generateContent untuk meminta agar respons ditampilkan setelah dibuat sepenuhnya. Untuk mengurangi persepsi latensi kepada audiens manusia, streaming respons saat dibuat 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. Di bagian Prompt design (single turn), klik Open.
  3. Konfigurasi model dan parameter:

    • Model: Pilih model.
    • Region: Pilih wilayah 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 penggantian, coba tingkatkan suhunya.

    • 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 singkat dan nilai yang lebih tinggi untuk respons yang berpotensi lebih panjang.

    • Tambahkan urutan perhentian (opsional): Masukkan urutan perhentian, yang merupakan serangkaian karakter (termasuk spasi) yang menghentikan pembuatan respons jika model menemukannya. 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. (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 kecil sampai jumlah probabilitasnya sama dengan nilai top-P. Untuk hasil yang paling tidak bervariasi, tetapkan top-P ke 0.
    • Aktifkan Grounding: Grounding tidak didukung untuk perintah multimodal.
  6. Untuk mengupload media, seperti file PDF, MP4, WAV, dan PNG, lakukan langkah berikut:
    1. Klik Sisipkan Media, lalu pilih sumber. Jika memilih Google Drive sebagai sumber, Anda harus memilih akun dan memberikan izin kepada Vertex AI Studio untuk mengakses akun Anda saat pertama kali memilih opsi ini. Anda dapat mengupload beberapa gambar yang memiliki ukuran total hingga 10 MB. Satu file tidak boleh melebihi 7 MB.
    2. Klik file yang ingin ditambahkan.
    3. Klik Select. Thumbnail file akan ditampilkan di panel Prompt.
  7. Masukkan perintah teks Anda di panel Prompt. Model ini menggunakan pesan sebelumnya sebagai konteks untuk respons baru.
  8. Klik Kirim, dan respons akan dibuat.
  9. Opsional: Untuk menyimpan perintah Anda ke Dialog saya, klik Simpan.
  10. Opsional: Untuk mendapatkan kode Python atau perintah curl untuk perintah Anda, klik Dapatkan kode.
  11. Opsional: Untuk menghapus semua pesan sebelumnya, klik Hapus percakapan.

Menetapkan parameter model

Parameter model berikut dapat ditetapkan 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 suhunya.

Parameter value yang valid

Parameter Gemini 1.0 Pro Vision Gemini 1.5 Pro Flash Gemini 1.5
Top-K 1 - 40 (default 32) Tidak didukung Tidak didukung
Top-P 0 - 1.0 (default 1.0) 0 - 1.0 (default 0.95) 0 - 1.0 (default 0.95)
Temperature (suhu) 0 - 1.0 (default 0.4) 0 - 2.0 (default 1.0) 0 - 2.0 (default 1.0)

Persyaratan gambar

Model multimodal Gemini mendukung jenis MIME gambar berikut:

Jenis MIME gambar Flash Gemini 1.5 Gemini 1.5 Pro Gemini 1.0 Pro Vision
PNG - image/png
JPEG - image/jpeg

Tidak ada batas khusus untuk jumlah piksel dalam sebuah gambar. Namun, gambar yang lebih besar akan diperkecil skalanya dan diberi padding agar sesuai dengan resolusi maksimum 3072 x 3072 dengan tetap mempertahankan rasio aspek aslinya.

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

Untuk Gemini 1.5 Flash dan Gemini 1.5 Pro:

  • Jika kedua dimensi gambar kurang dari atau sama dengan 384 piksel, 258 token akan digunakan.
  • Jika satu dimensi gambar lebih besar dari 384 piksel, gambar akan dipangkas menjadi ubin. Setiap ukuran kartu ditetapkan secara default ke dimensi terkecil (lebar atau tinggi) yang dibagi 1,5. Jika perlu, setiap kartu disesuaikan sehingga tidak lebih kecil dari 256 piksel dan tidak lebih besar dari 768 piksel. Setiap kartu kemudian diubah ukurannya menjadi 768x768 dan menggunakan 258 token.

Jumlah maksimum gambar yang dapat berada dalam permintaan prompt adalah:

  • 16 untuk Gemini 1.0 Pro Vision
  • 3.000 untuk Gemini 1.5 Flash dan Gemini 1.5 Pro

Praktik terbaik

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 jika 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 merujuknya dalam respons model, sebaiknya beri setiap gambar indeks sebelum gambar tersebut. 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.

Batasan

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

  • Penalaran spasial: Model ini tidak tepat dalam menemukan teks atau objek dalam gambar. Metode ini mungkin hanya menampilkan perkiraan jumlah objek.
  • Penggunaan medis: Model ini tidak cocok untuk menafsirkan gambar medis (misalnya, sinar x dan CT scan) atau memberikan saran medis.
  • Pengenalan orang: Model ini tidak dimaksudkan untuk mengidentifikasi orang yang bukan selebritas dalam foto.
  • Moderasi konten: Model menolak memberikan jawaban terkait gambar yang melanggar kebijakan keamanan kami.
  • Akurasi: Model mungkin berhalusinasi atau membuat kesalahan saat menafsirkan gambar yang berkualitas rendah, diputar, atau beresolusi sangat rendah. Model juga mungkin berhalusinasi saat menafsirkan teks tulisan tangan dalam dokumen gambar.

Langkah selanjutnya