המודלים בסדרה Gemini 2.5 מתבססים על 'תהליך חשיבה' פנימי שמשפר באופן משמעותי את יכולות ההסקה והתכנון שלהם בכמה שלבים, וכך הם יעילים מאוד במשימות מורכבות כמו כתיבת קוד, מתמטיקה מתקדמת וניתוח נתונים.
במדריך הזה מוסבר איך לעבוד עם יכולות החשיבה של Gemini באמצעות Gemini API.
לפני שמתחילים
חשוב לוודא שאתם משתמשים במודל נתמך מסדרה 2.5 לצורך חשיבה. מומלץ לבדוק את המודלים האלה ב-AI Studio לפני שמתחילים לעבוד עם ה-API:
- איך בודקים את Gemini 2.5 Flash ב-AI Studio
- רוצים לנסות את Gemini 2.5 Pro ב-AI Studio?
- איך בודקים את Gemini 2.5 Flash-Lite Preview ב-AI Studio
יצירת תוכן באמצעות חשיבה
שליחת בקשה עם מודל חשיבה דומה לשליחת כל בקשה אחרת ליצירת תוכן. ההבדל העיקרי הוא שצריך לציין אחד מהמודלים עם תמיכה בחשיבה בשדה model
, כפי שמתואר בדוגמה הבאה ליצירת טקסט:
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."
}
]
}
]
}'
```
תקציבים לחשיבה
הפרמטר thinkingBudget
מנחה את המודל לגבי מספר אסימוני החשיבה שישמשו ליצירת תשובה. בדרך כלל, מספר גדול יותר של אסימונים מאפשר הסקת מסקנות מפורטת יותר, שיכולה להועיל בטיפול במשימות מורכבות יותר. אם זמן האחזור חשוב יותר, אפשר להשתמש בתקציב נמוך יותר או להשבית את החשיבה על ידי הגדרת thinkingBudget
ל-0.
הגדרת הערך של thinkingBudget
ל--1 מפעילה חשיבה דינמית, כלומר המודל יתאים את התקציב בהתאם למורכבות הבקשה.
התמיכה ב-thinkingBudget
קיימת רק ב-Gemini 2.5 Flash, 2.5 Pro ו-2.5 Flash-Lite. בהתאם להנחיה, יכול להיות שהמודל יגרום לחריגה מעל תקציב האסימונים או מתחת לתקציב האסימונים.
בהמשך מפורטים פרטי ההגדרה של thinkingBudget
לכל סוג מודל.
דגם | הגדרת ברירת המחדל (לא הוגדר תקציב לחשיבה) |
טווח | השבתת תהליך העיבוד | הפעלת חשיבה דינמית |
---|---|---|---|---|
2.5 Pro | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 128 עד 32768 |
לא רלוונטי: לא ניתן להשבית את החשיבה | thinkingBudget = -1 |
2.5 Flash | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 0 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
Flash Lite 2.5 | המודל לא חושב | 512 עד 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
}
}
}'
סיכומי מחשבות
סיכומי המחשבות הם גרסאות סינתטיות של המחשבות הגולמיות של המודל, ומספקים תובנות לגבי תהליך ההסקה הפנימי של המודל. חשוב לזכור שתקציבי החשיבה חלים על המחשבות הגולמיות של המודל ולא על סיכומי המחשבות.
כדי להפעיל סיכומי מחשבות, צריך להגדיר את includeThoughts
לערך true
בהגדרות הבקשה. לאחר מכן תוכלו לגשת לסיכום על ידי איטרציה על parts
של הפרמטר response
ובדיקה של הערך הבוליאני thought
.
הנה דוגמה שמראה איך מפעילים ומאחזרים סיכומי מחשבות בלי סטרימינג, כך שהתגובה תכלול סיכום מחשבות סופי אחד:
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)
}
}
}
}
זו דוגמה לשימוש בחשיבה עם סטרימינג, שמחזירה סיכומים מצטברים ומתגלגלים במהלך היצירה:
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("Thoughts summary:")
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)
}
}
}
}
תמחור
כשהאפשרות 'מחשבה' מופעלת, תמחור התשובה הוא הסכום של אסימוני הפלט ושל אסימוני המחשבה. אפשר לקבל את המספר הכולל של אסימוני החשיבה שנוצרו מהשדה 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))
מודלים של חשיבה יוצרים מחשבות מלאות כדי לשפר את איכות התשובה הסופית, ואז יוצרים סיכומים כדי לספק תובנות לגבי תהליך החשיבה. לכן, התמחור מבוסס על אסימוני המחשבות המלאים שהמודל צריך ליצור כדי ליצור סיכום, למרות שהסיכום הוא הפלט היחיד של ה-API.
מידע נוסף על אסימונים זמין במדריך ספירת אסימונים.
מודלים נתמכים
התכונות של Thinking נתמכות בכל הדגמים בסדרה 2.5. כל יכולות המודל מפורטות בדף סקירה כללית של הדגם.
שיטות מומלצות
בקטע הזה מפורטות כמה הנחיות לשימוש יעיל במודלים לחשיבה. כמו תמיד, כדי להשיג את התוצאות הטובות ביותר, מומלץ לפעול לפי ההנחיות והשיטות המומלצות שלנו לגבי הנחיות.
ניפוי באגים והכוונה
בדיקת התהליך: אם התשובה שקיבלתם מהמודלים של החשיבה לא תואמת לציפיות, כדאי לנתח היטב את סיכומי התהליך של Gemini. תוכלו לראות איך המערכת פיצלה את המשימה והגיעה למסקנה שלה, ולהשתמש במידע הזה כדי לתקן את הבעיה ולהגיע לתוצאות הנכונות.
הנחיה לגבי התהליך של המסקנה: אם אתם רוצים לקבל פלט ארוך במיוחד, כדאי לספק הנחיה בהנחיה כדי להגביל את כמות החשיבה שבה המודל משתמש. כך תוכלו להקצות יותר מתפוקת האסימון לתגובה שלכם.
מורכבות המשימה
- משימות פשוטות (אפשר להשבית את החשיבה): לבקשות פשוטות שלא דורשות חשיבה מורכבת, כמו אחזור עובדות או סיווג, אין צורך בחשיבה. דוגמאות:
- "Where was DeepMind founded?"
- "האם האימייל הזה הוא בקשה לפגישה או שהוא רק מספק מידע?"
- משימות בינוניות (ברירת המחדל/חשיבה מסוימת): בקשות נפוצות רבות נהנות מעיבוד מסוים של שלבים או מהבנה מעמיקה יותר. Gemini יכול להשתמש באופן גמיש ביכולת החשיבה במשימות כמו:
- השוואה בין פוטוסינתזה לבין התבגרות.
- השוואה וניגוד בין רכבים חשמליים לבין רכבים היברידיים.
- משימות קשות (יכולת חשיבה מקסימלית): לאתגרים מורכבים באמת, כמו פתרון בעיות מתמטיות מורכבות או משימות תכנות, מומלץ להגדיר תקציב חשיבה גבוה. כדי להשלים משימות כאלה, המודל צריך להפעיל את כל יכולות התכנון וההסקה שלו, ולעיתים קרובות הוא צריך לבצע הרבה שלבים פנימיים לפני שהוא מספק תשובה. דוגמאות:
- פתרון בעיה 1 ב-AIME 2025: חישוב הסכום של כל הבסיסים המספריים b > 9 שבהם 17b הוא חלוק של 97b.
- כתיבה של קוד Python לאפליקציית אינטרנט שמציגה נתונים של שוק המניות בזמן אמת, כולל אימות משתמשים. רצוי שהיא תהיה יעילה ככל האפשר.
חשיבה באמצעות כלים ויכולות
מודלים של חשיבה פועלים עם כל הכלים והיכולות של Gemini. כך המודלים יכולים לקיים אינטראקציה עם מערכות חיצוניות, להריץ קוד או לגשת למידע בזמן אמת, ולהטמיע את התוצאות בתהליך החשיבה ובתגובה הסופית שלהם.
כלי החיפוש מאפשר למודל לשלוח שאילתות לחיפוש Google כדי למצוא מידע עדכני או מידע מעבר לנתוני האימון שלו. האפשרות הזו שימושית לשאלות לגבי אירועים מהזמן האחרון או נושאים ספציפיים מאוד.
כלי ההפעלה של הקוד מאפשר למודל ליצור ולהריץ קוד Python כדי לבצע חישובים, לבצע פעולות על נתונים או לפתור בעיות שהכי טוב לטפל בהן באופן אלגוריתמי. המודל מקבל את הפלט של הקוד ויכול להשתמש בו בתשובה שלו.
בעזרת פלט מובנה, תוכלו לאלץ את Gemini להשיב ב-JSON. האפשרות הזו שימושית במיוחד לשילוב הפלט של המודל באפליקציות.
קריאה לפונקציה מחברת את מודל החשיבה לכלים חיצוניים ולממשקי API, כדי שהוא יוכל להבין מתי לקרוא לפונקציה הנכונה ואילו פרמטרים לספק.
הקשר של כתובת ה-URL מספק לכלים את כתובות ה-URL כרקע נוסף להנחיה. לאחר מכן, המודל יכול לאחזר תוכן מכתובות ה-URL ולהשתמש בתוכן הזה כדי לקבל מידע ולעצב את התשובה שלו.
בספר המתכונים של Thinking תוכלו למצוא דוגמאות לשימוש בכלים עם מודלים של חשיבה.
מה השלב הבא?
דוגמאות מפורטות יותר, כמו:
- שימוש בכלים עם חשיבה
- סטרימינג עם חשיבה
- שינוי תקציב החשיבה לקבלת תוצאות שונות
ועוד, כדאי לנסות את ספר הבישול של Thinking.
האפשרות 'הצגת מחשבות' זמינה עכשיו במדריך שלנו בנושא תאימות ל-OpenAI.
מידע נוסף על Gemini 2.5 Pro, Gemini Flash 2.5 ו-Gemini 2.5 Flash-Lite זמין בדף המודל.