Berpikir

Semua model Gemini menggunakan "proses berpikir" internal yang secara signifikan meningkatkan kemampuan penalaran dan perencanaan multi-langkah, sehingga sangat efektif untuk tugas-tugas kompleks seperti coding, matematika tingkat lanjut, dan analisis data.

Model penalaran menawarkan konfigurasi dan opsi berikut:

  • Mengontrol jumlah penalaran
    Anda dapat mengonfigurasi tingkat penalaran untuk mengontrol seberapa banyak "penalaran" yang dapat dilakukan model. Konfigurasi ini sangat penting jika mengurangi latensi atau biaya menjadi prioritas. Selain itu, tinjau perbandingan tingkat kesulitan tugas untuk memutuskan seberapa besar model mungkin memerlukan kemampuan berpikirnya.

  • Mendapatkan ringkasan pemikiran
    Anda dapat mengaktifkan ringkasan pemikiran untuk disertakan dengan respons yang dihasilkan. Ringkasan ini adalah versi sintesis dari pemikiran mentah model dan memberikan insight tentang proses penalaran internal model.

  • Menangani tanda tangan pemikiran
    Firebase AI Logic SDK otomatis menangani tanda tangan pemikiran untuk Anda, yang memastikan bahwa model memiliki akses ke konteks pemikiran dari giliran sebelumnya, khususnya saat menggunakan panggilan fungsi.

Pastikan untuk meninjau praktik terbaik dan panduan perintah untuk menggunakan model penalaran.



Praktik terbaik & panduan perintah untuk menggunakan model penalaran

Sebaiknya uji perintah Anda di Google AI Studio atau Agent  Studio tempat Anda dapat melihat proses pemikiran lengkap. Anda dapat mengidentifikasi area tempat model mungkin menyimpang sehingga Anda dapat menyempurnakan perintah untuk mendapatkan respons yang lebih konsisten dan akurat.

Mulailah dengan perintah umum yang menjelaskan hasil yang diinginkan, dan amati pemikiran awal model tentang cara model menentukan responsnya. Jika responsnya tidak sesuai harapan, bantu model menghasilkan respons yang lebih baik menggunakan salah satu teknik perintah berikut:

  • Memberikan petunjuk langkah demi langkah
  • Berikan beberapa contoh pasangan input-output
  • Berikan panduan tentang cara menyusun kata dan memformat output serta respons
  • Memberikan langkah-langkah verifikasi tertentu

Selain menggunakan perintah, pertimbangkan untuk menggunakan rekomendasi berikut:

  • Tetapkan petunjuk sistem, yang seperti "preamble" yang Anda tambahkan sebelum model diekspos ke petunjuk lebih lanjut dari perintah atau pengguna akhir. Dengan begitu, Anda dapat mengarahkan perilaku model berdasarkan kebutuhan dan kasus penggunaan spesifik Anda.

  • Tetapkan tingkat penalaran untuk mengontrol seberapa banyak penalaran yang dapat dilakukan model. Jika Anda menetapkannya tinggi, model dapat melakukan lebih banyak penalaran, jika diperlukan. Jika Anda menetapkannya lebih rendah, model tidak akan "terlalu memikirkan" responsnya, dan juga akan mengalokasikan lebih banyak batas total output token untuk respons yang sebenarnya, serta dapat membantu mengurangi latensi dan biaya.

  • Aktifkan pemantauan AI di Firebase console untuk memantau jumlah token penalaran dan latensi permintaan Anda yang mengaktifkan penalaran. Jika Anda mengaktifkan ringkasan pemikiran, ringkasan tersebut akan ditampilkan di konsol tempat Anda dapat memeriksa penalaran mendetail model untuk membantu Anda men-debug dan menyempurnakan perintah.



Mengontrol jumlah penalaran

Anda dapat mengonfigurasi tingkat penalaran untuk mengontrol seberapa banyak "penalaran" dan penalaran yang dapat dilakukan model sebelum menampilkan respons. Konfigurasi ini sangat penting jika mengurangi latensi atau biaya menjadi prioritas.

Pastikan untuk meninjau perbandingan tingkat kesulitan tugas untuk memutuskan seberapa besar model mungkin memerlukan kemampuan berpikirnya. Berikut adalah beberapa panduan umum:

  • Tetapkan nilai penalaran yang lebih rendah untuk tugas yang tidak terlalu kompleks atau jika mengurangi latensi atau biaya adalah prioritas bagi Anda.
  • Tetapkan nilai penalaran yang lebih tinggi untuk tugas yang lebih kompleks.

Tingkat penalaran

Untuk mengontrol seberapa banyak penalaran yang dapat dilakukan model untuk menghasilkan responsnya, Anda dapat menentukan tingkat penalaran untuk jumlah token penalaran yang diizinkan untuk digunakan.

Menetapkan tingkat penalaran

Klik penyedia Gemini API untuk melihat konten dan kode khusus penyedia di halaman ini.

Tetapkan tingkat penalaran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel. Konfigurasi dipertahankan selama masa aktif instance. Jika Anda ingin menggunakan tingkat penalaran yang berbeda untuk permintaan yang berbeda, buat instance GenerativeModel yang dikonfigurasi dengan setiap tingkat.

Pelajari nilai yang didukung untuk tingkat penalaran di bagian ini.

Swift

Tetapkan level penalaran dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(thinkingLevel: .low)
)

// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_3.x_MODEL_NAME",
  generationConfig: generationConfig
)

// ...

Kotlin

Tetapkan nilai parameter dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      thinkingLevel = ThinkingLevel.LOW
  }
}

// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = "GEMINI_3.x_MODEL_NAME",
  generationConfig,
)

// ...

Java

Tetapkan nilai parameter dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setThinkingLevel(ThinkingLevel.LOW)
    .build();

GenerationConfig generationConfig = GenerationConfig.builder()
    .setThinkingConfig(thinkingConfig)
    .build();

// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
        FirebaseAI.getInstance(GenerativeBackend.googleAI())
                .generativeModel(
                  /* modelName */ "GEMINI_3.x_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// ...

Web

Tetapkan nilai parameter dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
const generationConfig = {
  thinkingConfig: {
    thinkingLevel: ThinkingLevel.LOW
  }
};

// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_3.x_MODEL_NAME", generationConfig });

// ...

Dart

Tetapkan nilai parameter dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
final thinkingConfig = ThinkingConfig.withThinkingLevel(ThinkingLevel.low);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_3.x_MODEL_NAME',
  generationConfig: generationConfig,
);

// ...

Unity

Tetapkan nilai parameter dalam GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
var thinkingConfig = new ThinkingConfig(thinkingLevel: ThinkingLevel.Low);

var generationConfig = new GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
  modelName: "GEMINI_3.x_MODEL_NAME",
  generationConfig: generationConfig
);

// ...

Nilai tingkat penalaran yang didukung

Tabel berikut mencantumkan nilai tingkat penalaran yang dapat Anda tetapkan untuk setiap model dengan mengonfigurasi thinkingLevel model.

MINIMAL LOW MEDIUM HIGH

Model menggunakan token sesedikit mungkin; hampir tanpa penalaran

Tugas dengan kompleksitas rendah

Model menggunakan lebih sedikit token; meminimalkan latensi & biaya

Tugas sederhana dan tugas dengan throughput tinggi

Model menggunakan pendekatan yang seimbang

Tugas dengan kompleksitas sedang

Model menggunakan token hingga level maksimumnya

Perintah kompleks yang memerlukan penalaran mendalam

Gemini 4 Argon
gemini-4-argon
1 (default)
Gemini 3.x Pro
gemini-3.1-pro-preview
(default)
Gemini 3.x Flash
gemini-3.8-flash
gemini-3.7-flash
gemini-3.6-flash
gemini-3.5-flash

tidak didukung oleh gemini-3.8-flash atau gemini-3.7-flash 1
(default)
Gemini 3.x Flash‑Lite
gemini-3.5-flash-lite
gemini-3.1-flash-lite
(default)
Gemini Nano Banana 2.1
gemini-nano-banana-2.1
(default)
Gemini Nano Banana 2
gemini-3.1-flash-image
(default)
Gemini Nano Banana 2 Lite
gemini-3.1-flash-lite-image
(default)
Gemini Nano Banana Pro
gemini-3-pro-image
(default)

1 gemini-4-argon, gemini-3.8-flash, dan gemini-3.7-flash tidak mendukung tingkat penalaran MINIMAL. Jika Anda menetapkan level penalaran ke MINIMAL, permintaan akan gagal dengan error 400.



Thinking budget (model Gemini 2.5)

Untuk mengontrol seberapa banyak penalaran yang dapat dilakukan model Gemini 2.5 untuk menghasilkan responsnya, Anda dapat menentukan anggaran penalaran untuk jumlah token penalaran yang diizinkan untuk digunakan.



Kompleksitas tugas untuk semua model penalaran

  • Tugas mudah — tidak memerlukan banyak pemikiran
    Permintaan sederhana yang tidak memerlukan penalaran kompleks, seperti pengambilan fakta atau klasifikasi. Contoh:

    • "Di mana DeepMind didirikan?"
    • "Apakah email ini meminta rapat atau hanya memberikan informasi?"
  • Tugas sedang — mungkin memerlukan pemikiran
    Permintaan umum yang memerlukan pemrosesan langkah demi langkah atau pemahaman yang lebih mendalam. Contoh:

    • "Buat analogi antara fotosintesis dan tumbuh dewasa."
    • "Bandingkan dan bedakan mobil listrik dan mobil hybrid."
  • Tugas sulit — mungkin memerlukan pemikiran maksimal
    Tantangan yang benar-benar kompleks, seperti menyelesaikan soal matematika yang rumit atau tugas coding. Jenis tugas ini mengharuskan model untuk menggunakan kemampuan penalaran dan perencanaan penuhnya, yang sering kali melibatkan banyak langkah internal sebelum memberikan jawaban. Contoh:

    • "Selesaikan soal 1 di AIME 2025: Temukan jumlah semua basis bilangan bulat b > 9 yang membuat 17b menjadi pembagi 97b."
    • "Tulis kode Python untuk aplikasi web yang memvisualisasikan data pasar saham real-time, termasuk autentikasi pengguna. Buat seefisien mungkin."



Ringkasan penalaran

Thought summaries adalah versi yang disintesis dari pemikiran mentah model dan menawarkan insight tentang proses penalaran internal model.

Berikut beberapa alasan untuk menyertakan ringkasan penalaran dalam respons:

  • Anda dapat menampilkan ringkasan pemikiran di UI aplikasi atau membuatnya dapat diakses oleh pengguna. Ringkasan pemikiran ditampilkan sebagai bagian terpisah dalam respons sehingga Anda memiliki kontrol lebih besar atas penggunaannya di aplikasi Anda.

  • Jika Anda juga mengaktifkan pemantauan AI di Firebase console, ringkasan pemikiran akan ditampilkan di console tempat Anda dapat memeriksa penalaran mendetail model untuk membantu Anda men-debug dan menyempurnakan perintah.

Berikut beberapa catatan penting tentang ringkasan pemikiran:

  • Ringkasan pemikiran tidak dikontrol oleh anggaran penalaran (anggaran hanya berlaku untuk pemikiran mentah model). Namun, jika penalaran dinonaktifkan, model tidak akan menampilkan ringkasan pemikiran.

  • Ringkasan pemikiran dianggap sebagai bagian dari respons teks yang dihasilkan reguler model dan dihitung sebagai token output.

Mengaktifkan ringkasan penalaran

Klik penyedia Gemini API untuk melihat konten dan kode khusus penyedia di halaman ini.

Anda dapat mengaktifkan ringkasan pemikiran dengan menetapkan includeThoughts ke true dalam konfigurasi model Anda. Kemudian, Anda dapat mengakses ringkasan dengan memeriksa kolom thoughtSummary dari respons.

Berikut adalah contoh yang menunjukkan cara mengaktifkan dan mengambil ringkasan pemikiran dengan respons:

Swift

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(includeThoughts: true)
)

// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_MODEL_NAME",
  generationConfig: generationConfig
)

let response = try await model.generateContent("solve x^2 + 4x + 4 = 0")

// Handle the response that includes thought summaries.
if let thoughtSummary = response.thoughtSummary {
  print("Thought Summary: \(thoughtSummary)")
}
guard let text = response.text else {
  fatalError("No text in response.")
}
print("Answer: \(text)")

Kotlin

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      includeThoughts = true
  }
}

// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = "GEMINI_MODEL_NAME",
  generationConfig,
)

val response = model.generateContent("solve x^2 + 4x + 4 = 0")

// Handle the response that includes thought summaries.
response.thoughtSummary?.let {
    println("Thought Summary: $it")
}
response.text?.let {
    println("Answer: $it")
}

Java

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setIncludeThoughts(true)
    .build();

GenerationConfig generationConfig = GenerationConfig.builder()
    .setThinkingConfig(thinkingConfig)
    .build();

// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
        FirebaseAI.getInstance(GenerativeBackend.googleAI())
                .generativeModel(
                  /* modelName */ "GEMINI_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// Handle the response that includes thought summaries.
ListenableFuture responseFuture = model.generateContent("solve x^2 + 4x + 4 = 0");
Futures.addCallback(responseFuture, new FutureCallback() {
    @Override
    public void onSuccess(GenerateContentResponse response) {
        if (response.getThoughtSummary() != null) {
            System.out.println("Thought Summary: " + response.getThoughtSummary());
        }
        if (response.getText() != null) {
            System.out.println("Answer: " + response.getText());
        }
    }

    @Override
    public void onFailure(Throwable t) {
        // Handle error
    }
}, MoreExecutors.directExecutor());

Web

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
  thinkingConfig: {
    includeThoughts: true
  }
};

// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });

const result = await model.generateContent("solve x^2 + 4x + 4 = 0");
const response = result.response;

// Handle the response that includes thought summaries.
if (response.thoughtSummary()) {
    console.log(`Thought Summary: ${response.thoughtSummary()}`);
}
const text = response.text();
console.log(`Answer: ${text}`);

Dart

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_MODEL_NAME',
  generationConfig: generationConfig,
);

final response = await model.generateContent([Content.text('solve x^2 + 4x + 4 = 0')]);

// Handle the response that includes thought summaries.
if (response.thoughtSummary != null) {
  print('Thought Summary: ${response.thoughtSummary}');
}
if (response.text != null) {
  print('Answer: ${response.text}');
}

Unity

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);

var generationConfig = new GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
  modelName: "GEMINI_MODEL_NAME",
  generationConfig: generationConfig
);

var response = await model.GenerateContentAsync("solve x^2 + 4x + 4 = 0");

// Handle the response that includes thought summaries.
if (response.ThoughtSummary != null) {
    Debug.Log($"Thought Summary: {response.ThoughtSummary}");
}
if (response.Text != null) {
    Debug.Log($"Answer: {response.Text}");
}

Ringkasan penalaran streaming

Anda juga dapat melihat ringkasan pemikiran jika memilih untuk melakukan streaming respons menggunakan generateContentStream. Tindakan ini akan menampilkan ringkasan inkremental berkelanjutan selama pembuatan respons.

Swift

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(includeThoughts: true)
)

// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_MODEL_NAME",
  generationConfig: generationConfig
)

let stream = try model.generateContentStream("solve x^2 + 4x + 4 = 0")

// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
for try await response in stream {
  if let thought = response.thoughtSummary {
    if thoughts.isEmpty {
      print("--- Thoughts Summary ---")
    }
    print(thought)
    thoughts += thought
  }

  if let text = response.text {
    if answer.isEmpty {
      print("--- Answer ---")
    }
    print(text)
    answer += text
  }
}

Kotlin

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      includeThoughts = true
  }
}

// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = "GEMINI_MODEL_NAME",
  generationConfig,
)

// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
model.generateContentStream("solve x^2 + 4x + 4 = 0").collect { response ->
    response.thoughtSummary?.let {
        if (thoughts.isEmpty()) {
            println("--- Thoughts Summary ---")
        }
        print(it)
        thoughts += it
    }
    response.text?.let {
        if (answer.isEmpty()) {
            println("--- Answer ---")
        }
        print(it)
        answer += it
    }
}

Java

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setIncludeThoughts(true)
    .build();

GenerationConfig generationConfig = GenerationConfig.builder()
    .setThinkingConfig(thinkingConfig)
    .build();

// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
        FirebaseAI.getInstance(GenerativeBackend.googleAI())
                .generativeModel(
                  /* modelName */ "GEMINI_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// Streaming with Java is complex and depends on the async library used.
// This is a conceptual example using a reactive stream.
Flowable responseStream = model.generateContentStream("solve x^2 + 4x + 4 = 0");

// Handle the streamed response that includes thought summaries
StringBuilder thoughts = new StringBuilder();
StringBuilder answer = new StringBuilder();

responseStream.subscribe(response -> {
    if (response.getThoughtSummary() != null) {
        if (thoughts.length() == 0) {
            System.out.println("--- Thoughts Summary ---");
        }
        System.out.print(response.getThoughtSummary());
        thoughts.append(response.getThoughtSummary());
    }
    if (response.getText() != null) {
        if (answer.length() == 0) {
            System.out.println("--- Answer ---");
        }
        System.out.print(response.getText());
        answer.append(response.getText());
    }
}, throwable -> {
    // Handle error
});

Web

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
  thinkingConfig: {
    includeThoughts: true
  }
};

// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });

const result = await model.generateContentStream("solve x^2 + 4x + 4 = 0");

// Handle the streamed response that includes thought summaries.
let thoughts = "";
let answer = "";
for await (const chunk of result.stream) {
  if (chunk.thoughtSummary()) {
    if (thoughts === "") {
      console.log("--- Thoughts Summary ---");
    }
    // In Node.js, process.stdout.write(chunk.thoughtSummary()) could be used
    // to avoid extra newlines.
    console.log(chunk.thoughtSummary());
    thoughts += chunk.thoughtSummary();
  }

  const text = chunk.text();
  if (text) {
    if (answer === "") {
      console.log("--- Answer ---");
    }
    // In Node.js, process.stdout.write(text) could be used.
    console.log(text);
    answer += text;
  }
}

Dart

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_MODEL_NAME',
  generationConfig: generationConfig,
);

final responses = model.generateContentStream([Content.text('solve x^2 + 4x + 4 = 0')]);

// Handle the streamed response that includes thought summaries.
var thoughts = '';
var answer = '';
await for (final response in responses) {
  if (response.thoughtSummary != null) {
    if (thoughts.isEmpty) {
      print('--- Thoughts Summary ---');
    }
    thoughts += response.thoughtSummary!;
  }
  if (response.text != null) {
    if (answer.isEmpty) {
      print('--- Answer ---');
    }
    answer += response.text!;
  }
}

Unity

Aktifkan ringkasan pemikiran di GenerationConfig sebagai bagian dari pembuatan instance GenerativeModel.


// ...

// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);

var generationConfig = new GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
  modelName: "GEMINI_MODEL_NAME",
  generationConfig: generationConfig
);

var stream = model.GenerateContentStreamAsync("solve x^2 + 4x + 4 = 0");

// Handle the streamed response that includes thought summaries.
var thoughts = "";
var answer = "";
await foreach (var response in stream)
{
    if (response.ThoughtSummary != null)
    {
        if (string.IsNullOrEmpty(thoughts))
        {
            Debug.Log("--- Thoughts Summary ---");
        }
        Debug.Log(response.ThoughtSummary);
        thoughts += response.ThoughtSummary;
    }
    if (response.Text != null)
    {
        if (string.IsNullOrEmpty(answer))
        {
            Debug.Log("--- Answer ---");
        }
        Debug.Log(response.Text);
        answer += response.Text;
    }
}



Tanda tangan penalaran

Saat menggunakan penalaran dalam interaksi multi-giliran, model tidak memiliki akses ke konteks pemikiran dari giliran sebelumnya. Namun, jika Anda menggunakan panggilan fungsi, Anda dapat memanfaatkan signature pemikiran untuk mempertahankan konteks pemikiran di seluruh giliran. Tanda tangan pemikiran adalah representasi terenkripsi dari proses pemikiran internal model, dan tersedia saat menggunakan pemikiran dan panggilan fungsi. Secara khusus, tanda tangan pemikiran dibuat saat:

  • Penalaran diaktifkan dan pemikiran dibuat.
  • Permintaan menyertakan deklarasi fungsi.

Untuk memanfaatkan thought signature, gunakan panggilan fungsi seperti biasa. Firebase AI Logic SDK menyederhanakan proses ini dengan mengelola status dan otomatis menangani tanda tangan pemikiran untuk Anda. SDK akan otomatis meneruskan tanda tangan pemikiran yang dihasilkan di antara panggilan sendMessage atau sendMessageStream berikutnya dalam sesi Chat.



Penetapan harga dan penghitungan token penalaran

Token penalaran menggunakan harga yang sama dengan token output teks. Jika Anda mengaktifkan ringkasan pemikiran, ringkasan tersebut dianggap sebagai token penalaran dan diberi harga yang sesuai.

Anda dapat mengaktifkan pemantauan AI di Firebase console untuk memantau jumlah token penalaran untuk permintaan yang mengaktifkan penalaran.

Anda bisa mendapatkan jumlah total token penalaran dari kolom thoughtsTokenCount di atribut usageMetadata respons:

Swift

// ...

let response = try await model.generateContent("Why is the sky blue?")

if let usageMetadata = response.usageMetadata {
  print("Thoughts Token Count: \(usageMetadata.thoughtsTokenCount)")
}

Kotlin

// ...

val response = model.generateContent("Why is the sky blue?")

response.usageMetadata?.let { usageMetadata ->
    println("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}")
}

Java

// ...

ListenableFuture<GenerateContentResponse> response =
    model.generateContent("Why is the sky blue?");

Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String usageMetadata = result.getUsageMetadata();
        if (usageMetadata != null) {
            System.out.println("Thoughts Token Count: " +
                usageMetadata.getThoughtsTokenCount());
        }
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

// ...

const response = await model.generateContent("Why is the sky blue?");

if (response?.usageMetadata?.thoughtsTokenCount != null) {
    console.log(`Thoughts Token Count: ${response.usageMetadata.thoughtsTokenCount}`);
}

Dart

// ...

final response = await model.generateContent(
  Content.text("Why is the sky blue?"),
]);

if (response?.usageMetadata case final usageMetadata?) {
  print("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}");
}

Unity

// ...

var response = await model.GenerateContentAsync("Why is the sky blue?");

if (response.UsageMetadata != null)
{
    UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}

Pelajari token lebih lanjut di panduan menghitung token.