Panduan Developer Gemini 3

Gemini 3 adalah rangkaian model kami yang paling cerdas hingga saat ini, yang dibangun di atas fondasi penalaran canggih. Gemini 1.5 Pro dirancang untuk mewujudkan ide apa pun dengan menguasai alur kerja agentic, coding otonom, dan tugas multimodal yang kompleks. Panduan ini membahas fitur utama rangkaian model Gemini 3 dan cara mengoptimalkannya.

Gemini 3 Pro menggunakan pemikiran dinamis secara default untuk memproses perintah. Untuk respons yang lebih cepat dan latensi yang lebih rendah saat penalaran yang kompleks tidak diperlukan, Anda dapat membatasi tingkat pemikiran model ke low.

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-pro-preview",
    contents="Find the race condition in this multi-threaded C++ snippet: [code here]",
)

print(response.text)

JavaScript

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

const ai = new GoogleGenAI({});

async function run() {
  const response = await ai.models.generateContent({
    model: "gemini-3-pro-preview",
    contents="Find the race condition in this multi-threaded C++ snippet: [code here]",
  });

  console.log(response.text);
}

run();

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -X POST \
  -d '{
    "contents": [{
      "parts": [{"text": "Find the race condition in this multi-threaded C++ snippet: [code here]"}]
    }]
  }'

Jelajahi

Ringkasan Applet Gemini 3

Jelajahi koleksi aplikasi Gemini 3 kami untuk melihat cara model menangani penalaran tingkat lanjut, coding otonom, dan tugas multimodal yang kompleks.

Mengenal Gemini 3

Gemini 3 Pro adalah model pertama dalam seri baru ini. gemini-3-pro-preview paling cocok untuk tugas kompleks Anda yang memerlukan pengetahuan dunia yang luas dan penalaran tingkat lanjut di berbagai modalitas.

ID Model Jendela Konteks (Masuk / Keluar) Batas Informasi Harga (Input / Output)*
gemini-3-pro-preview 1M / 64k Jan 2025 $2 / $12 (<200 ribu token)
$4 / $18 (>200 ribu token)

* Harga adalah per 1 juta token. Harga yang tercantum adalah untuk teks standar; tarif input multimodal dapat bervariasi.

Untuk mengetahui batas frekuensi panggilan mendetail, harga batch, dan informasi tambahan, lihat halaman model.

Fitur API baru di Gemini 3

Gemini 3 memperkenalkan parameter baru yang dirancang untuk memberi developer kontrol lebih besar atas latensi, biaya, dan kualitas multimodal.

Tingkat pemikiran

Parameter thinking_level mengontrol kedalaman maksimum proses penalaran internal model sebelum menghasilkan respons. Gemini 3 memperlakukan level ini sebagai alokasi relatif untuk berpikir, bukan jaminan token yang ketat. Jika thinking_level tidak ditentukan, Gemini 3 Pro akan menggunakan high sebagai default.

  • low: Meminimalkan latensi dan biaya. Paling cocok untuk aplikasi yang mengikuti petunjuk sederhana, chat, atau aplikasi dengan throughput tinggi
  • medium: (Segera hadir), tidak didukung saat peluncuran
  • high (Default): Memaksimalkan kedalaman penalaran. Model mungkin memerlukan waktu yang jauh lebih lama untuk mencapai token pertama, tetapi outputnya akan lebih beralasan.

Resolusi media

Gemini 3 memperkenalkan kontrol terperinci atas pemrosesan visi multimodal melalui parameter media_resolution. Resolusi yang lebih tinggi meningkatkan kemampuan model untuk membaca teks kecil atau mengidentifikasi detail kecil, tetapi meningkatkan penggunaan token dan latensi. Parameter media_resolution menentukan jumlah maksimum token yang dialokasikan per gambar input atau frame video.

Sekarang Anda dapat menyetel resolusi ke media_resolution_low, media_resolution_medium, atau media_resolution_high per bagian media individual atau secara global (melalui generation_config). Jika tidak ditentukan, model akan menggunakan default optimal berdasarkan jenis media.

Setelan yang direkomendasikan

Jenis Media Setelan yang Direkomendasikan Token Maksimal Panduan Penggunaan
Gambar media_resolution_high 1120 Direkomendasikan untuk sebagian besar tugas analisis gambar guna memastikan kualitas maksimum.
PDF media_resolution_medium 560 Optimal untuk pemahaman dokumen; kualitas biasanya mencapai titik jenuh pada medium. Meningkatkan ke high jarang meningkatkan hasil OCR untuk dokumen standar.
Video (Umum) media_resolution_low (atau media_resolution_medium) 70 (per frame) Catatan: Untuk video, setelan low dan medium diperlakukan sama (70 token) untuk mengoptimalkan penggunaan konteks. Langkah ini cukup untuk sebagian besar tugas pengenalan dan deskripsi tindakan.
Video (Banyak teks) media_resolution_high 280 (per frame) Diperlukan hanya jika kasus penggunaan melibatkan pembacaan teks padat (OCR) atau detail kecil dalam frame video.

Python

from google import genai
from google.genai import types
import base64

# The media_resolution parameter is currently only available in the v1alpha API version.
client = genai.Client(http_options={'api_version': 'v1alpha'})

response = client.models.generate_content(
    model="gemini-3-pro-preview",
    contents=[
        types.Content(
            parts=[
                types.Part(text="What is in this image?"),
                types.Part(
                    inline_data=types.Blob(
                        mime_type="image/jpeg",
                        data=base64.b64decode("..."),
                    ),
                    media_resolution={"level": "media_resolution_high"}
                )
            ]
        )
    ]
)

print(response.text)

JavaScript

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

// The media_resolution parameter is currently only available in the v1alpha API version.
const ai = new GoogleGenAI({ apiVersion: "v1alpha" });

async function run() {
  const response = await ai.models.generateContent({
    model: "gemini-3-pro-preview",
    contents: [
      {
        parts: [
          { text: "What is in this image?" },
          {
            inlineData: {
              mimeType: "image/jpeg",
              data: "...",
            },
            mediaResolution: {
              level: "media_resolution_high"
            }
          }
        ]
      }
    ]
  });

  console.log(response.text);
}

run();

REST

curl "https://generativelanguage.googleapis.com/v1alpha/models/gemini-3-pro-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -X POST \
  -d '{
    "contents": [{
      "parts": [
        { "text": "What is in this image?" },
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "..."
          },
          "mediaResolution": {
            "level": "media_resolution_high"
          }
        }
      ]
    }]
  }'

Suhu

Untuk Gemini 3, sebaiknya pertahankan parameter suhu pada nilai defaultnya, yaitu 1.0.

Meskipun model sebelumnya sering kali diuntungkan dari penyesuaian suhu untuk mengontrol kreativitas versus determinisme, kemampuan penalaran Gemini 3 dioptimalkan untuk setelan default. Mengubah suhu (menetapkannya di bawah 1.0) dapat menyebabkan perilaku yang tidak terduga, seperti perulangan atau penurunan performa, terutama dalam tugas matematika atau penalaran yang kompleks.

Tanda tangan pikiran

Gemini 3 menggunakan Tanda tangan pemikiran untuk mempertahankan konteks penalaran di seluruh panggilan API. Tanda tangan ini adalah representasi terenkripsi dari proses pemikiran internal model. Untuk memastikan model mempertahankan kemampuan penalaran, Anda harus mengembalikan tanda tangan ini ke model dalam permintaan Anda persis seperti yang diterima:

  • Panggilan Fungsi (Ketat): API menerapkan validasi ketat pada "Giliran Saat Ini". Tanda tangan yang tidak ada akan menghasilkan error 400.
  • Teks/Chat: Validasi tidak diterapkan secara ketat, tetapi menghilangkan tanda tangan akan menurunkan kualitas penalaran dan jawaban model.

Panggilan fungsi (validasi ketat)

Saat membuat functionCall, Gemini mengandalkan thoughtSignature untuk memproses output alat dengan benar pada giliran berikutnya. "Giliran Saat Ini" mencakup semua langkah Model (functionCall) dan Pengguna (functionResponse) yang terjadi sejak pesan text Pengguna standar terakhir.

  • Panggilan Fungsi Tunggal: Bagian functionCall berisi tanda tangan. Anda harus mengembalikannya.
  • Panggilan Fungsi Paralel: Hanya bagian functionCall pertama dalam daftar yang akan berisi tanda tangan. Anda harus mengembalikan suku cadang dalam urutan yang sama persis seperti saat diterima.
  • Multi-Langkah (Berurutan): Jika model memanggil alat, menerima hasil, dan memanggil alat lain (dalam giliran yang sama), kedua panggilan fungsi memiliki tanda tangan. Anda harus menampilkan semua tanda tangan yang terkumpul dalam histori.

Teks dan streaming

Untuk chat standar atau pembuatan teks, kehadiran tanda tangan tidak dijamin.

  • Non-Streaming: Bagian konten akhir respons dapat berisi thoughtSignature, meskipun tidak selalu ada. Jika salah satunya dikembalikan, Anda harus mengirimkannya kembali untuk mempertahankan performa terbaik.
  • Streaming: Jika tanda tangan dibuat, tanda tangan tersebut dapat tiba dalam potongan akhir yang berisi bagian teks kosong. Pastikan parser streaming Anda memeriksa tanda tangan meskipun kolom teks kosong.

Contoh kode

Panggilan Fungsi Multi-Langkah (Berurutan)

Pengguna mengajukan pertanyaan yang memerlukan dua langkah terpisah (Periksa Penerbangan -> Pesan Taksi) dalam satu giliran.

Langkah 1: Model memanggil Alat Penerbangan.
Model menampilkan tanda tangan <Sig_A>

// Model Response (Turn 1, Step 1)
  {
    "role": "model",
    "parts": [
      {
        "functionCall": { "name": "check_flight", "args": {...} },
        "thoughtSignature": "<Sig_A>" // SAVE THIS
      }
    ]
  }

Langkah 2: Pengguna mengirimkan Hasil Penerbangan
Kita harus mengirimkan kembali <Sig_A> untuk mempertahankan alur pemikiran model.

// User Request (Turn 1, Step 2)
[
  { "role": "user", "parts": [{ "text": "Check flight AA100..." }] },
  { 
    "role": "model", 
    "parts": [
      { 
        "functionCall": { "name": "check_flight", "args": {...} }, 
        "thoughtSignature": "<Sig_A>" // REQUIRED
      } 
    ]
  },
  { "role": "user", "parts": [{ "functionResponse": { "name": "check_flight", "response": {...} } }] }
]

Langkah 3: Model memanggil Alat Taksi
Model mengingat penundaan penerbangan melalui <Sig_A> dan sekarang memutuskan untuk memesan taksi. Tindakan ini akan menghasilkan tanda tangan baru <Sig_B>.

// Model Response (Turn 1, Step 3)
{
  "role": "model",
  "parts": [
    {
      "functionCall": { "name": "book_taxi", "args": {...} },
      "thoughtSignature": "<Sig_B>" // SAVE THIS
    }
  ]
}

Langkah 4: Pengguna mengirim Hasil Taksi
Untuk menyelesaikan giliran, Anda harus mengirim kembali seluruh rangkaian: <Sig_A> DAN <Sig_B>.

// User Request (Turn 1, Step 4)
[
  // ... previous history ...
  { 
    "role": "model", 
    "parts": [
       { "functionCall": { "name": "check_flight", ... }, "thoughtSignature": "<Sig_A>" } 
    ]
  },
  { "role": "user", "parts": [{ "functionResponse": {...} }] },
  { 
    "role": "model", 
    "parts": [
       { "functionCall": { "name": "book_taxi", ... }, "thoughtSignature": "<Sig_B>" } 
    ]
  },
  { "role": "user", "parts": [{ "functionResponse": {...} }] }
]

Panggilan Fungsi Paralel

Pengguna bertanya: "Cek cuaca di Paris dan London". Model menampilkan dua panggilan fungsi dalam satu respons.

// User Request (Sending Parallel Results)
[
  {
    "role": "user",
    "parts": [
      { "text": "Check the weather in Paris and London." }
    ]
  },
  {
    "role": "model",
    "parts": [
      // 1. First Function Call has the signature
      {
        "functionCall": { "name": "check_weather", "args": { "city": "Paris" } },
        "thoughtSignature": "<Signature_A>" 
      },
      // 2. Subsequent parallel calls DO NOT have signatures
      {
        "functionCall": { "name": "check_weather", "args": { "city": "London" } }
      } 
    ]
  },
  {
    "role": "user",
    "parts": [
      // 3. Function Responses are grouped together in the next block
      {
        "functionResponse": { "name": "check_weather", "response": { "temp": "15C" } }
      },
      {
        "functionResponse": { "name": "check_weather", "response": { "temp": "12C" } }
      }
    ]
  }
]

Penalaran Teks/Dalam Konteks (Tanpa Validasi)

Pengguna mengajukan pertanyaan yang memerlukan penalaran dalam konteks tanpa alat eksternal. Meskipun tidak divalidasi secara ketat, menyertakan tanda tangan membantu model mempertahankan rantai penalaran untuk pertanyaan lanjutan.

// User Request (Follow-up question)
[
  { 
    "role": "user", 
    "parts": [{ "text": "What are the risks of this investment?" }] 
  },
  { 
    "role": "model", 
    "parts": [
      {
        "text": "I need to calculate the risk step-by-step. First, I'll look at volatility...",
        "thoughtSignature": "<Signature_C>" // Recommended to include
      }
    ]
  },
  { 
    "role": "user", 
    "parts": [{ "text": "Summarize that in one sentence." }] 
  }
]

Bermigrasi dari model lain

Jika Anda mentransfer rekaman aktivitas percakapan dari model lain (misalnya, Gemini 2.5) atau menyuntikkan panggilan fungsi kustom yang tidak dibuat oleh Gemini 3, Anda tidak akan memiliki tanda tangan yang valid.

Untuk melewati validasi ketat dalam skenario tertentu ini, isi kolom dengan string dummy khusus ini: "thoughtSignature": "context_engineering_is_the_way_to_go"

Output Terstruktur dengan alat

Gemini 3 memungkinkan Anda menggabungkan Output Terstruktur dengan alat bawaan, termasuk Perujukan dengan Google Penelusuran, Konteks URL, dan Eksekusi Kode.

Python

from google import genai
from google.genai import types
from pydantic import BaseModel, Field
from typing import List

class MatchResult(BaseModel):
    winner: str = Field(description="The name of the winner.")
    final_match_score: str = Field(description="The final match score.")
    scorers: List[str] = Field(description="The name of the scorer.")

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-pro-preview",
    contents="Search for all details for the latest Euro.",
    config={
        "tools": [
            {"google_search": {}},
            {"url_context": {}}
        ],
        "response_mime_type": "application/json",
        "response_json_schema": MatchResult.model_json_schema(),
    },  
)

result = MatchResult.model_validate_json(response.text)
print(result)

JavaScript

import { GoogleGenAI } from "@google/genai";
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";

const ai = new GoogleGenAI({});

const matchSchema = z.object({
  winner: z.string().describe("The name of the winner."),
  final_match_score: z.string().describe("The final score."),
  scorers: z.array(z.string()).describe("The name of the scorer.")
});

async function run() {
  const response = await ai.models.generateContent({
    model: "gemini-3-pro-preview",
    contents: "Search for all details for the latest Euro.",
    config: {
      tools: [
        { googleSearch: {} },
        { urlContext: {} }
      ],
      responseMimeType: "application/json",
      responseJsonSchema: zodToJsonSchema(matchSchema),
    },
  });

  const match = matchSchema.parse(JSON.parse(response.text));
  console.log(match);
}

run();

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -X POST \
  -d '{
    "contents": [{
      "parts": [{"text": "Search for all details for the latest Euro."}]
    }],
    "tools": [
      {"googleSearch": {}},
      {"urlContext": {}}
    ],
    "generationConfig": {
        "responseMimeType": "application/json",
        "responseJsonSchema": {
            "type": "object",
            "properties": {
                "winner": {"type": "string", "description": "The name of the winner."},
                "final_match_score": {"type": "string", "description": "The final score."},
                "scorers": {
                    "type": "array",
                    "items": {"type": "string"},
                    "description": "The name of the scorer."
                }
            },
            "required": ["winner", "final_match_score", "scorers"]
        }
    }
  }'

Bermigrasi dari Gemini 2.5

Gemini 3 adalah lini model kami yang paling andal hingga saat ini dan menawarkan peningkatan bertahap dibandingkan Gemini 2.5 Pro. Saat melakukan migrasi, pertimbangkan hal berikut:

  • Penalaran: Jika sebelumnya Anda menggunakan teknik pembuatan perintah yang kompleks (seperti Chain-of-thought) untuk memaksa Gemini 2.5 melakukan penalaran, coba Gemini 3 dengan thinking_level: "high" dan perintah yang disederhanakan.
  • Setelan suhu: Jika kode yang ada secara eksplisit menetapkan suhu (terutama ke nilai rendah untuk output deterministik), sebaiknya hapus parameter ini dan gunakan nilai default Gemini 3 sebesar 1.0 untuk menghindari potensi masalah perulangan atau penurunan performa pada tugas yang kompleks.
  • Pemahaman PDF & dokumen: Resolusi OCR default untuk PDF telah berubah. Jika Anda mengandalkan perilaku tertentu untuk penguraian dokumen padat, uji setelan media_resolution_high baru untuk memastikan akurasi berkelanjutan.
  • Penggunaan token: Bermigrasi ke setelan default Gemini 3 Pro dapat meningkatkan penggunaan token untuk PDF, tetapi menurunkan penggunaan token untuk video. Jika permintaan kini melebihi jendela konteks karena resolusi default yang lebih tinggi, sebaiknya kurangi resolusi media secara eksplisit.
  • Segmentasi gambar: Kemampuan segmentasi gambar (menampilkan mask tingkat piksel untuk objek) tidak didukung di Gemini 3 Pro. Untuk workload yang memerlukan segmentasi gambar native, sebaiknya terus gunakan Gemini 2.5 Flash dengan penalaran dinonaktifkan atau Gemini Robotics-ER 1.5.

Kompatibilitas OpenAI

Untuk pengguna yang memanfaatkan lapisan kompatibilitas OpenAI, parameter standar akan otomatis dipetakan ke parameter yang setara di Gemini:

  • reasoning_effort (OAI) dipetakan ke thinking_level (Gemini). Perhatikan bahwa reasoning_effort sedang dipetakan ke thinking_level tinggi.

Praktik terbaik pembuatan perintah

Gemini 3 adalah model penalaran, yang mengubah cara Anda memberikan perintah.

  • Petunjuk yang presisi: Berikan perintah input yang ringkas. Gemini 3 merespons dengan baik petunjuk yang langsung dan jelas. Model ini dapat menganalisis secara berlebihan teknik rekayasa perintah yang panjang atau terlalu rumit yang digunakan untuk model lama.
  • Panjang output: Secara default, Gemini 3 tidak terlalu panjang dan lebih memilih memberikan jawaban yang langsung dan efisien. Jika kasus penggunaan Anda memerlukan persona yang lebih komunikatif atau "ramah", Anda harus mengarahkan model secara eksplisit dalam perintah (misalnya, "Explain this as a friendly, talkative assistant" (Jelaskan ini sebagai asisten yang ramah dan banyak bicara).
  • Pengelolaan konteks: Saat bekerja dengan set data besar (misalnya, seluruh buku, codebase, atau video panjang), tempatkan petunjuk atau pertanyaan spesifik Anda di akhir perintah, setelah konteks data. Berikan alasan model berdasarkan data yang diberikan dengan memulai pertanyaan Anda dengan frasa seperti, "Berdasarkan informasi di atas...".

Pelajari lebih lanjut strategi desain perintah dalam panduan rekayasa perintah.

FAQ

  1. Apa batas pengetahuan untuk Gemini 3 Pro? Gemini 3 memiliki batas pengetahuan hingga Januari 2025. Untuk informasi terbaru, gunakan alat Perujukan Penelusuran.

  2. Berapa batas jendela konteks? Gemini 3 Pro mendukung jendela konteks input 1 juta token dan output hingga 64 ribu token.

  3. Apakah ada paket gratis untuk Gemini 3 Pro? Anda dapat mencoba model ini secara gratis di Google AI Studio, tetapi saat ini tidak ada paket gratis yang tersedia untuk gemini-3-pro-preview di Gemini API.

  4. Apakah kode thinking_budget lama saya masih berfungsi? Ya, thinking_budget masih didukung untuk kompatibilitas mundur, tetapi sebaiknya Anda bermigrasi ke thinking_level untuk performa yang lebih dapat diprediksi. Jangan gunakan keduanya dalam permintaan yang sama.

  5. Apakah Gemini 3 mendukung Batch API? Ya, Gemini 3 mendukung Batch API.

  6. Apakah Context Caching didukung? Ya, Penyimpanan Cache Konteks didukung untuk Gemini 3. Jumlah minimum token yang diperlukan untuk memulai penyimpanan dalam cache adalah 2.048 token.

  7. Alat mana yang didukung di Gemini 3? Gemini 3 mendukung Google Penelusuran, Penelusuran File, Eksekusi Kode, dan Konteks URL. Fitur ini juga mendukung Panggilan Fungsi standar untuk alat kustom Anda sendiri. Perhatikan bahwa Google Maps dan Penggunaan Komputer saat ini tidak didukung.

Langkah berikutnya