Tư duy của Gemini

Các mô hình thuộc dòng Gemini 2.5 sử dụng "quá 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, khiến các mô hình này trở nên hiệu quả cao đối với các nhiệm vụ phức tạp như lập trình, toán học nâng cao và phân tích dữ liệu.

Hướng dẫn này sẽ cho bạn biết cách khai thác khả năng suy nghĩ của Gemini bằng Gemini API.

Trước khi bắt đầu

Đảm bảo bạn sử dụng mô hình 2.5 được hỗ trợ để suy nghĩ. Bạn nên khám phá những mô hình này trong AI Studio trước khi tìm hiểu về API:

Tạo nội dung bằ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 đây:

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."
         }
       ]
     }
   ]
 }'
 ```

Ngân sách tư duy

Tham số thinkingBudget hướng dẫn mô hình về số lượng mã thông báo tư duy cần sử dụng khi tạo câu trả lời. Số lượng mã thông báo cao hơn thường cho phép suy luận chi tiết hơn, điều này có thể hữu ích khi giải quyết các nhiệm vụ phức tạp hơn. Nếu độ trễ quan trọng hơn, hãy sử dụng ngân sách thấp hơn hoặc tắt tính năng suy nghĩ bằng cách đặt thinkingBudget thành 0. Việc đặt thinkingBudget thành -1 sẽ bật tư duy linh hoạt, tức là mô hình sẽ điều chỉnh ngân sách dựa trên độ phức tạp của yêu cầu.

thinkingBudget chỉ được hỗ trợ trong Gemini 2.5 Flash, 2.5 Pro và 2.5 Flash-Lite. Tuỳ thuộc vào câu lệnh, mô hình có thể tràn hoặc thiếu hụt ngân sách mã thông báo.

Sau đây là thinkingBudget thông tin chi tiết về cấu hình cho từng loại mô hình.

Mô hình Chế độ cài đặt mặc định
(Chưa đặt ngân sách suy nghĩ)
Phạm vi Tắt tiến trình tư duy Bật tư duy linh hoạt
2.5 Pro Tư duy linh hoạt: Mô hình quyết định thời điểm và mức độ cần suy nghĩ 128 đến 32768 Không áp dụng: Không thể tắt tính năng suy nghĩ thinkingBudget = -1
2.5 Flash Tư duy linh hoạt: Mô hình quyết định thời điểm và mức độ cần suy nghĩ 0 đến 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Flash Lite Mô hình không suy nghĩ 512 đến 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
    }
  }
}'

Tóm tắt suy nghĩ

Bản tóm tắt suy nghĩ là phiên bản tổng hợp của những 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 ngân sách tư duy áp dụng cho 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 tính năng 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-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)
      }
    }
  }
}

Sau đây là ví dụ về cách sử dụng tính năng suy nghĩ bằng cách phát trực tuyến, tính năng này trả về bản tóm tắt gia tăng, luân phiên 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-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)
      }
    }
  }
}

Chữ ký tư duy

Vì các lệnh gọi tạo văn bản và nội dung của Gemini API tiêu chuẩn không có trạng thái, nên khi sử dụng tính năng suy nghĩ trong các lượt tương tác nhiều lượt (chẳng hạn như trò chuyện), mô hình sẽ không có quyền truy cập vào ngữ cảnh suy nghĩ từ các lượt trước.

Bạn có thể duy trì ngữ cảnh suy nghĩ bằng cách sử dụng chữ ký suy nghĩ. Đây là các biểu thị được mã hoá của quy trình suy nghĩ nội bộ của mô hình. Mô hình này trả về chữ ký suy nghĩ trong đối tượng phản hồi khi bật tính năng suy nghĩ và gọi hàm. Để đảm bảo mô hình duy trì ngữ cảnh trong nhiều lượt của một cuộc trò chuyện, bạn phải cung cấp lại chữ ký ý tưởng cho mô hình trong các yêu cầu tiếp theo.

Bạn sẽ nhận được chữ ký suy nghĩ khi:

  • Đã bật tính năng suy nghĩ và hệ thống đang tạo suy nghĩ.
  • Yêu cầu này bao gồm khai báo hàm.

Bạn có thể xem ví dụ về cách suy nghĩ bằng lệnh gọi hàm trên trang Gọi hàm.

Những hạn chế khác về việc sử dụng cần cân nhắc khi gọi hàm bao gồm:

  • Chữ ký được trả về từ mô hình trong các phần khác của phản hồi, ví dụ: lệnh gọi hàm hoặc các phần văn bản. Trả về toàn bộ câu trả lời có tất cả các phần cho mô hình trong các lượt tiếp theo.
  • Đừng 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ông có chữ ký.

Giá

Khi tính năng suy nghĩ được bật, giá phản hồi là tổng số mã thông báo đầu ra và mã thông báo suy nghĩ. Bạn có thể lấy tổng số mã thông báo tư duy đã 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 những suy nghĩ đầy đủ để cải thiện chất lượng của câu trả lời cuối cùng, sau đó xuất ra 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á được tính dựa trên số lượng mã thông báo đầ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 ra 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.

Mô hình đượ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 2.5. Bạn có thể tìm thấy tất cả các chức năng của mô hình trên trang tổng quan về mô hình.

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 hiệu quả các mô hình tư duy. Như thường lệ, việc làm theo hướng dẫn và các phương pháp hay nhất về câu lệnh sẽ giúp bạn đạt được kết quả tốt nhất.

Gỡ lỗi và điều hướng

  • Xem xét lập luận: Khi bạn không nhận được câu trả lời như mong đợi từ các mô hình tư duy, bạn có thể phân tích kỹ lưỡng bản tóm tắt suy nghĩ của Gemini. Bạn có thể xem cách AI phân tích nhiệm vụ và đi đến kết luận, đồng thời sử dụng thông tin đó để điều chỉnh cho phù hợp với kết quả mong muốn.

  • Đưa ra hướng dẫn về lý do: Nếu muốn nhận được kết quả đặc biệt dài, bạn có thể đưa ra hướng dẫn trong câu lệnh để hạn chế lượng suy nghĩ mà mô hình sử dụng. Nhờ đó, bạn có thể dành nhiều mã thông báo đầu ra hơn cho câu trả lời của mình.

Độ phức tạp của việc cần làm

  • Các tác vụ đơn giản (có thể TẮT tính năng suy nghĩ): Đối với những yêu cầu đơn giản không đòi hỏi khả năng lập luận phức tạp, chẳng hạn như truy xuất thông tin hoặc phân loại, thì không cần suy nghĩ. Ví dụ:
    • "DeepMind được thành lập ở đâu?"
    • "Email này có yêu cầu tổ chức cuộc họp hay chỉ cung cấp thông tin?"
  • Các tác vụ trung bình (Mặc định/Cần suy nghĩ): Nhiều yêu cầu phổ biến sẽ đượ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 việc như:
    • So sánh quá trình quang hợp với quá trình trưởng thành.
    • So sánh và đối chiếu xe điện và xe lai điện.
  • Nhiệm vụ khó (Khả năng tư duy tối đa): Đối với những thử thách 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 nhiệm vụ lập trình, bạn nên đặt ngân sách tư duy cao. Những loại tác vụ này đòi hỏi mô hình phải sử dụng toàn bộ khả năng lập luận và lập kế hoạch, thường liên quan đến nhiều bước nội bộ trước khi đưa ra câu trả lời. Ví dụ:
    • Giải bài toán 1 trong AIME 2025: Tìm tổng của tất cả các cơ số nguyên b > 9 sao cho 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ả xác thực người dùng. Hãy làm cho nó hiệu quả nhất có thể.

Tư duy bằng các công cụ và chức năng

Các mô hình tư duy hoạt động với tất cả các công cụ và chức 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 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 của chúng.

  • Công cụ tìm kiếm cho phép mô hình truy vấn Google Tìm kiếm để tìm thông tin mới nhất hoặc thông tin ngoài dữ liệu huấn luyện của mô hình. Điều này hữu ích cho những câu hỏi về các sự kiện gần đây hoặc các chủ đề rất cụ thể.

  • Công cụ thực thi mã cho phép mô hình tạo và chạy mã Python để thực hiện các phép tính, thao tác dữ liệu hoặc giải quyết các vấn đề được xử lý tốt nhất bằng thuật toán. Mô hình nhận được đầu ra của mã và có thể sử dụng đầu ra đó trong câu trả lời của mình.

  • Với đầu ra có cấu trúc, bạn có thể giới hạn Gemini chỉ phản hồi bằng JSON. Điều này đặc biệt hữu ích khi tích hợp đầu ra của mô hình vào các ứng dụng.

  • Gọi hàm kết nối mô hình tư duy với các công cụ và API bên ngoài, nhờ đó, mô hình có thể suy luận về thời điểm gọi hàm phù hợp và tham số cần cung cấp.

  • Ngữ cảnh URL cung cấp cho mô hình các URL làm ngữ cảnh bổ sung cho câu lệnh của bạn. Sau đó, mô hình có thể truy xuất nội dung từ các URL và dùng nội dung đó để cung cấp thông tin và định hình câu trả lời.

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

Tiếp theo là gì?

  • Để xem các ví dụ chi tiết hơn, chẳng hạn như:

    • Sử dụng công cụ để tư duy
    • Phát trực tiếp kèm tiến trình tư duy
    • Điều chỉnh ngân sách suy nghĩ cho các kết quả khác nhau

    và nhiều nội dung khác, hãy thử Sổ tay nấu ăn tư duy của chúng tôi.

  • Phạm vi suy nghĩ hiện có trong hướng dẫn Khả năng tương thích với OpenAI của chúng tôi.

  • Để biết thêm thông tin về Gemini 2.5 Pro, Gemini Flash 2.5 và Gemini 2.5 Flash-Lite, hãy truy cập vào trang mô hình.