Gemini 2.5-Modelle können einen internen „Denkprozess“ nutzen, der ihre Fähigkeiten in Bezug auf Argumentation und mehrstufige Planung erheblich verbessert. Dadurch eignen sie sich hervorragend für komplexe Aufgaben wie Programmierung, fortgeschrittene Mathematik und Datenanalyse.
Denkmodelle bieten die folgenden Konfigurationen und Optionen:
Budget für Denkprozesse: Sie können mit einem Budget für Denkprozesse konfigurieren, wie viel „Denkarbeit“ ein Modell leisten kann. Diese Konfiguration ist besonders wichtig, wenn die Reduzierung von Latenz oder Kosten Priorität hat. Sehen Sie sich auch den Vergleich der Schwierigkeitsgrade von Aufgaben an, um zu entscheiden, wie viel Denkfähigkeit ein Modell benötigt.
Zusammenfassungen der Überlegungen: Sie können Zusammenfassungen der Überlegungen aktivieren, die in die generierte Antwort aufgenommen werden. Diese Zusammenfassungen sind synthetisierte Versionen der rohen Gedanken des Modells und bieten Einblicke in den internen Denkprozess des Modells.
Gedankensignaturen: Die Firebase AI Logic-SDKs verarbeiten Gedankensignaturen automatisch für Sie. So hat das Modell Zugriff auf den Gedankenkontext aus früheren Durchläufen, 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.
Denkmodell verwenden
Verwenden Sie ein Denkmodell wie jedes andere Gemini-Modell.
(Initialisieren Sie den ausgewählten Gemini API-Anbieter, erstellen Sie eine GenerativeModel
-Instanz usw.)
Diese Modelle können für Aufgaben zur Text- oder Codeerstellung verwendet werden, z. B. zum Generieren strukturierter Ausgaben oder zum Analysieren multimodaler Eingaben wie Bilder, Videos, Audiodateien oder PDFs.
Sie können Denkmodelle sogar verwenden, wenn Sie die Ausgabe streamen.
Modelle, die diese Funktion unterstützen
Diese Funktion wird nur von Gemini 2.5-Modellen unterstützt.
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, Ihren 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 Thema abgewichen ist, und Ihre Prompts verfeinern, um konsistentere und genauere Antworten zu erhalten.
Beginnen Sie mit einem allgemeinen Prompt, der das gewünschte Ergebnis beschreibt, und beobachten Sie, wie das Modell seine Antwort bestimmt. 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 Ihren spezifischen Anforderungen und Anwendungsfällen steuern.
Legen Sie ein Thinking-Budget fest, um zu konfigurieren, wie viel das Modell überlegen darf. Wenn Sie ein niedriges Budget festlegen, wird das Modell seine Antwort nicht „überdenken“. Wenn Sie ein hohes Budget festlegen, kann das Modell bei Bedarf mehr Zeit für die Antwort aufwenden. Wenn Sie ein Thinking-Budget festlegen, wird auch mehr des gesamten Tokenausgabelimits für die eigentliche Antwort reserviert.
Aktivieren Sie AI Monitoring in der Firebase-Konsole, um die Anzahl der Thinking-Tokens und die Latenz Ihrer Anfragen mit aktivierter Thinking-Funktion zu überwachen. Wenn Sie Gedankenzusammenfassungen 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.
Budget für Denkprozesse steuern
Sie können festlegen, wie viele Tokens für das Budget für Denkprozesse das Modell verwenden darf, um seine Antwort zu generieren.
Sie können das Budget für Denkprozesse manuell festlegen, wenn Sie mehr oder weniger Tokens als das Standardbudget für Denkprozesse benötigen. Weitere Informationen zur Komplexität von Aufgaben und zu vorgeschlagenen Budgets finden Sie weiter unten in diesem Abschnitt. Hier einige allgemeine Hinweise:
- Niedriges Budget für Denkprozesse festlegen, wenn Latenz wichtig ist oder für weniger komplexe Aufgaben
- Hohes Budget für Denkprozesse für komplexere Aufgaben festlegen
Budget für Denkprozesse festlegen
Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen. |
Legen Sie das Budget für Denkprozesse 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 Denkbudgets verwenden möchten, erstellen Sie GenerativeModel
-Instanzen, die mit dem jeweiligen Budget konfiguriert sind.
Weitere Informationen zu unterstützten Werten für das Thinking-Budget 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_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_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_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_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(thinkingBudget: 1024);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_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_MODEL_NAME",
generationConfig: generationConfig
);
// ...
Unterstützte Werte für das Budget für Denkprozesse
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, der dynamisches Denken ermöglicht |
|
---|---|---|---|---|---|
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 das Budget für Denkprozesse gar nicht) |
-1 |
Begründung deaktivieren
Für einige einfachere Aufgaben ist die Denkfähigkeit nicht erforderlich und die herkömmliche Inferenz reicht aus. Wenn die Latenz reduziert werden soll, sollte das Modell nicht mehr Zeit als nötig für die Generierung einer Antwort benötigen.
In diesen Fällen können Sie das Denken deaktivieren:
- Gemini 2.5 Pro: Die Funktion „Denken“ kann nicht deaktiviert werden.
- Gemini 2.5 Flash:
thinkingBudget
auf0
-Tokens setzen - Gemini 2.5 Flash‑Lite: Die Funktion „Denken“ ist standardmäßig deaktiviert.
Dynamisches Denken fördern
Sie können das Modell entscheiden lassen, wann und wie viel es denkt (dynamisches Denken), indem Sie thinkingBudget
auf -1
setzen. Das Modell kann so viele Tokens verwenden, wie es für angemessen hält, bis zum oben aufgeführten maximalen Token-Wert.
Aufgabenkomplexität
Einfache Aufgaben – Denken kann deaktiviert werden
Unkomplizierte Anfragen, bei denen kein komplexes Reasoning erforderlich ist, z. B. das Abrufen von Fakten oder die Klassifizierung. Beispiele:- „Where was DeepMind founded?“ (Wo wurde DeepMind gegründet?)
- „Wird in dieser E‑Mail um ein Treffen gebeten oder werden nur Informationen bereitgestellt?“
Mittelgroße Aufgaben – Standardbudget oder zusätzliches Budget für das Durchdenken 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 und stelle sie gegenüber.“
Schwierige Aufgaben – maximales Denkbudget erforderlich
Sehr komplexe Aufgaben wie das Lösen komplexer mathematischer Probleme oder Programmieraufgaben. Bei diesen Arten von 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 des 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 Überlegungen in Antworten einfügen
Zusammenfassungen der Überlegungen sind synthetisierte Versionen der Rohüberlegungen des Modells und bieten Einblicke in den internen Denkprozess des Modells.
Hier sind einige Gründe, warum Sie in Antworten Zusammenfassungen der Überlegungen einfügen sollten:
Sie können die Zusammenfassung der Gedanken in der Benutzeroberfläche Ihrer App anzeigen oder Ihren Nutzern zur Verfügung stellen. Die Zusammenfassung der Überlegungen wird als separater Teil in der Antwort zurückgegeben, damit 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 Überlegungen 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 Gedankenübersichten:
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 in der Antwort aktivieren und abrufen können:
Swift
Aktivieren Sie Zusammenfassungen von Überlegungen 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 Überlegungen 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 Überlegungen 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 Überlegungen 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 Überlegungen 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 Gedankenströmen
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 Überlegungen 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 Überlegungen 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 Überlegungen 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 Überlegungen 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 Überlegungen 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 verstehen
Wenn Sie in Multi-Turn-Interaktionen „thinking“ 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 über mehrere Turns hinweg beizubehalten. Gedankensignaturen sind verschlüsselte Darstellungen des internen Denkprozesses des Modells. Sie sind verfügbar, wenn Sie die Funktion „thinking“ und Funktionsaufrufe verwenden. Gedankensignaturen werden insbesondere in folgenden Fällen generiert:
- Die Funktion „Denken“ ist aktiviert und es werden Gedanken generiert.
- Die Anfrage enthält Funktionsdeklarationen.
Um Thought Signatures zu nutzen, verwenden Sie Funktionsaufrufe wie gewohnt.
Die Firebase AI Logic-SDKs vereinfachen den Prozess, da sie den Status verwalten und automatisch Thought-Signaturen für Sie verarbeiten. Die SDKs übergeben alle generierten Gedanken-Signaturen automatisch zwischen nachfolgenden sendMessage
- oder sendMessageStream
-Aufrufen in einer Chat
-Sitzung.
Preise und Zählen von Thinking-Tokens
Für Thinking-Tokens gilt dieselbe Preisgestaltung wie für Text-Output-Tokens. Wenn Sie Gedankenzusammenfassungen aktivieren, werden sie als Denk-Tokens betrachtet und entsprechend berechnet.
Sie können KI-Monitoring in der Firebase-Konsole aktivieren, um die Anzahl der Denk-Tokens für Anfragen mit aktivierter Denkfunktion zu überwachen.
Die Gesamtzahl der Thinking-Tokens finden Sie im Feld thoughtsTokenCount
des Attributs usageMetadata
der Antwort:
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