Pensamiento de Gemini

Los modelos de la serie Gemini 2.5 utilizan 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.

En esta guía, se muestra cómo trabajar con las capacidades de pensamiento de Gemini usando la API de Gemini.

Antes de comenzar

Asegúrate de usar un modelo de la serie 2.5 compatible para el pensamiento. Te recomendamos que explores estos modelos en AI Studio antes de profundizar en la API:

Genera contenido con pensamiento

Iniciar una solicitud con un modelo de pensamiento es similar a cualquier otra solicitud de generación de contenido. La diferencia clave radica en especificar uno de los modelos con asistencia para el pensamiento en el campo model, como se demuestra en el siguiente ejemplo de generación de texto:

Python

from google import genai

client = genai.Client()
prompt = "Explain the concept of Occam's Razor and provide a simple, everyday example."
response = client.models.generate_content(
    model="gemini-2.5-pro",
    contents=prompt
)

print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const prompt = "Explain the concept of Occam's Razor and provide a simple, everyday example.";

  const response = await ai.models.generateContent({
    model: "gemini-2.5-pro",
    contents: prompt,
  });

  console.log(response.text);
}

main();

Go

package main

import (
  "context"
  "fmt"
  "log"
  "os"
  "google.golang.org/genai"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  prompt := "Explain the concept of Occam's Razor and provide a simple, everyday example."
  model := "gemini-2.5-pro"

  resp, _ := client.Models.GenerateContent(ctx, model, genai.Text(prompt), nil)

  fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent" \
 -H "x-goog-api-key: $GEMINI_API_KEY" \
 -H 'Content-Type: application/json' \
 -X POST \
 -d '{
   "contents": [
     {
       "parts": [
         {
           "text": "Explain the concept of Occam\'s Razor and provide a simple, everyday example."
         }
       ]
     }
   ]
 }'
 ```

Presupuestos de pensamiento

El parámetro thinkingBudget guía al modelo sobre la cantidad de tokens de razonamiento que debe usar cuando genera una respuesta. Por lo general, un recuento de tokens más alto permite un razonamiento más detallado, lo que puede ser beneficioso para abordar tareas más complejas. Si la latencia es más importante, usa un presupuesto más bajo o inhabilita el pensamiento estableciendo thinkingBudget en 0. Si configuras thinkingBudget en -1, se activa el pensamiento dinámico, lo que significa que el modelo ajustará el presupuesto según la complejidad de la solicitud.

El thinkingBudget solo es compatible con Gemini 2.5 Flash, 2.5 Pro y 2.5 Flash-Lite. Según la instrucción, el modelo podría exceder o no alcanzar el presupuesto de tokens.

A continuación, se incluyen los detalles de configuración de thinkingBudget para cada tipo de modelo.

Modelo Parámetro de configuración predeterminado
(no se establece el presupuesto de pensamiento)
Rango Inhabilita el razonamiento Activa el pensamiento dinámico
2.5 Pro Pensamiento dinámico: El modelo decide cuándo y cuánto pensar De 128 a 32768 N/A: No se puede inhabilitar el pensamiento thinkingBudget = -1
2.5 Flash Pensamiento dinámico: El modelo decide cuándo y cuánto pensar De 0 a 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Flash Lite El modelo no piensa De 512 a 24576 thinkingBudget = 0 thinkingBudget = -1

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-pro",
    contents="Provide a list of 3 famous physicists and their key contributions",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(thinking_budget=1024)
        # Turn off thinking:
        # thinking_config=types.ThinkingConfig(thinking_budget=0)
        # Turn on dynamic thinking:
        # thinking_config=types.ThinkingConfig(thinking_budget=-1)
    ),
)

print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-2.5-pro",
    contents: "Provide a list of 3 famous physicists and their key contributions",
    config: {
      thinkingConfig: {
        thinkingBudget: 1024,
        // Turn off thinking:
        // thinkingBudget: 0
        // Turn on dynamic thinking:
        // thinkingBudget: -1
      },
    },
  });

  console.log(response.text);
}

main();

Go

package main

import (
  "context"
  "fmt"
  "google.golang.org/genai"
  "os"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  thinkingBudgetVal := int32(1024)

  contents := genai.Text("Provide a list of 3 famous physicists and their key contributions")
  model := "gemini-2.5-pro"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      ThinkingBudget: &thinkingBudgetVal,
      // Turn off thinking:
      // ThinkingBudget: int32(0),
      // Turn on dynamic thinking:
      // ThinkingBudget: int32(-1),
    },
  })

fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
  "contents": [
    {
      "parts": [
        {
          "text": "Provide a list of 3 famous physicists and their key contributions"
        }
      ]
    }
  ],
  "generationConfig": {
    "thinkingConfig": {
          "thinkingBudget": 1024
          # Thinking off:
          # "thinkingBudget": 0
          # Turn on dynamic thinking:
          # "thinkingBudget": -1
    }
  }
}'

Resúmenes de pensamientos

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. Ten en cuenta que los presupuestos de razonamiento se aplican a los pensamientos sin procesar del modelo y no a los resúmenes de pensamientos.

Para habilitar los resúmenes de pensamientos, establece includeThoughts en true en la configuración de tu solicitud. Luego, puedes acceder al resumen iterando el parts del parámetro response y verificando el valor booleano thought.

Este es un ejemplo que muestra cómo habilitar y recuperar resúmenes de pensamientos sin transmisión, lo que devuelve un solo resumen de pensamientos final con la respuesta:

Python

from google import genai
from google.genai import types

client = genai.Client()
prompt = "What is the sum of the first 50 prime numbers?"
response = client.models.generate_content(
  model="gemini-2.5-pro",
  contents=prompt,
  config=types.GenerateContentConfig(
    thinking_config=types.ThinkingConfig(
      include_thoughts=True
    )
  )
)

for part in response.candidates[0].content.parts:
  if not part.text:
    continue
  if part.thought:
    print("Thought summary:")
    print(part.text)
    print()
  else:
    print("Answer:")
    print(part.text)
    print()

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-2.5-pro",
    contents: "What is the sum of the first 50 prime numbers?",
    config: {
      thinkingConfig: {
        includeThoughts: true,
      },
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (!part.text) {
      continue;
    }
    else if (part.thought) {
      console.log("Thoughts summary:");
      console.log(part.text);
    }
    else {
      console.log("Answer:");
      console.log(part.text);
    }
  }
}

main();

Go

package main

import (
  "context"
  "fmt"
  "google.golang.org/genai"
  "os"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  contents := genai.Text("What is the sum of the first 50 prime numbers?")
  model := "gemini-2.5-pro"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      IncludeThoughts: true,
    },
  })

  for _, part := range resp.Candidates[0].Content.Parts {
    if part.Text != "" {
      if part.Thought {
        fmt.Println("Thoughts Summary:")
        fmt.Println(part.Text)
      } else {
        fmt.Println("Answer:")
        fmt.Println(part.Text)
      }
    }
  }
}

A continuación, se muestra un ejemplo del uso del pensamiento con transmisión, que devuelve resúmenes incrementales y continuos durante la generación:

Python

from google import genai
from google.genai import types

client = genai.Client()

prompt = """
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
The person who lives in the red house owns a cat.
Bob does not live in the green house.
Carol owns a dog.
The green house is to the left of the red house.
Alice does not own a cat.
Who lives in each house, and what pet do they own?
"""

thoughts = ""
answer = ""

for chunk in client.models.generate_content_stream(
    model="gemini-2.5-pro",
    contents=prompt,
    config=types.GenerateContentConfig(
      thinking_config=types.ThinkingConfig(
        include_thoughts=True
      )
    )
):
  for part in chunk.candidates[0].content.parts:
    if not part.text:
      continue
    elif part.thought:
      if not thoughts:
        print("Thoughts summary:")
      print(part.text)
      thoughts += part.text
    else:
      if not answer:
        print("Answer:")
      print(part.text)
      answer += part.text

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `Alice, Bob, and Carol each live in a different house on the same
street: red, green, and blue. The person who lives in the red house owns a cat.
Bob does not live in the green house. Carol owns a dog. The green house is to
the left of the red house. Alice does not own a cat. Who lives in each house,
and what pet do they own?`;

let thoughts = "";
let answer = "";

async function main() {
  const response = await ai.models.generateContentStream({
    model: "gemini-2.5-pro",
    contents: prompt,
    config: {
      thinkingConfig: {
        includeThoughts: true,
      },
    },
  });

  for await (const chunk of response) {
    for (const part of chunk.candidates[0].content.parts) {
      if (!part.text) {
        continue;
      } else if (part.thought) {
        if (!thoughts) {
          console.log("Thoughts summary:");
        }
        console.log(part.text);
        thoughts = thoughts + part.text;
      } else {
        if (!answer) {
          console.log("Answer:");
        }
        console.log(part.text);
        answer = answer + part.text;
      }
    }
  }
}

await main();

Go

package main

import (
  "context"
  "fmt"
  "log"
  "os"
  "google.golang.org/genai"
)

const prompt = `
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
The person who lives in the red house owns a cat.
Bob does not live in the green house.
Carol owns a dog.
The green house is to the left of the red house.
Alice does not own a cat.
Who lives in each house, and what pet do they own?
`

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  contents := genai.Text(prompt)
  model := "gemini-2.5-pro"

  resp := client.Models.GenerateContentStream(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      IncludeThoughts: true,
    },
  })

  for chunk := range resp {
    for _, part := range chunk.Candidates[0].Content.Parts {
      if len(part.Text) == 0 {
        continue
      }

      if part.Thought {
        fmt.Printf("Thought: %s\n", part.Text)
      } else {
        fmt.Printf("Answer: %s\n", part.Text)
      }
    }
  }
}

Firmas de pensamientos

Dado que las llamadas estándar de generación de texto y contenido de la API de Gemini no tienen estado, cuando se usa el pensamiento en interacciones de varios turnos (como el chat), el modelo no tiene acceso al contexto de pensamiento de los turnos anteriores.

Puedes mantener el contexto del pensamiento con firmas de pensamiento, que son representaciones encriptadas del proceso de pensamiento interno del modelo. El modelo devuelve firmas de pensamiento en el objeto de respuesta cuando se habilitan el pensamiento y las llamadas a funciones. Para garantizar que el modelo mantenga el contexto en varios turnos de una conversación, debes proporcionar las firmas de pensamiento al modelo en las solicitudes posteriores.

Recibirás firmas de pensamiento en los siguientes casos:

Puedes encontrar un ejemplo de cómo pensar con llamadas a funciones en la página Llamadas a funciones.

Otras limitaciones de uso que se deben tener en cuenta con la llamada a funciones incluyen las siguientes:

  • Las firmas se devuelven desde el modelo dentro de otras partes de la respuesta, por ejemplo, llamadas a funciones o partes de texto. Devuelve toda la respuesta con todas las partes al modelo en los turnos posteriores.
  • No concatenes partes con firmas.
  • No combines una parte con una firma con otra parte sin firma.

Precios

Cuando se activa el pensamiento, el precio de la respuesta es la suma de los tokens de salida y los tokens de pensamiento. Puedes obtener la cantidad total de tokens de pensamiento generados en el campo thoughtsTokenCount.

Python

# ...
print("Thoughts tokens:",response.usage_metadata.thoughts_token_count)
print("Output tokens:",response.usage_metadata.candidates_token_count)

JavaScript

// ...
console.log(`Thoughts tokens: ${response.usageMetadata.thoughtsTokenCount}`);
console.log(`Output tokens: ${response.usageMetadata.candidatesTokenCount}`);

Go

// ...
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println("Thoughts tokens:", string(usageMetadata.thoughts_token_count))
fmt.Println("Output tokens:", string(usageMetadata.candidates_token_count))

Los modelos de pensamiento generan pensamientos completos para mejorar la calidad de la respuesta final y, luego, generan resúmenes para proporcionar información sobre el proceso de pensamiento. Por lo tanto, el precio se basa en los tokens de pensamiento completos que el modelo necesita generar para crear un resumen, a pesar de que solo el resumen se genera a partir de la API.

Puedes obtener más información sobre los tokens en la guía Recuento de tokens.

Modelos compatibles

Las funciones de pensamiento son compatibles con todos los modelos de la serie 2.5. Puedes encontrar todas las capacidades del modelo en la página de descripción general del modelo.

Prácticas recomendadas

En esta sección, se incluye orientación para usar los modelos de pensamiento de manera eficiente. Como siempre, seguir nuestra orientación y prácticas recomendadas para la creación de instrucciones te brindará los mejores resultados.

Depuración y dirección

  • Revisa el razonamiento: Cuando no obtienes la respuesta esperada de los modelos de pensamiento, puede ser útil analizar cuidadosamente los resúmenes de pensamiento de Gemini. Puedes ver cómo desglosó la tarea y llegó a su conclusión, y usar esa información para corregir los resultados.

  • Proporciona orientación en el razonamiento: Si esperas una respuesta particularmente extensa, es posible que desees proporcionar orientación en tu instrucción para limitar la cantidad de razonamiento que usa el modelo. Esto te permite reservar más de la salida del token para tu respuesta.

Complejidad de la tarea

  • Tareas fáciles (el pensamiento podría estar DESACTIVADO): Para las solicitudes sencillas en las que no se requiere un razonamiento complejo, como la recuperación de hechos o la clasificación, no se requiere pensamiento. Estos son algunos ejemplos:
    • "¿Dónde se fundó DeepMind?"
    • "¿Este correo electrónico solicita una reunión o solo proporciona información?"
  • Tareas medianas (predeterminadas/algo de pensamiento): Muchas solicitudes comunes se benefician de un cierto grado de procesamiento paso a paso o de una comprensión más profunda. Gemini puede usar de forma flexible la capacidad de pensamiento para tareas como las siguientes:
    • Comparar la fotosíntesis con el crecimiento
    • Compara y contrasta los autos eléctricos y los autos híbridos.
  • Tareas difíciles (máxima capacidad de pensamiento): Para los desafíos realmente complejos, como resolver problemas matemáticos complejos o tareas de programación, recomendamos establecer un presupuesto de pensamiento alto. Estos tipos de tareas requieren que el modelo utilice todas sus capacidades de razonamiento y planificación, y, a menudo, implican muchos pasos internos antes de proporcionar una respuesta. Estos son algunos 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.
    • Escribir código de Python para una aplicación web que visualice datos del mercado de valores en tiempo real, incluida la autenticación del usuario Haz que sea lo más eficiente posible.

Pensar con herramientas y capacidades

Los modelos de pensamiento funcionan con todas las herramientas y capacidades de Gemini. Esto permite que los modelos interactúen con sistemas externos, ejecuten código o accedan a información en tiempo real, y que incorporen los resultados a su razonamiento y respuesta final.

  • La herramienta de búsqueda permite que el modelo consulte la Búsqueda de Google para encontrar información actualizada o que vaya más allá de sus datos de entrenamiento. Esto es útil para preguntas sobre eventos recientes o temas muy específicos.

  • La herramienta de ejecución de código permite que el modelo genere y ejecute código Python para realizar cálculos, manipular datos o resolver problemas que se manejan mejor de forma algorítmica. El modelo recibe el resultado del código y puede usarlo en su respuesta.

  • Con el resultado estructurado, puedes restringir a Gemini para que responda con JSON. Esto es particularmente útil para integrar el resultado del modelo en aplicaciones.

  • La llamada a función conecta el modelo de pensamiento con herramientas y APIs externas, de modo que puede razonar cuándo llamar a la función correcta y qué parámetros proporcionar.

  • El Contexto de URL proporciona al modelo URLs como contexto adicional para tu instrucción. Luego, el modelo puede recuperar contenido de las URLs y usarlo para fundamentar y dar forma a su respuesta.

Puedes probar ejemplos de uso de herramientas con modelos de pensamiento en el Libro de cocina de Thinking.

Próximos pasos

  • Para trabajar con ejemplos más detallados, como los siguientes:

    • Uso de herramientas con razonamiento
    • Transmisión con pensamiento
    • Cómo ajustar el presupuesto de pensamiento para obtener diferentes resultados

    y mucho más, prueba nuestro Libro de cocina de Thinking.

  • La cobertura de Thinking ahora está disponible en nuestra guía de compatibilidad con OpenAI.

  • Para obtener más información sobre Gemini 2.5 Pro, Gemini Flash 2.5 y Gemini 2.5 Flash-Lite, visita la página del modelo.