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:
- Dùng thử Gemini 2.5 Flash trong AI Studio
- Dùng thử Gemini 2.5 Pro trong AI Studio
- Dùng thử Gemini 2.5 Flash-Lite trong AI Studio
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.