Tư duy của Gemini

Các mô hình thuộc dòng Gemini 3 và 2.5 sử dụng một "quy trình tư duy" nội bộ giúp cải thiện đáng kể khả năng suy luận và lập kế hoạch nhiều bước, nhờ đó, các mô hình này có hiệu quả cao đối với các công việc phức tạp như lập trình, toán học nâng cao và phân tích dữ liệu.

Tài liệu này sẽ hướng dẫn bạn cách sử dụng khả năng tư duy của Gemini bằng Gemini API.

Tạo nội dung bằng khả năng tư duy

Việc bắt đầu một yêu cầu bằng mô hình tư duy cũng tương tự như mọi yêu cầu tạo nội dung khác. Điểm khác biệt chính nằm ở việc chỉ định một trong các mô hình có hỗ trợ tư duy trong trường model, như minh hoạ trong ví dụ tạo văn bản sau:

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-3-flash-preview",
    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-3-flash-preview",
    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-3-flash-preview"

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

  fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview: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."
         }
       ]
     }
   ]
 }'
 ```

Bản tóm tắt suy nghĩ

Bản tóm tắt suy nghĩ là phiên bản tóm tắt các suy nghĩ thô của mô hình và cung cấp thông tin chi tiết về quy trình suy luận nội bộ của mô hình. Xin lưu ý rằng các cấp độ và ngân sách tư duy áp dụng cho các suy nghĩ thô của mô hình chứ không áp dụng cho bản tóm tắt suy nghĩ.

Bạn có thể bật bản tóm tắt suy nghĩ bằng cách đặt includeThoughts thành true trong cấu hình yêu cầu. Sau đó, bạn có thể truy cập vào bản tóm tắt bằng cách lặp lại parts của tham số response và kiểm tra boolean thought.

Dưới đây là ví dụ minh hoạ cách bật và truy xuất bản tóm tắt suy nghĩ mà không cần truyền trực tuyến, trả về một bản tóm tắt suy nghĩ cuối cùng duy nhất cùng với phản hồi:

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-3-flash-preview",
  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-3-flash-preview",
    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-3-flash-preview"
  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)
      }
    }
  }
}

Và đây là ví dụ sử dụng khả năng tư duy với tính năng truyền trực tuyến, trả về bản tóm tắt tăng dần, liên tục trong quá trình tạo:

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-3-flash-preview",
    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-3-flash-preview",
    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-3-flash-preview"

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

Kiểm soát khả năng tư duy

Các mô hình Gemini tham gia vào quá trình tư duy linh hoạt theo mặc định, tự động điều chỉnh mức độ nỗ lực suy luận dựa trên mức độ phức tạp của yêu cầu của người dùng. Tuy nhiên, nếu có các ràng buộc cụ thể về độ trễ hoặc yêu cầu mô hình tham gia vào quá trình suy luận sâu hơn bình thường, bạn có thể tuỳ ý sử dụng các tham số để kiểm soát hành vi tư duy.

Cấp độ tư duy (Gemini 3)

Tham số thinkingLevel (được đề xuất cho các mô hình Gemini 3 trở lên) cho phép bạn kiểm soát hành vi suy luận.

Bảng sau đây trình bày chi tiết các chế độ cài đặt thinkingLevel cho từng loại mô hình:

Cấp độ tư duy Gemini 3.1 Pro Gemini 3.1 Flash-Lite Gemini 3 Flash Mô tả
minimal Không được hỗ trợ Được hỗ trợ (Mặc định) Được hỗ trợ Khớp với chế độ cài đặt "không tư duy" cho hầu hết các truy vấn. Mô hình có thể tư duy ở mức tối thiểu cho các công việc lập trình phức tạp. Giảm thiểu độ trễ cho các ứng dụng trò chuyện hoặc ứng dụng có thông lượng cao. Xin lưu ý rằng minimal không đảm bảo rằng tính năng tư duy đã tắt.
low Được hỗ trợ Được hỗ trợ Được hỗ trợ Giảm thiểu độ trễ và chi phí. Phù hợp nhất cho các ứng dụng tuân theo hướng dẫn đơn giản, trò chuyện hoặc ứng dụng có thông lượng cao.
medium Được hỗ trợ Được hỗ trợ Được hỗ trợ Tư duy cân bằng cho hầu hết các công việc.
high Được hỗ trợ (Mặc định, Linh hoạt) Được hỗ trợ (Linh hoạt) Được hỗ trợ (Mặc định, Linh hoạt) Tối đa hoá độ sâu suy luận. Mô hình có thể mất nhiều thời gian hơn đáng kể để đạt được mã thông báo đầu ra đầu tiên (không tư duy), nhưng đầu ra sẽ được suy luận cẩn thận hơn.

Ví dụ sau đây cho thấy cách thiết lập cấp độ tư duy.

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-flash-preview",
    contents="Provide a list of 3 famous physicists and their key contributions",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(thinking_level="low")
    ),
)

print(response.text)

JavaScript

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

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-3-flash-preview",
    contents: "Provide a list of 3 famous physicists and their key contributions",
    config: {
      thinkingConfig: {
        thinkingLevel: ThinkingLevel.LOW,
      },
    },
  });

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

  thinkingLevelVal := "low"

  contents := genai.Text("Provide a list of 3 famous physicists and their key contributions")
  model := "gemini-3-flash-preview"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      ThinkingLevel: &thinkingLevelVal,
    },
  })

fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview: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": {
          "thinkingLevel": "low"
    }
  }
}'

Bạn không thể tắt tính năng tư duy cho Gemini 3.1 Pro. Gemini 3 Flash và Flash-Lite cũng không hỗ trợ tính năng tắt hoàn toàn khả năng tư duy, nhưng chế độ cài đặt minimal có nghĩa là mô hình có thể sẽ không tư duy (mặc dù vẫn có khả năng). Nếu bạn không chỉ định cấp độ tư duy, Gemini sẽ sử dụng cấp độ tư duy linh hoạt mặc định của các mô hình Gemini 3 là "high".

Các mô hình thuộc dòng Gemini 2.5 không hỗ trợ thinkingLevel; hãy sử dụng thinkingBudget.

Ngân sách tư duy

Tham số thinkingBudget (ra mắt cùng với dòng Gemini 2.5) hướng dẫn mô hình về số lượng mã thông báo tư duy cụ thể cần sử dụng để suy luận.

Sau đây là thông tin chi tiết về cấu hình thinkingBudget cho từng loại mô hình. Bạn có thể tắt tính năng tư duy bằng cách đặt thinkingBudget thành 0. Việc đặt thinkingBudget thành -1 sẽ bật tính năng tư duy linh hoạt, nghĩa là mô hình sẽ điều chỉnh ngân sách dựa trên mức độ phức tạp của yêu cầu.

Mô hình Chế độ cài đặt mặc định
(Không đặt ngân sách tư duy)
Phạm vi Tắt tính năng tư duy Bật tính năng tư duy linh hoạt
2.5 Pro Tư duy linh hoạt 128 đến 32768 Không áp dụng: Không thể tắt tính năng tư duy thinkingBudget = -1 (Mặc định)
2.5 Flash Tư duy linh hoạt 0 đến 24576 thinkingBudget = 0 thinkingBudget = -1 (Mặc định)
2.5 Flash Preview Tư duy linh hoạt 0 đến 24576 thinkingBudget = 0 thinkingBudget = -1 (Mặc định)
2.5 Flash Lite Mô hình không tư duy 512 đến 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Flash Lite Preview Mô hình không tư duy 512 đến 24576 thinkingBudget = 0 thinkingBudget = -1
Robotics-ER 1.6 Preview Tư duy linh hoạt 0 đến 24576 thinkingBudget = 0 thinkingBudget = -1 (Mặc định)
2.5 Flash Live Native Audio Preview (09-2025) Tư duy linh hoạt 0 đến 24576 thinkingBudget = 0 thinkingBudget = -1 (Mặc định)

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-flash",
    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-flash",
    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-flash"
  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-flash: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
    }
  }
}'

Tuỳ thuộc vào câu lệnh, mô hình có thể tràn hoặc thiếu ngân sách mã thông báo.

Chữ ký suy nghĩ

Gemini API là API không trạng thái, vì vậy, mô hình sẽ xử lý độc lập mọi yêu cầu API và không có quyền truy cập vào ngữ cảnh suy nghĩ từ các lượt trước trong các tương tác nhiều lượt.

Để bật tính năng duy trì ngữ cảnh suy nghĩ trong các tương tác nhiều lượt, Gemini sẽ trả về chữ ký suy nghĩ. Đây là các biểu diễn được mã hoá của quy trình tư duy nội bộ của mô hình.

  • Các mô hình Gemini 2.5 trả về chữ ký suy nghĩ khi bật tính năng tư duy và yêu cầu bao gồm lệnh gọi hàm, cụ thể là khai báo hàm.
  • Các mô hình Gemini 3 có thể trả về chữ ký suy nghĩ cho tất cả các loại phần. Bạn nên luôn truyền tất cả chữ ký trở lại như đã nhận, nhưng đây là yêu cầu bắt buộc đối với chữ ký lệnh gọi hàm. Hãy đọc trang Chữ ký suy nghĩ để tìm hiểu thêm.

Các giới hạn sử dụng khác cần cân nhắc khi sử dụng lệnh gọi hàm bao gồm:

  • Chữ ký được trả về từ mô hình trong các phần khác trong phản hồi, ví dụ: lệnh gọi hàm hoặc phần văn bản. Trả về toàn bộ phản hồi với tất cả các phần cho mô hình trong các lượt tiếp theo.
  • Không được nối các phần có chữ ký với nhau.
  • Không được hợp nhất một phần có chữ ký với một phần khác không có chữ ký.

Giá

Khi bật tính năng tư duy, giá phản hồi là tổng của mã thông báo đầu ra và mã thông báo tư duy. Bạn có thể lấy tổng số mã thông báo tư duy được tạo từ trường 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))

Các mô hình tư duy tạo ra suy nghĩ đầy đủ để cải thiện chất lượng của phản hồi cuối cùng, sau đó xuất bản tóm tắt để cung cấp thông tin chi tiết về quy trình tư duy. Vì vậy, giá dựa trên số lượng mã thông báo tư duy đầy đủ mà mô hình cần tạo để tạo bản tóm tắt, mặc dù chỉ có bản tóm tắt được xuất từ API.

Bạn có thể tìm hiểu thêm về mã thông báo trong hướng dẫn Đếm mã thông báo.

Các phương pháp hay nhất

Phần này bao gồm một số hướng dẫn để sử dụng các mô hình tư duy một cách hiệu quả. Như mọi khi, việc tuân theo hướng dẫn về câu lệnh và các phương pháp hay nhất sẽ giúp bạn đạt được kết quả tốt nhất.

Gỡ lỗi và định hướng

  • Xem xét khả năng suy luận: Khi không nhận được phản hồi mong muốn từ các mô hình tư duy, bạn có thể phân tích cẩn thận bản tóm tắt suy nghĩ của Gemini. Bạn có thể xem cách mô hình chia nhỏ việc cần làm và đưa ra kết luận, đồng thời sử dụng thông tin đó để điều chỉnh theo kết quả chính xác.

  • Cung cấp hướng dẫn trong quá trình suy luận: Nếu hy vọng nhận được một đầu ra đặc biệt dài, bạn có thể cung cấp hướng dẫn trong câu lệnh để hạn chế mức độ tư duy mà mô hình sử dụng. Điều này cho phép bạn dành nhiều token đầu ra hơn cho phản hồi.

Độ phức tạp của công việc

  • Công việc dễ dàng (Có thể TẮT tính năng tư duy): Đối với các yêu cầu đơn giản không yêu cầu khả năng suy luận phức tạp, chẳng hạn như truy xuất hoặc phân loại thông tin thực tế, thì không cần tư duy. Ví dụ như:
    • "DeepMind được thành lập ở đâu?"
    • "Email này yêu cầu một cuộc họp hay chỉ cung cấp thông tin?"
  • Việc cần làm trung bình (Mặc định/Một số hoạt động tư duy): Nhiều yêu cầu phổ biến được hưởng lợi từ mức độ xử lý từng bước hoặc hiểu biết sâu sắc hơn. Gemini có thể linh hoạt sử dụng khả năng tư duy cho các công việc như:
    • So sánh quang hợp và quá trình trưởng thành.
    • So sánh và đối chiếu xe điện và xe hybrid.
  • Công việc khó (Khả năng tư duy tối đa): Đối với những thách thức thực sự phức tạp, chẳng hạn như giải các bài toán phức tạp hoặc công việc lập trình, bạn nên đặt ngân sách tư duy cao. Các loại công việc này yêu cầu mô hình tham gia vào toàn bộ khả năng suy luận và lập kế hoạch, thường bao gồm nhiều bước nội bộ trước khi đưa ra câu trả lời. Ví dụ như:
    • Giải bài toán 1 trong AIME 2025: Tìm tổng của tất cả các cơ sở số nguyên b > 9 cho mà 17b là ước số của 97b.
    • Viết mã Python cho một ứng dụng web trực quan hoá dữ liệu thị trường chứng khoán theo thời gian thực, bao gồm cả tính năng xác thực người dùng. Hãy làm cho ứng dụng này hiệu quả nhất có thể.

Các mô hình, công cụ và khả năng được hỗ trợ

Các tính năng tư duy được hỗ trợ trên tất cả các mô hình thuộc dòng 3 và 2.5. Bạn có thể tìm thấy tất cả các khả năng của mô hình trên trang tổng quan về mô hình.

Các mô hình tư duy hoạt động với tất cả các công cụ và khả năng của Gemini. Điều này cho phép các mô hình tương tác với các hệ thống bên ngoài, thực thi mã hoặc truy cập vào thông tin theo thời gian thực, kết hợp kết quả vào quá trình suy luận và phản hồi cuối cùng.

Bạn có thể dùng thử các ví dụ về cách sử dụng công cụ với các mô hình tư duy trong Sổ tay tư duy.

Tiếp theo là gì?