API File

Gemini dapat menangani berbagai jenis data input, termasuk teks, gambar, dan audio, secara bersamaan.

Panduan ini menunjukkan cara menggunakan file media dengan Files API. Operasi dasarnya sama untuk file audio, gambar, video, dokumen, dan jenis file lain yang didukung.

Untuk panduan perintah file, lihat bagian Panduan perintah file.

Upload file

Anda dapat menggunakan Files API untuk mengupload file media. Selalu gunakan Files API jika ukuran total permintaan (termasuk file, perintah teks, petunjuk sistem, dll.) lebih besar dari 100 MB. Untuk file PDF, batasnya adalah 50 MB.

Kode berikut mengupload file, lalu menggunakan file tersebut dalam panggilan ke interactions.create.

Python

from google import genai

client = genai.Client()

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

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": myfile.uri, "mime_type": myfile.mime_type}
    ]
)

print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

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

  const interaction = await client.interactions.create({
    model: "gemini-3.8-flash",
    input: [
      { type: "text", text: "Describe this audio clip" },
      { type: "audio", uri: myfile.uri, mime_type: myfile.mimeType }
    ]
  });
  console.log(interaction.output_text);
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.AudioContent;
import com.google.genai.gaos.models.interactions.AudioContentMimeType;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

Content textContent = TextContent.builder().text("Describe this audio clip").build();
Content audioContent =
    AudioContent.builder()
        .uri(myFile.uri().orElse(""))
        .mimeType(AudioContentMimeType.of(myFile.mimeType().orElse("audio/mp3")))
        .build();

List<Content> contents = Arrays.asList(textContent, audioContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.TextContent{
                    Text: "Describe this audio clip",
                }),
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(myFile.URI),
                    MimeType: interactions.AudioContentMimeType(myFile.MIMEType).ToPointer(),
                }),
            }),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

REST

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

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -D "${tmp_header_file}" \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

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

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

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

# Now create an interaction using the Interactions API
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": '$file_uri', "mime_type": "'${MIME_TYPE}'"}
      ]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".outputs[] | select(.type == \"text\") | .text" response.json

Mendapatkan metadata untuk file

Anda dapat memverifikasi bahwa API berhasil menyimpan file yang diupload dan mendapatkan metadatanya dengan memanggil files.get.

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file='path/to/sample.mp3')
file_name = myfile.name
myfile = client.files.get(name=file_name)
print(myfile)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

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

  const fileName = myfile.name;
  const fetchedFile = await client.files.get({ name: fileName });
  console.log(fetchedFile);
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

String fileName = myFile.name().orElse("");
File fileMetadata = client.files.get(fileName, null);
System.out.println(fileMetadata);

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    fileMetadata, err := client.Files.Get(ctx, myFile.Name, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(fileMetadata)
}

REST

# file_info.json was created in the upload example
name=$(jq -r ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/$name \
-H "x-goog-api-key: $GEMINI_API_KEY" > file_info.json
# Print some information about the file you got
name=$(jq -r ".name" file_info.json)
echo name=$name
file_uri=$(jq -r ".uri" file_info.json)
echo file_uri=$file_uri

Mencantumkan file yang diupload

Kode berikut mendapatkan daftar semua file yang diupload:

Python

from google import genai

client = genai.Client()

print('My files:')
for f in client.files.list():
    print(' ', f.name)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const listResponse = await client.files.list({ config: { pageSize: 10 } });
  for await (const file of listResponse) {
    console.log(file.name);
  }
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;

Client client = new Client();

System.out.println("My files:");
for (File f : client.files.list(null)) {
  System.out.println("  " + f.name().orElse(""));
}

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("My files:")
    for f, err := range client.Files.All(ctx) {
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(" ", f.Name)
    }
}

REST

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_API_KEY"

Menghapus file yang diupload

File akan otomatis dihapus setelah 48 jam. Anda juga dapat menghapus file yang diupload secara manual:

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file='path/to/sample.mp3')
client.files.delete(name=myfile.name)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

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

  const fileName = myfile.name;
  await client.files.delete({ name: fileName });
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

client.files.delete(myFile.name().orElse(""), null);

Go

package main

import (
    "context"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    if _, err := client.Files.Delete(ctx, myFile.Name, nil); err != nil {
        log.Fatal(err)
    }
}

REST

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/$name \
  -H "x-goog-api-key: $GEMINI_API_KEY"

Informasi penggunaan

Anda dapat menggunakan Files API untuk mengupload dan berinteraksi dengan file media. Files API memungkinkan Anda menyimpan hingga 20 GB file per project, dengan ukuran maksimum per file sebesar 2 GB. File disimpan selama 48 jam.

Selama waktu tersebut, Anda dapat menggunakan API untuk mendapatkan metadata tentang file. Namun, Anda tidak dapat mendownload file yang diupload pengguna. Anda dapat mendownload file yang dibuat oleh model, seperti video, menggunakan metode files.download. Files API tersedia tanpa biaya di semua wilayah tempat Gemini API tersedia.

Strategi penulisan perintah file

Bagian ini memberikan panduan dan praktik terbaik untuk menggunakan file media dengan perintah untuk Gemini API.

Kemampuan untuk menggunakan berbagai jenis data dalam perintah memberi Anda lebih banyak fleksibilitas dalam hal tugas yang dapat Anda selesaikan dengan Gemini API. Misalnya, Anda dapat mengirimkan foto makanan lezat ke model dan memintanya menulis blog singkat tentang makanan tersebut.

Perintah Respons

Tulis postingan blog singkat yang menarik berdasarkan gambar ini. Postingan tersebut harus menyertakan deskripsi makanan dalam foto dan menceritakan perjalanan saya dalam menyiapkan makanan.


Cookie

Menyiapkan makanan adalah cara yang bagus untuk menghemat waktu dan uang, serta dapat membantu Anda makan lebih sehat. Makanan ini adalah contoh bagus dari makanan sehat dan lezat yang dapat disiapkan sebelumnya.

Makanan ini terdiri dari nasi merah, sayuran panggang, dan ayam teriyaki. Beras merah adalah karbohidrat kompleks dan sehat yang akan memberi Anda energi berkelanjutan. Sayuran panggang adalah cara yang bagus untuk mendapatkan asupan vitamin dan mineral harian, dan ayam teriyaki adalah pilihan yang lezat dan kaya protein.

Makanan ini juga mudah disiapkan. Cukup masak beras merah, panggang sayuran, dan masak ayam teriyaki. Setelah semuanya matang, bagi menjadi beberapa wadah persiapan makanan dan simpan di lemari es. Anda dapat mengambil wadah dan pergi pada pagi hari yang sibuk.

Jika Anda mencari makanan sehat dan lezat yang dapat disiapkan sebelumnya, makanan ini adalah pilihan yang bagus. Makanan ini penuh dengan nutrisi dan rasa, serta pasti membuat Anda merasa kenyang dan puas.

Selamat menyiapkan makanan yang sehat dan lezat.

Jika Anda mengalami kesulitan mendapatkan output yang diinginkan dari perintah yang menggunakan file media, ada beberapa strategi yang dapat membantu Anda mendapatkan hasil yang diinginkan. Bagian berikut memberikan pendekatan desain dan tips pemecahan masalah untuk meningkatkan kualitas perintah yang menggunakan input multimodal.

Anda dapat meningkatkan kualitas perintah multimodal dengan mengikuti praktik terbaik berikut:

  • Dasar-dasar desain perintah

    • Berikan petunjuk yang spesifik: Buat petunjuk yang jelas dan ringkas untuk meminimalkan kemungkinan salah tafsir.
    • Tambahkan beberapa contoh ke perintah Anda: Gunakan contoh few-shot yang realistis untuk menggambarkan apa yang ingin Anda capai.
    • Uraikan langkah demi langkah: Bagi tugas yang kompleks menjadi subtujuan yang mudah dikelola, sehingga memandu model melalui prosesnya.
    • Tentukan format output: Dalam perintah Anda, minta output dalam format yang Anda inginkan, seperti Markdown, JSON, HTML, dan lainnya.
    • Letakkan gambar Anda terlebih dahulu untuk perintah satu gambar: Meskipun Gemini dapat menangani input gambar dan teks dalam urutan apa pun, untuk perintah yang berisi satu gambar, Gemini mungkin akan berperforma lebih baik jika gambar (atau video) tersebut diletakkan sebelum perintah teks. Namun, untuk perintah yang memerlukan gambar yang sangat disisipkan dengan teks agar masuk akal, gunakan urutan yang paling alami.
  • Memecahkan masalah multimodal prompting Anda

    • Jika model tidak mengambil informasi dari bagian gambar yang relevan: Berikan petunjuk tentang aspek gambar yang ingin Anda gunakan sebagai sumber informasi untuk perintah.
    • Jika output model terlalu umum (tidak cukup disesuaikan dengan input gambar/video): Di awal perintah, coba minta model untuk mendeskripsikan gambar atau video sebelum memberikan petunjuk tugas, atau coba minta model untuk merujuk ke apa yang ada dalam gambar.
    • Untuk memecahkan masalah bagian mana yang gagal: Minta model untuk mendeskripsikan gambar, atau minta model untuk menjelaskan penalarannya, guna mengukur pemahaman awal model.
    • Jika perintah Anda menghasilkan konten halusinasi: Coba kurangi setelan suhu atau minta model untuk memberikan deskripsi yang lebih singkat sehingga model cenderung tidak mengekstrapolasi detail tambahan.
    • Menyesuaikan parameter sampling: Bereksperimenlah dengan berbagai setelan temperature dan pilihan top-k untuk menyesuaikan kreativitas model.

Berikan petunjuk yang spesifik

Perintah akan memberikan hasil terbaik jika jelas dan mendetail. Jika Anda memiliki output tertentu, sebaiknya sertakan persyaratan tersebut dalam perintah untuk memastikan Anda mendapatkan output yang diinginkan.

Untuk gambar papan bandara ini, meminta model untuk sekadar "mendeskripsikan gambar ini" dapat menghasilkan deskripsi umum. Jika Anda memerlukan model untuk mengurai waktu dan kota dari gambar, Anda dapat menyertakan permintaan tersebut langsung dalam perintah Anda.

Perintah Respons model

Jelaskan gambar ini.

Gambar menampilkan papan kedatangan dan keberangkatan bandara.

Perintah yang diperbarui Respons yang lebih baik
Jadwal perjalanan

Parse the time and city from the airport board shown in this image into a list.

  • 10.50 Moskow
  • 11:05 Edinburgh
  • 11.05 London
  • 11.10 Bukares
  • 11.30 Kiev
  • 11:35 Dublin
  • 11.45 East Midlands
  • 12.15 Sofia
  • 12.30 London
  • 12:30 Newcastle
  • 12.40 St Petersburg
  • 12.40 London
  • 12.45 Manchester
  • Tambahkan beberapa contoh

    Model Gemini dapat menerima beberapa input yang dapat digunakan sebagai contoh untuk memahami output yang Anda inginkan. Menambahkan contoh ini dapat membantu model mengidentifikasi pola dan menerapkan hubungan antara gambar dan respons yang diberikan ke contoh baru. Hal ini juga disebut pembelajaran "few-shot".

    Dalam contoh berikut, output awal ditulis dalam bentuk kalimat, dan juga berisi negara (Brasil). Misalnya, Anda menginginkan output dalam format atau gaya yang berbeda, dan Anda hanya menginginkan kota, bukan negara. Menambahkan contoh few-shot ke prompt dapat mengarahkan model untuk merespons dengan cara yang Anda inginkan.

    Perintah Respons model
    Jadwal perjalanan

    Tentukan kota beserta tempat terkenalnya.

    Landmark tersebut adalah patung Kristus Penebus di Rio de Janeiro, Brasil.

    Perintah yang diperbarui Respons yang lebih baik

    Tentukan kota beserta tempat terkenalnya.

    colosseum

    kota: Roma, tempat terkenal: Colosseum.

    Kota Terlarang

    city: Beijing, landmark: Kota Terlarang

    forbidden-city

    kota: Rio de Janeiro, landmark: patung Kristus Penebus

    Uraikan langkah demi langkah

    Untuk tugas kompleks seperti yang memerlukan pemahaman dan penalaran visual, sebaiknya bagi tugas menjadi langkah-langkah yang lebih kecil dan lebih mudah. Atau, akan efektif juga jika Anda langsung meminta model untuk "berpikir langkah demi langkah" dalam perintah Anda.

    Perintah Respons model

    Kapan tisu toilet saya akan habis?

    Segera, Anda hanya memiliki 3 putaran tersisa.

    Perintah yang diperbarui Respons yang lebih baik
    1. Pertama, hitung berapa banyak gulungan tisu toilet dalam gambar ini.
    2. Kemudian, tentukan berapa banyak tisu toilet yang digunakan orang pada umumnya per hari.
    3. Hitung berapa lama gulungan tisu toilet ini akan habis.
    1. Ada 3 tisu toilet dalam gambar ini.
    2. Orang biasa menggunakan sekitar 20 lembar tisu toilet per hari.
    3. Jika setiap rol berisi 200 lembar, setiap rol akan bertahan selama sekitar 10 hari. Oleh karena itu, 3 rol akan bertahan selama sekitar satu bulan.

    Soal matematika atau jenis soal cerita lainnya adalah kandidat yang tepat untuk meminta model berpikir langkah demi langkah.

    Perintah Respons

    Berapa suku ke-4 dalam deret tersebut?

    -135

    Respons dari model salah. Beberapa cara untuk meningkatkan kualitas respons adalah dengan meminta model mengurai masalah sebelum menjawab perintah.

    Perintah Respons

    Parse formula dalam gambar terlebih dahulu.

    Kemudian, berdasarkan rumus tersebut, jawab "apa suku ke-4 dalam deret tersebut?".

    Klik untuk meluaskan hasil

    $$ b(n) = b(n-1) * (-3) $$

    $$ b(1) = 15 $$

    1. Masukkan n = 4 ke dalam rumus:

      $$ b(4) = b(4-1) * (-3) $$

      $$ b(4) = b(3) * (-3) $$

    2. Kita tidak mengetahui nilai b(3), jadi substitusikan n = 3 ke dalam rumus:

      $$ b(3) = b(3-1) * (-3) $$

      $$ b(3) = b(2) * (-3) $$

    3. Kita tidak tahu nilai b(2), jadi substitusikan n = 2 ke dalam rumus:

      $$ b(2) = b(2-1) * (-3) $$

      $$ b(2) = b(1) * (-3) $$

    4. Kita tahu nilai b(1) adalah 15, jadi masukkan ke dalam rumus:

      $$ b(2) = 15 * (-3) $$

      $$ b(2) = -45 $$

    5. Sekarang kita mengetahui nilai b(2), substitusikan ke dalam rumus untuk b(3):

      $$ b(3) = b(2) * (-3) $$

      $$ b(3) = -45 * (-3) $$

      $$ b(3) = 135 $$

    6. Sekarang setelah kita mengetahui nilai b(3), substitusikan ke dalam rumus untuk b(4):

      $$ b(4) = b(3) * (-3) $$

      $$ b(4) = 135 * (-3) $$

      $$ b(4) = -405 $$

    Oleh karena itu, suku ke-4 dalam deret adalah -405.

    Respons model ini sudah benar. Sekarang, untuk membuat responsnya lebih efisien, Anda dapat meminta model untuk berpikir langkah demi langkah.

    Perintah yang diperbarui Respons yang lebih baik

    Berapa suku ke-4 dalam deret tersebut? Berpikirlah secara berurutan.

    Istilah pertama adalah 15.

    Suku kedua adalah b(1) * (-3) = 15 * (-3) = -45.

    Suku ketiga adalah b(2) * (-3) = -45 * (-3) = 135.

    Suku keempat adalah b(3) * (-3) = 135 * (-3) = -405.

    Menentukan format output

    Masalah umum adalah perlunya output model dalam format tertentu (misalnya, Markdown, JSON, HTML), terutama jika output model perlu diserap oleh tugas downstream. Anda dapat mencoba menghasilkan output dalam format tersebut dengan menginstruksikan model untuk melakukannya dalam perintah. Berikut adalah dua contoh:

    Perintah Respons model

    Uraikan tabel dalam gambar ini ke dalam format Markdown

    ```none | Subject | Status | Time | Start date | Due on | | ------- | ------ | ---- | ---------- | ------ | | Math | Done | 1.5 hrs | 11/29/2023 | 12/1/2023 | | Geography | Done | 30 min | 12/2/2023 | 12/4/2023 | | Physics | In progress | 2 hrs | 12/3/2023 | 12/5/2023 | | Biology | Not started | 6 hrs | 11/2/2016 | 12/6/2023 | ```
    Perintah Respons model

    Berikan daftar semua atribut berikut:

    bahan, jenis masakan, vegetarian atau tidak, dalam format JSON

    ```json { "bahan": [ "beras", "udang", "kerang", "kerang hijau", "kacang polong", "tomat", "bawang", "bawang putih", "minyak zaitun", "paprika", "garam", "merica" ], "jenis masakan": "Spanyol", "vegetarian": false } ```

    Utamakan gambar Anda untuk perintah gambar tunggal

    Meskipun Gemini dapat menafsirkan gambar dan teks dalam urutan apa pun dalam perintah, menempatkan satu gambar sebelum perintah teks mungkin akan memberikan hasil yang lebih baik. Dalam contoh berikut, Anda akan melihat gambar muncul sebelum teks di setiap perintah.

    Memecahkan masalah perintah multimodal

    Anda mungkin perlu memecahkan masalah perintah jika tidak mendapatkan respons yang bermanfaat. Berikut beberapa strategi yang dapat Anda coba.

    Jika model tidak mengambil informasi dari bagian gambar yang relevan

    Untuk mendapatkan respons yang lebih spesifik, Anda dapat menunjukkan aspek gambar yang ingin Anda gunakan sebagai sumber informasi untuk perintahnya.

    Perintah Respons model

    Berapa hari popok ini akan bertahan untuk bayi?

    Popok akan bertahan selama 198 hari sebelum habis.

    Perintah yang diperbarui Respons yang lebih baik

    Berapa lama popok ini akan bertahan sebelum habis?

    Gunakan berat yang tertera di kotak untuk menentukan usia anak, dan gunakan jumlah total popok dalam kotak.

    Bagi total jumlahnya dengan jumlah popok yang digunakan anak per hari.

    Kotak berisi 198 popok. Kotak tersebut menyatakan bahwa popok tersebut ditujukan untuk anak dengan berat 10-17 kg.

    Anak-anak dengan rentang berat ini rata-rata berusia antara 1 dan 2 tahun.

    Anak berusia 2 tahun biasanya menggunakan 6 popok per hari, jadi popok akan bertahan sekitar 33 hari (198/6).

    Jika output model terlalu umum dan tidak cukup disesuaikan dengan input gambar

    Untuk membantu model menyesuaikan responsnya dengan gambar, coba minta model mendeskripsikan gambar sebelum melakukan tugas penalarannya.

    Perintah Respons model

    Apa kesamaan antara gambar-gambar ini?

    Keempat gambar tersebut adalah contoh fotografi lanskap.

    Perintah yang diperbarui Respons yang lebih baik

    Pertama, jelaskan secara mendetail apa yang ada di setiap gambar. Apa kesamaan di antara gambar-gambar ini?

    Gambar pertama menunjukkan seseorang sedang mengemas koper. Gambar kedua menunjukkan lorong kosong di pusat perbelanjaan. Gambar ketiga menampilkan gulungan tisu toilet. Gambar keempat menunjukkan laut yang gelap dan berbadai.

    Kesamaan di antara gambar-gambar ini adalah semuanya merupakan contoh ruang liminal. Ruang liminal adalah tempat atau situasi yang berada di antara dua tempat atau situasi lainnya. Mereka sering kali ditandai dengan rasa ketidakpastian atau ambiguitas.

    Gambar pertama menunjukkan orang tersebut berada di antara rumah dan perjalanan. Gambar kedua menunjukkan lorong di antara dua toko. Gambar ketiga adalah tisu toilet, yang dapat mewakili kamar mandi. Kamar mandi adalah ruang transisi antara ranah pribadi dan publik. Ini adalah tempat di mana kita mempersiapkan diri untuk masuk atau keluar dari dunia luar.

    Gambar keempat menunjukkan laut yang berada di antara kondisi tenang dan badai.

    Ruang liminal bisa terasa menarik sekaligus meresahkan. Tempat tersebut bisa menjadi tempat awal yang baru atau tempat akhir. Tempat tersebut bisa menjadi tempat untuk merenung atau tempat untuk bertindak.

    Anda juga dapat mencoba meminta model secara eksplisit untuk merujuk pada apa yang ada dalam gambar.

    Perintah yang diperbarui Respons yang lebih baik

    Apa kesamaan di antara gambar-gambar ini? Refer to what's in the images in your response.

    Semua gambar terkait dengan perjalanan. Gambar pertama menunjukkan seseorang sedang mengemas koper, gambar kedua menunjukkan lorong kosong di pusat perbelanjaan, gambar ketiga menunjukkan tumpukan tisu toilet, dan gambar keempat menunjukkan laut yang gelap dan berbadai.

    Gambar-gambar ini semuanya terkait dengan perjalanan karena semuanya adalah hal yang dibutuhkan atau digunakan orang saat bepergian. Gambar pertama menunjukkan seseorang sedang mengemas koper, yang merupakan sesuatu yang dilakukan orang saat akan melakukan perjalanan. Gambar kedua menampilkan lorong kosong di pusat perbelanjaan, yang merupakan tempat yang sering dikunjungi orang untuk membeli perlengkapan perjalanan. Gambar ketiga menampilkan tumpukan tisu toilet, yang sering digunakan orang saat bepergian. Gambar keempat menunjukkan laut yang gelap dan badai, yang sering dialami orang saat bepergian.

    Tips yang sama berlaku untuk output kreatif dari gambar. Dalam contoh berikut dengan kelinci, meminta model secara eksplisit untuk menyertakan aspek dari gambar dapat meningkatkan kualitas output.

    Perintah Respons model

    Dapatkah Anda menulis puisi tentang gambar ini untuk saya?

    Kelinci kecil, begitu lembut dan cokelat,
    Melompat di padang, naik dan turun.
    Telingamu panjang, ekormu kecil,
    Kamu makhluk paling lucu di antara semuanya.

    Kamu mengunyah rumput, begitu hijau dan manis,
    Dan melompat pergi saat melihatku.
    Tapi aku akan selalu menjadi temanmu,
    Kelinci kecil, hingga akhir.

    Perintah yang diperbarui Respons yang lebih baik

    Dapatkah Anda menulis puisi deskriptif dan dramatis tentang gambar ini dan menyertakan lokasinya?

    Kelinci kecil di padang rumput,
    Telinganya panjang, sangat tajam.
    Apa yang kau lihat di sana,
    Di kejauhan, tempat kau menatap?

    Apakah biru laut,
    Berkilau dalam warna matahari?
    Atau ombak yang menghantam dan menderu,
    Irama yang Anda sukai?

    Kelinci kecil, katakan yang sebenarnya,
    Apa yang menarik perhatianmu?
    Apakah angin laut yang asin,
    Atau jeritan burung camar yang menyenangkan?

    Mungkin karena luasnya,
    Dunia yang begitu besar dan kecil.
    Tempat mimpi bisa berkeliaran,
    Dan petualangan bisa disemai.

    Kelinci kecil, aku penasaran apa mimpimu,
    Saat kamu duduk di rumput, begitu tenang.
    Apakah Anda ingin menjelajahi kedalaman,
    Atau tetap di darat, tempat Anda bisa melompat?

    Apa pun itu, kelinci kecil,
    Jaga agar percikan keajaiban itu tetap menyala terang.
    Karena dalam impian dan aspirasi Anda,
    Terletak dunia yang menunggu kreasi Anda.

    Memecahkan masalah bagian perintah yang gagal

    Mungkin sulit untuk mengetahui apakah perintah gagal karena model tidak memahami gambar sejak awal, atau apakah model memahami gambar tetapi tidak melakukan langkah-langkah penalaran yang benar setelahnya. Untuk membedakan alasan tersebut, minta model untuk mendeskripsikan apa yang ada dalam gambar.

    Dalam contoh berikut, jika model merespons dengan camilan yang tampak mengejutkan saat dipasangkan dengan teh (misalnya, popcorn), Anda dapat memecahkan masalah terlebih dahulu untuk menentukan apakah model mengenali dengan benar bahwa gambar tersebut berisi teh.

    Perintah Perintah untuk pemecahan masalah

    Camilan apa yang bisa saya buat dalam 1 menit dan cocok dengan makanan ini?

    Jelaskan apa yang ada dalam gambar ini.

    Strategi lainnya adalah meminta model untuk menjelaskan penalarannya. Hal ini dapat membantu Anda mempersempit bagian penalaran yang salah, jika ada.

    Perintah Perintah untuk pemecahan masalah

    Apa camilan yang bisa saya buat dalam 1 menit yang cocok dengan ini?

    Camilan apa yang bisa saya buat dalam 1 menit dan cocok dengan makanan ini? Harap jelaskan alasannya.

    Langkah berikutnya

    • Coba tulis perintah multimodal Anda sendiri menggunakan Google AI Studio.
    • Untuk mengetahui informasi tentang penggunaan Gemini Files API untuk mengupload file media dan menyertakannya dalam perintah Anda, lihat panduan Vision, Audio, dan Pemrosesan dokumen.
    • Untuk panduan selengkapnya tentang desain perintah, seperti menyesuaikan parameter pengambilan sampel, lihat halaman Strategi perintah.