Todos los modelos de Gemini usan un "proceso de pensamiento" interno que mejora significativamente sus habilidades de razonamiento y planificación de varios pasos, lo que los hace muy eficaces para tareas complejas, como la programación, las matemáticas avanzadas y el análisis de datos.
Los modelos de razonamiento ofrecen las siguientes opciones de configuración:
Controla la cantidad de pensamiento
Puedes configurar los niveles de pensamiento para controlar cuánto "pensamiento" puede hacer un modelo. Esta configuración es particularmente importante si reducir la latencia o el costo es una prioridad. Además, revisa la comparación de las dificultades de las tareas para decidir cuánto podría necesitar un modelo su capacidad de razonamiento.Obtén resúmenes de pensamientos
Puedes habilitar los resúmenes de pensamientos para incluirlos en la respuesta generada. Estos resúmenes son versiones sintetizadas de los pensamientos sin procesar del modelo y ofrecen estadísticas sobre su proceso de razonamiento interno.Controla las firmas de pensamiento
Los SDK de Firebase AI Logic controlan automáticamente las firmas de pensamiento por ti, lo que garantiza que el modelo tenga acceso al contexto de pensamiento de los turnos anteriores, específicamente cuando se usa la llamada a funciones.
Asegúrate de revisar las prácticas recomendadas y la guía de instrucciones para usar modelos de pensamiento.
Prácticas recomendadas y orientación para escribir instrucciones con modelos de razonamiento
Te recomendamos que pruebes tu instrucción en Google AI Studio o Agent Studio, donde puedes ver todo el proceso de pensamiento. Puedes identificar cualquier área en la que el modelo se haya desviado para que puedas definir mejor tus instrucciones y obtener respuestas más coherentes y precisas.
Comienza con una instrucción general que describa el resultado deseado y observa los pensamientos iniciales del modelo sobre cómo determina su respuesta. Si la respuesta no es la esperada, ayuda al modelo a generar una mejor respuesta con cualquiera de las siguientes técnicas de instrucciones:
- Proporciona instrucciones paso a paso
- Proporciona varios ejemplos de pares de entrada-salida.
- Proporciona orientación sobre cómo se deben redactar y formatear el resultado y las respuestas.
- Proporciona pasos de verificación específicos
Además de las instrucciones, considera usar estas recomendaciones:
Establece instrucciones del sistema, que son como un "preámbulo" que agregas antes de que el modelo se exponga a otras instrucciones de la instrucción o del usuario final. Te permiten dirigir el comportamiento del modelo según tus necesidades y casos de uso específicos.
Establece un nivel de razonamiento para controlar cuánto puede razonar el modelo. Si lo estableces en un valor alto, el modelo puede razonar más, si es necesario. Si lo configuras más bajo, el modelo no "pensará demasiado" su respuesta y también reservará más del límite total de tokens de salida para la respuesta real, lo que puede ayudar a reducir la latencia y el costo.
Habilita la Supervisión de la IA en la consola de Firebase para supervisar el recuento de tokens de razonamiento y la latencia de tus solicitudes que tienen habilitado el razonamiento. Si tienes habilitados los resúmenes de pensamientos, se mostrarán en la consola, donde podrás inspeccionar el razonamiento detallado del modelo para ayudarte a depurar y definir mejor tus instrucciones.
Controla la cantidad de pensamiento
Puedes configurar niveles de razonamiento para controlar cuánto "razonamiento" puede realizar un modelo antes de devolver una respuesta. Esta configuración es muy importante si reducir la latencia o el costo es una prioridad.
Asegúrate de revisar la comparación de las dificultades de las tareas para decidir cuánto podría necesitar un modelo su capacidad de pensamiento. Aquí tienes algunas pautas generales:
- Establece un valor de pensamiento más bajo para las tareas menos complejas o si reducir la latencia o el costo es una prioridad para ti.
- Establece un valor de pensamiento más alto para las tareas más complejas.
Niveles de razonamiento
Para controlar cuánto razonamiento puede hacer un modelo para generar su respuesta, puedes especificar un nivel de razonamiento para la cantidad de tokens de razonamiento que puede usar.
Establece el nivel de razonamiento
|
Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página. |
Establece el nivel de pensamiento en un GenerationConfig como parte de la creación de la
instancia de GenerativeModel. La configuración se mantiene durante la vida útil de
la instancia. Si deseas usar diferentes niveles de pensamiento para diferentes
solicitudes, crea instancias de GenerativeModel configuradas con cada nivel.
Obtén más información sobre los valores admitidos para el nivel de razonamiento más adelante en esta sección.
Swift
Establece el nivel de pensamiento en un
GenerationConfig
como parte de la creación de una instancia de 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
Establece los valores de los parámetros en un
GenerationConfig
como parte de la creación de una instancia de 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
Establece los valores de los parámetros en un
GenerationConfig
como parte de la creación de una instancia de 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
Establece los valores de los parámetros en un
GenerationConfig
como parte de la creación de una instancia de 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
Establece los valores de los parámetros en un
GenerationConfig
como parte de la creación de una instancia de 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
Establece los valores de los parámetros en un
GenerationConfig
como parte de la creación de una instancia de 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
);
// ...
Valores admitidos para el nivel de razonamiento
En la siguiente tabla, se enumeran los valores de nivel de razonamiento que puedes establecer para cada
modelo configurando el thinkingLevel del modelo.
MINIMAL |
LOW |
MEDIUM |
HIGH |
|
|---|---|---|---|---|
|
El modelo usa la menor cantidad posible de tokens, casi sin pensar. Tareas de baja complejidad |
El modelo usa menos tokens, lo que minimiza la latencia y el costo Tareas simples y tareas de alta capacidad de procesamiento |
El modelo usa un enfoque equilibrado Tareas de complejidad moderada |
El modelo usa tokens hasta su nivel máximo Instrucciones complejas que requieren un razonamiento profundo |
|
Gemini 4 Argongemini-4-argon
|
1 | (predeterminado) | ||
Gemini 3.x Progemini-3.1-pro-preview
|
(predeterminado) | |||
Gemini 3.x Flashgemini-3.8-flashgemini-3.7-flashgemini-3.6-flashgemini-3.5-flash
|
no es compatible con gemini-3.8-flashgemini-3.7-flash |
(predeterminado) | ||
Gemini 3.x Flash‑Litegemini-3.5-flash-litegemini-3.1-flash-lite
|
(predeterminado) | |||
Gemini Nano Banana 2.1gemini-nano-banana-2.1
|
(predeterminado) | |||
Gemini Nano Banana 2gemini-3.1-flash-image |
(predeterminado) | |||
Gemini Nano Banana 2 Litegemini-3.1-flash-lite-image |
(predeterminado) | |||
Gemini Nano Banana Progemini-3-pro-image
|
(predeterminado) |
1 gemini-4-argon, gemini-3.8-flash
y gemini-3.7-flash no admiten el
nivel de razonamiento MINIMAL. Si estableces el nivel de pensamiento en
MINIMAL, la solicitud fallará con un error 400.
Presupuestos de pensamiento (modelos Gemini 2.5)
Para controlar cuánto pensamiento puede realizar un modelo de Gemini 2.5 para generar su respuesta, puedes especificar un presupuesto de pensamiento para la cantidad de tokens de pensamiento que puede usar.
Complejidad de la tarea para todos los modelos de pensamiento
Tareas sencillas: No es necesario pensar tanto
Solicitudes directas en las que no se requiere un razonamiento complejo, como la recuperación de datos o la clasificación. Ejemplos:- "¿Dónde se fundó DeepMind?"
- "¿En este correo electrónico se solicita una reunión o solo se proporciona información?"
Tareas moderadas: Es probable que se requiera un poco de reflexión
Solicitudes comunes que se benefician de un grado de procesamiento paso a paso o una comprensión más profunda. Ejemplos:- "Crea una analogía entre la fotosíntesis y el crecimiento".
- Compara y contrasta los automóviles eléctricos y los automóviles híbridos.
Tareas difíciles: Es posible que se requiera el máximo de razonamiento
Desafíos realmente complejos, como resolver problemas matemáticos o tareas de programación complejos. Estos tipos de tareas requieren que el modelo use todas sus capacidades de razonamiento y planificación, lo que suele implicar muchos pasos internos antes de proporcionar una respuesta. Ejemplos:- "Resuelve el problema 1 de la AIME 2025: Encuentra la suma de todas las bases enteras b > 9 para las que 17b es un divisor de 97b".
- "Escribe código de Python para una aplicación web que visualice datos del mercado de valores en tiempo real, incluida la autenticación de usuarios. Haz que sea lo más eficiente posible".
Resúmenes de razonamiento
Los resúmenes de pensamientos son versiones sintetizadas de los pensamientos sin procesar del modelo y ofrecen estadísticas sobre su proceso de razonamiento interno.
Estos son algunos motivos para incluir resúmenes de razonamiento en las respuestas:
Puedes mostrar el resumen de pensamientos en la IU de tu app o hacer que tus usuarios puedan acceder a él. El resumen del pensamiento se devuelve como una parte separada en la respuesta para que tengas más control sobre cómo se usa en tu app.
Si también habilitas la supervisión de la IA en FirebaseFirebase console, los resúmenes de pensamientos se muestran en la consola, donde puedes inspeccionar el razonamiento detallado del modelo para ayudarte a depurar y definir mejor tus instrucciones.
Aquí tienes algunas notas clave sobre los resúmenes de pensamientos:
Los resúmenes de pensamientos no están controlados por los presupuestos de pensamiento (los presupuestos solo se aplican a los pensamientos sin procesar del modelo). Sin embargo, si el pensamiento está inhabilitado, el modelo no devolverá un resumen del pensamiento.
Los resúmenes de razonamiento se consideran parte de la respuesta de texto generado habitual del modelo y se cuentan como tokens de salida.
Habilitar los resúmenes de pensamientos
|
Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página. |
Para habilitar los resúmenes de pensamientos, establece includeThoughts como verdadero en la
configuración del modelo. Luego, puedes acceder al resumen verificando el
campo thoughtSummary de la respuesta.
Este es un ejemplo en el que se muestra cómo habilitar y recuperar resúmenes de pensamientos con la respuesta:
Swift
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en la
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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}");
}
Resúmenes de razonamiento de transmisiones
También puedes ver resúmenes de pensamientos si eliges transmitir una respuesta con
generateContentStream. Esto devolverá resúmenes incrementales y continuos durante
la generación de la respuesta.
Swift
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en la
GenerationConfig
como parte de la creación de una instancia de 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
Habilita los resúmenes de pensamientos en el
GenerationConfig
como parte de la creación de una instancia de 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;
}
}
Firmas de razonamiento
Cuando se usa el pensamiento en interacciones de varios turnos, el modelo no tiene acceso al contexto de pensamiento de los turnos anteriores. Sin embargo, si usas la llamada a funciones, puedes aprovechar las firmas de pensamiento para mantener el contexto del pensamiento en los turnos. Las firmas de pensamiento son representaciones encriptadas del proceso de pensamiento interno del modelo y están disponibles cuando se usan el pensamiento y la llamada a funciones. En particular, las firmas de pensamiento se generan cuando ocurre lo siguiente:
- El pensamiento está habilitado y se generan pensamientos.
- La solicitud incluye declaraciones de funciones.
Para aprovechar las firmas de pensamiento, usa la llamada a funciones como de costumbre.
Los SDK de Firebase AI Logic simplifican el proceso, ya que administran el estado
y controlan automáticamente las firmas de pensamiento por ti. Los SDK pasan automáticamente
las firmas de pensamiento generadas entre las llamadas posteriores a sendMessage o
sendMessageStream en una sesión de Chat.
Precios y recuento de tokens de razonamiento
Los tokens de razonamiento usan los mismos precios que los tokens de salida de texto. Si habilitas los resúmenes de pensamientos, se consideran tokens de razonamiento y se les asigna un precio en consecuencia.
Puedes habilitar la Supervisión de la IA en la consola de Firebase para supervisar el recuento de tokens de razonamiento de las solicitudes que tienen habilitado el razonamiento.
Puedes obtener la cantidad total de tokens de razonamiento del campo thoughtsTokenCount
en el atributo usageMetadata de la respuesta:
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}");
}
Obtén más información sobre los tokens en la guía para contar tokens.