למודלים מסדרת Gemini 2.5 יש 'תהליך חשיבה' פנימי שמשפר באופן משמעותי את יכולות ההסקה והתכנון הרב-שלבי שלהם, ולכן הם יעילים מאוד במשימות מורכבות כמו כתיבת קוד, מתמטיקה מתקדמת וניתוח נתונים.
במדריך הזה מוסבר איך להשתמש ב-Gemini API כדי להפעיל את יכולות החשיבה של Gemini.
לפני שמתחילים
חשוב לוודא שאתם משתמשים במודל נתמך מסדרת 2.5 לצורך חשיבה. מומלץ להתנסות במודלים האלה ב-AI Studio לפני שמתחילים להשתמש ב-API:
- איך מנסים את Gemini 2.5 Flash ב-AI Studio
- איך לנסות את Gemini 2.5 Pro ב-AI Studio
- איך לנסות את Gemini 2.5 Flash-Lite ב-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, Gemini 2.5 Pro ו-Gemini 2.5 Flash-Lite. בהתאם להנחיה, יכול להיות שהמודל יחרוג מהתקציב של הטוקנים או ישתמש בפחות טוקנים מהתקציב.
בהמשך מפורטים פרטי ההגדרה של כל סוג מודל.thinkingBudget
דגם | הגדרת ברירת המחדל (התקציב לא מוגדר) |
טווח | השבתת תהליך העיבוד | הפעלת חשיבה דינמית |
---|---|---|---|---|
2.5 Pro | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 128 עד 32768 |
לא רלוונטי: אי אפשר להשבית את החשיבה | thinkingBudget = -1 |
2.5 Flash | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 0 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
2.5 Flash Lite | המודל לא חושב | 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("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)
}
}
}
}
חתימות מחשבה
מכיוון שקריאות רגילות ל-Gemini API לצורך יצירת טקסט ותוכן הן חסרות מצב (stateless), כשמשתמשים בטכניקת חשיבה באינטראקציות מרובות תורות (כמו צ'אט), למודל אין גישה להקשר של החשיבה מהתורות הקודמות.
אתם יכולים לשמור על הקשר של המחשבה באמצעות חתימות מחשבה, שהן ייצוגים מוצפנים של תהליך המחשבה הפנימי של המודל. המודל מחזיר חתימות של מחשבות באובייקט התגובה כשהוא חושב ומבצע קריאות לפונקציות. כדי לוודא שהמודל ישמור על ההקשר לאורך כמה תורות בשיחה, צריך להעביר את חתימות המחשבה בחזרה למודל בבקשות הבאות.
תקבלו חתימות מחשבה במקרים הבאים:
- האפשרות 'חשיבה' מופעלת ונוצרות מחשבות.
- הבקשה כוללת הצהרות על פונקציות.
דוגמה לשימוש בפונקציות אפשר למצוא בדף בנושא שימוש בפונקציות.
הגבלות שימוש נוספות שכדאי לקחת בחשבון כשמשתמשים בהפעלת פונקציות:
- החתימות מוחזרות מהמודל בתוך חלקים אחרים בתגובה, למשל קריאה לפונקציה או חלקי טקסט. להחזיר את כל התשובה עם כל החלקים למודל בתורות הבאות.
- אל תשרשרו חלקים עם חתימות.
- אל תמזגו חלק אחד עם חתימה עם חלק אחר ללא חתימה.
תמחור
כשהתכונה 'חשיבה' מופעלת, התמחור של התגובה הוא סכום האסימונים של הפלט והאסימונים של החשיבה. אפשר לקבל את המספר הכולל של טוקנים של חשיבה שנוצרו מהשדה 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.
מידע נוסף על טוקנים זמין במדריך בנושא ספירת טוקנים.
מודלים נתמכים
תכונות החשיבה נתמכות בכל המודלים מסדרת 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 ולהשתמש בתוכן הזה כדי לתת תשובה ולעצב אותה.
אפשר לנסות דוגמאות לשימוש בכלים עם מודלים של חשיבה בספר המתכונים של חשיבה.
מה השלב הבא?
כדי לראות דוגמאות מפורטות יותר, כמו:
- שימוש בכלים עם חשיבה
- סטרימינג עם תהליך חשיבה
- שינוי תקציב החשיבה כדי לקבל תוצאות שונות
אפשר לנסות את ספר המתכונים לחשיבה שלנו.
הסבר על הכיסוי של התכונה 'חשיבה' זמין עכשיו במדריך תאימות ל-OpenAI.
מידע נוסף על Gemini 2.5 Pro, Gemini Flash 2.5 ו-Gemini 2.5 Flash-Lite זמין בדף המודל.