Razonamiento

Todos los modelos de Gemini usan un "proceso de pensamiento" interno que mejora significativamente sus capacidades de razonamiento y planificación de varios pasos, lo que los hace muy eficaces para tareas complejas, como programación, matemáticas avanzadas y análisis de datos.

Los modelos de pensamiento ofrecen las siguientes configuraciones y opciones:

  • Controla la cantidad de pensamiento
    Puedes configurar los niveles de pensamiento para controlar la cantidad de "pensamiento" que puede realizar un modelo. Esta configuración es especialmente 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.

  • Obtener resúmenes de pensamientos
    Puedes habilitar los resúmenes de pensamientos para incluirlos en la respuesta generada. Estos resúmenes son versiones sintetizadas de las reflexiones 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 función.

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 usar modelos de pensamiento

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 las ideas 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 instrucción:

  • Proporcionar instrucciones paso a paso
  • Proporciona varios ejemplos de pares de entrada-salida.
  • Proporciona orientación sobre cómo se deben redactar y dar formato a las respuestas y los resultados.
  • 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 en un valor más bajo, el modelo no "pensará demasiado" su respuesta y también reservará una mayor parte 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 los niveles de razonamiento para controlar la cantidad de "razonamiento" que puede realizar un modelo antes de devolver una respuesta. Esta configuración es especialmente importante si reducir la latencia o el costo es una prioridad.

Asegúrate de revisar la comparación de la dificultad de las tareas para decidir cuánta capacidad de pensamiento podría necesitar un modelo. Aquí te damos algunas instrucciones 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 puede razonar un modelo para generar su respuesta, puedes especificar un nivel de razonamiento para la cantidad de tokens de razonamiento que puede usar.

Cómo establecer el nivel de pensamiento

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 el ciclo de vida 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',
  config: 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 pensamiento 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 Argon
gemini-4-argon
1 (predeterminado)
Gemini 3.x Pro
gemini-3.1-pro-preview
(predeterminado)
Gemini 3.x Flash
gemini-3.8-flash
gemini-3.7-flash
gemini-3.6-flash
gemini-3.5-flash

no es compatible con gemini-3.8-flash o gemini-3.7-flash 1
(predeterminado)
Gemini 3.x Flash‑Lite
gemini-3.5-flash-lite
gemini-3.1-flash-lite
(predeterminado)
Gemini 3.x Pro Image
gemini-3-pro-image
("Nano Banana Pro")
(predeterminado)
Gemini 3.x Flash Image
gemini-3.1-flash-image
("Nano Banana 2")
(predeterminado)
Gemini 3.x Flash‑Lite Image
gemini-3.1-flash-lite-image
("Nano Banana 2 Lite")
(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 de Gemini 2.5)

Para controlar cuánto puede pensar 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?"
    • "¿Este correo electrónico solicita una reunión o solo proporciona información?"
  • Tareas moderadas: Es probable que se requiera cierto nivel de análisis
    Solicitudes comunes que se benefician de un cierto grado de procesamiento paso a paso o de 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 utilice todas sus capacidades de razonamiento y planificación, lo que a menudo implica muchos pasos internos antes de proporcionar una respuesta. Ejemplos:

    • "Resuelve el problema 1 del 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 el proceso de razonamiento interno del modelo.

Estos son algunos motivos para incluir resúmenes de pensamiento en las respuestas:

  • Puedes mostrar el resumen de pensamientos en la IU de tu app o hacer que estén disponibles para tus usuarios. 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 la consola de Firebase, 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.

Estas son algunas notas clave sobre los resúmenes de pensamientos:

  • Los resúmenes de pensamiento no se controlan con 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 pensamiento se consideran parte de la respuesta de texto generado normal del modelo y se contabilizan como tokens de salida.

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

Transmite resúmenes de razonamiento

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 respuestas.

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 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 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).
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!;
  }
}

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 función, puedes aprovechar las firmas de pensamiento para mantener el contexto del pensamiento en cada turno. Las firmas de pensamiento son representaciones encriptadas del proceso de pensamiento interno del modelo y están disponibles cuando se usan las funciones de pensamiento y de llamada a función. Específicamente, 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 función 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 conteo 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 según corresponda.

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 de tokens de recuento.