Wird generiert

Gemini 2.5 und spätere Modelle können einen internen „Denkprozess“ verwenden, der ihre Fähigkeiten zur Argumentation und mehrstufigen Planung erheblich verbessert. Dadurch eignen sie sich sehr gut für komplexe Aufgaben wie Programmierung, fortgeschrittene Mathematik und Datenanalyse.

Denkmodelle bieten die folgenden Konfigurationen und Optionen:

  • Umfang der Überlegungen steuern
    Sie können konfigurieren, wie viel „Überlegung“ ein Modell anstellen darf. Diese Konfiguration ist besonders wichtig, wenn die Latenz oder die Kosten reduziert werden sollen. Sehen Sie sich auch den Vergleich der Schwierigkeitsgrade von Aufgaben an, um zu entscheiden, wie viel Überlegung ein Modell möglicherweise benötigt.

    Sie können diese Konfiguration entweder mit Denkebenen (Gemini 3.x und höher) oder mit Budgets für Denkprozesse (Gemini 2.5-Modelle) steuern.

  • Zusammenfassungen von Gedanken erhalten
    Sie können Zusammenfassungen von Gedanken aktivieren, um sie in die generierte Antwort einzubeziehen. Diese Zusammenfassungen sind synthetisierte Versionen der rohen Gedanken des Modells und geben Einblicke in den internen Denkprozess des Modells.

  • Gedankensignaturen verarbeiten
    Die Firebase AI Logic-SDKs verarbeiten Gedankensignaturen automatisch für Sie. So wird sichergestellt, dass das Modell Zugriff auf den Gedankenkontext aus früheren Zügen hat, insbesondere bei der Verwendung von Funktionsaufrufen.

Lesen Sie sich die Best Practices und Hinweise zum Erstellen von Prompts für die Verwendung von Denkmodellen durch.



Thinking-Modell verwenden

Verwenden Sie ein Thinking-Modell wie jedes andere Gemini-Modell.

Wenn Sie das Beste aus Denkmodellen herausholen möchten, lesen Sie die Best Practices und Hinweise zum Erstellen von Prompts für Denkmodelle weiter unten auf dieser Seite.

Modelle, die diese Funktion unterstützen

Diese Funktion wird nur von Gemini 3.x- und Gemini 2.5-Modellen unterstützt.

  • gemini-3.1-pro-preview
  • gemini-3.5-flash
  • gemini-3.1-flash-lite
  • gemini-3-pro-image-preview (auch „Nano Banana Pro“ genannt)
  • gemini-3.1-flash-image-preview (auch „Nano Banana 2“)
  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite

Best Practices und Anleitung für Prompts für die Verwendung von Denkmodellen

Wir empfehlen, den Prompt in Google AI Studio oder Vertex AI Studio zu testen, da Sie dort den gesamten Denkprozess sehen können. So können Sie Bereiche identifizieren, in denen das Modell möglicherweise vom richtigen Weg abgekommen ist, und Ihre Prompts entsprechend anpassen, um konsistentere und genauere Antworten zu erhalten.

Beginnen Sie mit einem allgemeinen Prompt, der das gewünschte Ergebnis beschreibt, und beobachten Sie die ersten Überlegungen des Modells zur Bestimmung seiner Antwort. Wenn die Antwort nicht wie erwartet ausfällt, können Sie dem Modell helfen, eine bessere Antwort zu generieren, indem Sie eine der folgenden Prompting-Techniken verwenden:

  • Detaillierte Anleitung
  • Mehrere Beispiele für Eingabe/Ausgabe-Paare angeben
  • Geben Sie an, wie die Ausgabe und die Antworten formuliert und formatiert werden sollen.
  • Genaue Bestätigungsschritte angeben

Zusätzlich zu Prompts können Sie auch die folgenden Empfehlungen berücksichtigen:

  • Legen Sie Systemanweisungen fest. Diese sind wie eine „Präambel“, die Sie hinzufügen, bevor das Modell für weitere Anweisungen aus dem Prompt oder vom Endnutzer freigegeben wird. Damit können Sie das Verhalten des Modells entsprechend Ihrer spezifischen Anforderungen und Anwendungsfälle steuern.

  • Legen Sie einen Denkaufwand (oder ein Budget für Denkprozesse für Gemini 2.5-Modelle) fest, um zu steuern, wie viel das Modell denken kann. Wenn Sie ihn hoch ansetzen, kann das Modell bei Bedarf mehr denken. Wenn Sie den Wert niedriger festlegen, „überdenkt“ das Modell seine Antwort nicht so intensiv. Außerdem wird ein größerer Teil des gesamten Token-Ausgabelimits für die eigentliche Antwort reserviert, was dazu beitragen kann, Latenz und Kosten zu senken.

  • Aktivieren Sie KI-Monitoring in der Firebase-Konsole, um die Anzahl der Thinking-Tokens und die Latenz Ihrer Anfragen mit aktivierter Thinking-Funktion zu überwachen. Wenn Sie Zusammenfassungen der Gedanken aktiviert haben, werden sie in der Konsole angezeigt. Dort können Sie die detaillierte Argumentation des Modells prüfen, um Ihre Prompts zu debuggen und zu optimieren.



Anzahl der Denkprozesse steuern

Sie können konfigurieren, wie viel „Denken“ und Schlussfolgern ein Modell durchführen kann, bevor es eine Antwort zurückgibt. Diese Konfiguration ist besonders wichtig, wenn die Latenz oder die Kosten reduziert werden sollen.

Sehen Sie sich den Vergleich der Schwierigkeitsgrade von Aufgaben an, um zu entscheiden, wie viel Denkfähigkeit ein Modell benötigt. Hier sind einige allgemeine Hinweise:

  • Legen Sie für weniger komplexe Aufgaben einen niedrigeren Wert für „Denken“ fest oder wenn die Reduzierung von Latenz oder Kosten für Sie Priorität hat.
  • Legen Sie für komplexere Aufgaben einen höheren Wert für den Denkprozess fest.

Sie können diese Konfiguration entweder mit Denkebenen (Gemini 3 und höher) oder mit Budgets für Denkprozesse (Gemini 2.5-Modelle) steuern.

Denkaufwand (Gemini 3.x und spätere Modelle)

Sie können festlegen, wie viele Überlegungen ein Modell vom Typ Gemini 3.x und höher anstellen darf, um seine Antwort zu generieren. Dazu geben Sie eine Denkstufe für die Anzahl der Denk-Tokens an, die es verwenden darf.

Denkaufwand festlegen

Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen.

Legen Sie die Denkebene in einem GenerationConfig fest, wenn Sie die GenerativeModel-Instanz erstellen. Die Konfiguration wird für die gesamte Lebensdauer der Instanz beibehalten. Wenn Sie für verschiedene Anfragen unterschiedliche Denkebenen verwenden möchten, erstellen Sie GenerativeModel-Instanzen, die mit den jeweiligen Ebenen konfiguriert sind.

Unterstützte Werte für die Denkebene finden Sie weiter unten in diesem Abschnitt.

Swift

Legen Sie den Denkaufwand in einem GenerationConfig beim Erstellen einer GenerativeModel-Instanz fest.


// ...

// 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_MODEL_NAME",
  generationConfig: generationConfig
)

// ...

Kotlin

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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_MODEL_NAME",
  generationConfig,
)

// ...

Java

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// ...

Web

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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_MODEL_NAME", generationConfig });

// ...

Dart

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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_MODEL_NAME',
  config: generationConfig,
);

// ...

Einheit

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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_MODEL_NAME",
  generationConfig: generationConfig
);

// ...

Unterstützte Werte für den Denkaufwand

In der folgenden Tabelle sind die Werte für die Denkebene aufgeführt, die Sie für jedes Modell festlegen können, indem Sie die Konfiguration des Modells thinkingLevel vornehmen.

MINIMAL LOW MEDIUM HIGH

Das Modell verwendet so wenige Tokens wie möglich; es gibt kaum Denkprozesse.

Aufgaben mit geringer Komplexität

Das Modell verwendet weniger Tokens und minimiert so Latenz und Kosten.

Einfache Aufgaben und Aufgaben mit hohem Durchsatz

Das Modell verfolgt einen ausgewogenen Ansatz.

Aufgaben mittlerer Komplexität

Das Modell verwendet Tokens bis zum maximalen Limit.

Komplexe Prompts, die tiefes logisches Denken erfordern

gemini-3.1-pro-preview (Standard)
gemini-3.5-flash (Standard)
gemini-3.1-flash-lite (Standard)
gemini-3-pro-image-preview („Nano Banana Pro“) (Standard)
gemini-3.1-flash-image-preview („Nano Banana 2“) (Standard)



Budgets für Denkaufgaben (Gemini 2.5-Modelle)

Um zu steuern, wie viel Überlegung ein Gemini 2.5-Modell anstellen kann, um seine Antwort zu generieren, können Sie ein Thinking-Budget für die Anzahl der Thinking-Tokens festlegen, die es verwenden darf.

Budget für Denkprozesse festlegen

Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen.

Legen Sie das Thinking-Budget in einem GenerationConfig fest, wenn Sie die GenerativeModel-Instanz für ein Gemini 2.5-Modell erstellen. Die Konfiguration wird für die gesamte Lebensdauer der Instanz beibehalten. Wenn Sie für verschiedene Anfragen unterschiedliche Denkbudgets verwenden möchten, erstellen Sie GenerativeModel-Instanzen, die jeweils mit dem entsprechenden Budget konfiguriert sind.

Weitere Informationen zu unterstützten Werten für das Denkbudget finden Sie weiter unten in diesem Abschnitt.

Swift

Legen Sie das Budget für Denkprozesse in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(thinkingBudget: 1024)
)

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

// ...

Kotlin

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      thinkingBudget = 1024
  }
}

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

// ...

Java

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setThinkingBudget(1024)
    .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_2.5_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// ...

Web

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
const generationConfig = {
  thinkingConfig: {
    thinkingBudget: 1024
  }
};

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

// ...

Dart

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
final thinkingConfig = ThinkingConfig.withThinkingBudget(1024);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

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

// ...

Einheit

Legen Sie die Werte der Parameter in einem GenerationConfig fest, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
var thinkingConfig = new ThinkingConfig(thinkingBudget: 1024);

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_2.5_MODEL_NAME",
  generationConfig: generationConfig
);

// ...

Unterstützte Werte für das Thinking-Budget

In der folgenden Tabelle sind die Werte für das Denkbudget aufgeführt, die Sie für jedes Modell festlegen können, indem Sie die thinkingBudget des Modells konfigurieren.

Modell Standardwert Verfügbarer Bereich für das Budget für Denkprozesse Wert zum
Deaktivieren des Denkens
Wert zum
Aktivieren von dynamischem Thinking
Mindestwert Höchstwert
Gemini 2.5 Pro 8,192 128 32,768 Kann nicht deaktiviert werden -1
Gemini 2.5 Flash 8,192 1 24,576 0 -1
Gemini 2.5 Flash‑Lite 0
(thinking is disabled by default)
512 24,576 0
oder konfigurieren Sie kein Budget für Denkprozesse
-1



Komplexität der Aufgabe für alle Denkmodelle

  • Einfache Aufgaben – Denken ist nicht so wichtig
    Unkomplizierte Anfragen, bei denen kein komplexes logisches Denken erforderlich ist, z. B. Faktenabruf oder Klassifizierung. Beispiele:

    • „Wo wurde DeepMind gegründet?“
    • Wird in dieser E‑Mail um eine Besprechung gebeten oder werden nur Informationen bereitgestellt?
  • Mittelschwere Aufgaben – es ist wahrscheinlich etwas Nachdenken erforderlich
    Häufige Anfragen, die von einer schrittweisen Verarbeitung oder einem tieferen Verständnis profitieren. Beispiele:

    • „Erstelle eine Analogie zwischen Photosynthese und Erwachsenwerden.“
    • „Vergleiche Elektroautos und Hybridautos.“
  • Schwierige Aufgaben – maximales Denken kann erforderlich sein
    Wirklich komplexe Herausforderungen, z. B. das Lösen komplexer mathematischer Probleme oder Programmieraufgaben. Bei diesen Aufgaben muss das Modell seine gesamten Denk- und Planungsfähigkeiten einsetzen. Oft sind viele interne Schritte erforderlich, bevor eine Antwort gegeben wird. Beispiele:

    • „Löse Aufgabe 1 der AIME 2025: Finde die Summe aller ganzzahligen Basen b > 9, für die 17b ein Teiler von 97b ist.“
    • „Schreibe Python-Code für eine Webanwendung, die Echtzeit-Börsendaten visualisiert, einschließlich der Nutzerauthentifizierung. Mache es so effizient wie möglich.“



Zusammenfassungen der Gedanken

Zusammenfassungen der Überlegungen sind synthetisierte Versionen der rohen Überlegungen des Modells und bieten Einblicke in den internen Prozess der Problemlösung des Modells.

Hier sind einige Gründe, warum Sie in Antworten Zusammenfassungen der Überlegungen einfügen sollten:

  • Sie können die Zusammenfassung der Überlegungen in der Benutzeroberfläche Ihrer App anzeigen oder für Ihre Nutzer zugänglich machen. Die Zusammenfassung der Überlegungen wird als separater Teil in der Antwort zurückgegeben, sodass Sie mehr Kontrolle darüber haben, wie sie in Ihrer App verwendet wird.

  • Wenn Sie auch KI-Monitoring in der Firebase-Konsole aktivieren, werden in der Konsole Zusammenfassungen der Gedanken angezeigt. Dort können Sie die detaillierte Argumentation des Modells prüfen, um Ihre Prompts zu debuggen und zu optimieren.

Hier sind einige wichtige Hinweise zu Gedankenzusammenfassungen:

  • Zusammenfassungen von Denkprozessen werden nicht durch Budgets für Denkprozesse gesteuert. Budgets gelten nur für die Rohdaten der Denkprozesse des Modells. Wenn Thinking deaktiviert ist, gibt das Modell jedoch keine Zusammenfassung der Gedanken zurück.

  • Gedankenzusammenfassungen gelten als Teil der regulären Antwort des Modells in generiertem Text und werden als Ausgabetokens gezählt.

Gedankenzusammenfassungen aktivieren

Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen.

Sie können Zusammenfassungen von Gedanken aktivieren, indem Sie includeThoughts in Ihrer Modellkonfiguration auf „true“ setzen. Sie können dann auf die Zusammenfassung zugreifen, indem Sie das Feld thoughtSummary in der Antwort prüfen.

Hier ist ein Beispiel dafür, wie Sie Zusammenfassungen der Überlegungen mit der Antwort aktivieren und abrufen können:

Swift

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

Einheit

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

Zusammenfassungen von Gedanken streamen

Wenn Sie eine Antwort mit generateContentStream streamen, können Sie auch Zusammenfassungen der Gedanken sehen. Dadurch werden während der Antwortgenerierung fortlaufende, inkrementelle Zusammenfassungen zurückgegeben.

Swift

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

// 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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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

Einheit

Aktivieren Sie Zusammenfassungen von Gedanken in der GenerationConfig, wenn Sie eine GenerativeModel-Instanz erstellen.


// ...

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



Gedankensignaturen

Wenn Sie „thinking“ in Multi-Turn-Interaktionen verwenden, hat das Modell keinen Zugriff auf den Kontext von Gedanken aus vorherigen Turns. Wenn Sie jedoch Funktionsaufrufe verwenden, können Sie Gedankensignaturen nutzen, um den Kontext von Gedanken über mehrere Turns hinweg beizubehalten. Gedankensignaturen sind verschlüsselte Darstellungen des internen Denkprozesses des Modells und sind verfügbar, wenn Sie „thinking“ und Funktionsaufrufe verwenden. Gedankensignaturen werden in folgenden Fällen generiert:

  • Die Funktion „Denken“ ist aktiviert und es werden Gedanken generiert.
  • Die Anfrage enthält Funktionsdeklarationen.

Wenn Sie Thought Signatures nutzen möchten, verwenden Sie Funktionsaufrufe wie gewohnt. Die Firebase AI Logic-SDKs vereinfachen den Prozess, da sie den Status verwalten und Thought Signatures automatisch für Sie verarbeiten. Die SDKs übergeben alle generierten Thought Signatures automatisch zwischen nachfolgenden sendMessage- oder sendMessageStream-Aufrufen in einer Chat-Sitzung.



Preise und Zählen von Denk-Tokens

Für „Thinking“-Tokens gilt dieselbe Preisgestaltung wie für Textausgabe-Tokens. Wenn Sie Gedankenzusammenfassungen aktivieren, werden sie als Denk-Tokens betrachtet und entsprechend berechnet.

Sie können die KI-Überwachung in der Firebase-Konsole aktivieren, um die Anzahl der Thinking-Tokens für Anfragen mit aktivierter Thinking-Funktion zu überwachen.

Sie können die Gesamtzahl der Denk-Tokens aus dem Feld thoughtsTokenCount im Attribut usageMetadata der Antwort abrufen:

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

Einheit

// ...

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

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

Weitere Informationen zu Tokens