כל המודלים של Gemini משתמשים ב "תהליך חשיבה" פנימי שמשפר משמעותית את יכולות החשיבה הרציונלית והתכנון הרב-שלבי שלהם. לכן הם יעילים מאוד במשימות מורכבות כמו תכנות, מתמטיקה מתקדמת וניתוח נתונים.
למודלים של חשיבה מעמיקה יש את ההגדרות והאפשרויות הבאות:
שליטה בכמות החשיבה
אתם יכולים להגדיר רמות חשיבה כדי לקבוע כמה "חשיבה" המודל יכול לבצע. ההגדרה הזו חשובה במיוחד אם אתם רוצים לצמצם את זמן האחזור או את העלות. כדאי גם לעיין בהשוואה בין רמות הקושי של המשימות כדי להחליט עד כמה המודל צריך את יכולת החשיבה שלו.קבלת סיכומי תהליך החשיבה
אתם יכולים להפעיל את סיכומי תהליך החשיבה כדי לכלול אותם בתשובה שנוצרת. הסיכומים האלה הם גרסאות מסונתזות של המחשבות הגולמיות של המודל, והם מספקים תובנות לגבי תהליך החשיבה הפנימי של המודל.טיפול בחתימות של שלבים בתהליך החשיבה
ערכות ה-SDK של Firebase AI Logic מטפלות באופן אוטומטי בחתימות של שלבים בתהליך החשיבה, כדי לוודא שלמודל יש גישה להקשר של שלבים בתהליך החשיבה מסבבים קודמים, במיוחד כשמשתמשים בקריאה להפעלת פונקציות.
חשוב לקרוא את השיטות המומלצות וההנחיות לכתיבת פרומפטים לשימוש במודלים של חשיבה.
שיטות מומלצות והנחיות לכתיבת הנחיות למודלים של חשיבה
מומלץ לבדוק את ההנחיה ב-Google AI Studio או ב-Agent Studio, שבהם אפשר לראות את תהליך החשיבה המלא. אתם יכולים לזהות תחומים שבהם המודל סטה מהמסלול, ולשפר את ההנחיות כדי לקבל תשובות עקביות ומדויקות יותר.
מתחילים בהנחיה כללית שמתארת את התוצאה הרצויה, ובוחנים את המחשבות הראשוניות של המודל לגבי האופן שבו הוא קובע את התשובה שלו. אם התשובה לא תואמת לציפיות, אפשר לעזור למודל ליצור תשובה טובה יותר באמצעות אחת מהשיטות הבאות להנחיה:
- הוראות מפורטות
- לספק כמה דוגמאות של זוגות קלט-פלט
- הנחיות לניסוח ולעיצוב של הפלט והתשובות
- לספק שלבי אימות ספציפיים
בנוסף להנדסת פרומפטים, כדאי להשתמש בהמלצות הבאות:
להגדיר הוראות מערכת, שהן כמו "הוראות מקדימות" שמוסיפים לפני שהמודל נחשף להוראות נוספות מההנחיה או ממשתמש הקצה. הן מאפשרות לכם לכוון את ההתנהגות של המודל בהתאם לצרכים ולתרחישי השימוש הספציפיים שלכם.
הגדירו רמת חשיבה כדי לקבוע כמה המודל יכול לחשוב. אם תגדירו רמה גבוהה, המודל יוכל לחשוב יותר, לפי הצורך. אם מגדירים ערך נמוך יותר, המודל לא "יחשוב יותר מדי" על התשובה שלו, וגם ישמור יותר ממגבלת הפלט הכוללת של האסימונים לתשובה בפועל, מה שיכול לעזור להפחית את זמן האחזור והעלות.
כדי לעקוב אחרי מספר הטוקנים של החשיבה וזמן האחזור של הבקשות שבהן החשיבה מופעלת, צריך להפעיל את המעקב אחרי שימוש בתכונות AI במסוף Firebase. אם הפעלתם את סיכומי תהליך החשיבה, הם יוצגו במסוף, שם תוכלו לבדוק את תהליך החשיבה המפורט של המודל כדי לנפות באגים ולשפר את ההנחיות.
שליטה ברמת ההעמקה
אתם יכולים להגדיר רמות חשיבה כדי לקבוע כמה "חשיבה" והסקת מסקנות המודל יכול לבצע לפני שהוא מחזיר תשובה. ההגדרה הזו חשובה במיוחד אם אתם רוצים לצמצם את זמן האחזור או את העלות.
כדאי לעיין בהשוואה בין רמות הקושי של המשימות כדי להחליט עד כמה המודל צריך את יכולת החשיבה שלו. הנה כמה הנחיות כלליות:
- כדאי להגדיר ערך חשיבה נמוך יותר למשימות פחות מורכבות, או אם חשוב לכם לצמצם את זמן האחזור או את העלות.
- כדאי להגדיר ערך חשיבה גבוה יותר למשימות מורכבות יותר.
רמות ההעמקה
כדי לשלוט בכמות החשיבה שהמודל יכול לבצע כדי ליצור את התשובה שלו, אתם יכולים לציין רמת חשיבה לכמות טוקנים של חשיבה שמותר לו להשתמש בהם.
הגדרת רמת ההעמקה
|
כדי לראות תוכן וקוד שספציפיים לספק, לוחצים על הספק Gemini API בדף הזה. |
מגדירים את רמת החשיבה ב-GenerationConfig כחלק מיצירת המכונה של GenerativeModel. ההגדרה נשמרת לאורך כל חיי המכונה. אם אתם רוצים להשתמש ברמות חשיבה שונות לבקשות שונות, אתם יכולים ליצור מכונות GenerativeModel שמוגדרות לכל רמה.
בהמשך הקטע הזה מפורטים הערכים הנתמכים לרמת העמקה.
Swift
מגדירים את רמת החשיבה ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(thinkingLevel: .low)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_3.x_MODEL_NAME",
generationConfig: generationConfig
)
// ...
Kotlin
מגדירים את ערכי הפרמטרים ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
thinkingLevel = ThinkingLevel.LOW
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_3.x_MODEL_NAME",
generationConfig,
)
// ...
Java
מגדירים את ערכי הפרמטרים ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setThinkingLevel(ThinkingLevel.LOW)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_3.x_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// ...
Web
מגדירים את ערכי הפרמטרים ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
const generationConfig = {
thinkingConfig: {
thinkingLevel: ThinkingLevel.LOW
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_3.x_MODEL_NAME", generationConfig });
// ...
Dart
מגדירים את ערכי הפרמטרים ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
final thinkingConfig = ThinkingConfig.withThinkingLevel(ThinkingLevel.low);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_3.x_MODEL_NAME',
generationConfig: generationConfig,
);
// ...
Unity
מגדירים את ערכי הפרמטרים ב-GenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
var thinkingConfig = new ThinkingConfig(thinkingLevel: ThinkingLevel.Low);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_3.x_MODEL_NAME",
generationConfig: generationConfig
);
// ...
ערכים נתמכים של רמות העמקה
בטבלה הבאה מפורטים הערכים של רמת החשיבה שאפשר להגדיר לכל מודל על ידי הגדרת thinkingLevel של המודל.
MINIMAL |
LOW |
MEDIUM |
HIGH |
|
|---|---|---|---|---|
|
המודל משתמש בכמה שפחות אסימונים, כמעט בלי חשיבה משימות פשוטות |
המודל משתמש בפחות טוקנים, מה שמקצר את זמן האחזור ומפחית את העלות משימות פשוטות ומשימות עם תפוקה גבוהה |
המודל משתמש בגישה מאוזנת משימות ברמת מורכבות בינונית |
המודל משתמש בטוקנים עד לרמה המקסימלית שלו הנחיות מורכבות שדורשות חשיבה מעמיקה |
|
Gemini 4 Argongemini-4-argon
|
1 | (ברירת המחדל) | ||
Gemini 3.x Progemini-3.1-pro-preview
|
(ברירת המחדל) | |||
Gemini 3.x Flashgemini-3.8-flashgemini-3.7-flashgemini-3.6-flashgemini-3.5-flash
|
לא נתמך על ידי gemini-3.8-flashgemini-3.7-flash |
(ברירת המחדל) | ||
Gemini 3.x Flash‑Litegemini-3.5-flash-litegemini-3.1-flash-lite
|
(ברירת המחדל) | |||
Gemini Nano Banana 2.1gemini-nano-banana-2.1
|
(ברירת המחדל) | |||
Gemini Nano Banana 2gemini-3.1-flash-image |
(ברירת המחדל) | |||
Gemini Nano Banana 2 Litegemini-3.1-flash-lite-image |
(ברירת המחדל) | |||
Gemini Nano Banana Progemini-3-pro-image
|
(ברירת המחדל) |
1 המודלים gemini-4-argon, gemini-3.8-flash ו-gemini-3.7-flash לא תומכים ברמת ההעמקה MINIMAL. אם מגדירים את רמת החשיבה לערך MINIMAL, הבקשה תיכשל ותופיע שגיאה 400.
תקציבי חשיבה (מודלים של Gemini 2.5)
כדי לקבוע כמה המודל של Gemini 2.5 יכול לחשוב כשהוא יוצר תשובה, אתם יכולים להגדיר תקציב חשיבה – מספר הטוקנים של חשיבה שמותר לו להשתמש בהם.
מורכבות המשימה בכל המודלים החושבים
משימות פשוטות – לא צריך לחשוב יותר מדי
בקשות פשוטות שלא דורשות חשיבה מורכבת, כמו שליפת עובדות או סיווג. דוגמאות:- "Where was DeepMind founded?"
- "האם באימייל הזה מבקשים פגישה או רק מספקים מידע?"
משימות ברמת קושי בינונית – כנראה שצריך קצת חשיבה
בקשות נפוצות שדורשות עיבוד מסוים של שלבים או הבנה מעמיקה יותר. דוגמאות:- "צור אנלוגיה בין פוטוסינתזה לבין התבגרות".
- השווה והבדל בין מכוניות חשמליות לרכבים היברידיים.
משימות קשות – יכול להיות שיידרש מאמץ חשיבה מקסימלי
אתגרים מורכבים באמת, כמו פתרון בעיות מתמטיות מורכבות או משימות תכנות. כדי לבצע משימות כאלה, המודל צריך להשתמש בכל יכולות החשיבה והתכנון שלו, ולעיתים קרובות הוא מבצע הרבה שלבים פנימיים לפני שהוא מספק תשובה. דוגמאות:- "פתור את בעיה 1 ב-AIME 2025: מצא את הסכום של כל בסיסי המספרים השלמים b > 9 שבהם 17b הוא מחלק של 97b".
- "כתוב קוד Python לאפליקציית אינטרנט שמציגה נתונים בזמן אמת של שוק המניות, כולל אימות משתמשים. תעשה את זה כמה שיותר יעיל".
סיכומי מחשבות
סיכומי תהליך החשיבה הם גרסאות מסוכמות של תהליך החשיבה הגולמי של המודל, והם מספקים תובנות לגבי תהליך החשיבה הפנימי של המודל.
הנה כמה סיבות לכלול סיכומי תהליך חשיבה בתשובות:
אתם יכולים להציג את סיכום תהליך החשיבה בממשק המשתמש של האפליקציה או לאפשר למשתמשים לגשת אליו. סיכום תהליך החשיבה מוחזר כחלק נפרד בתשובה, כדי שתהיה לכם יותר שליטה על אופן השימוש בו באפליקציה.
אם תפעילו גם את המעקב אחרי שימוש בתכונות AI במסוף Firebase, סיכומי שלבים בתהליך החשיבה יוצגו במסוף ותוכלו לבדוק את החשיבה הרציונלית המפורטת של המודל כדי לנפות באגים ולשפר את הפרומפטים.
הנה כמה דברים שחשוב לדעת על סיכומי תהליך החשיבה:
סיכומי המחשבות לא נשלטים על ידי תקציבי החשיבה (התקציבים חלים רק על המחשבות הגולמיות של המודל). עם זאת, אם החשיבה מושבתת, המודל לא יחזיר סיכום של תהליך החשיבה.
סיכומי תהליך החשיבה נחשבים לחלק מהתשובה הרגילה של המודל, והם נספרים כטוקנים של פלט.
הפעלת סיכומי תהליך החשיבה
|
כדי לראות תוכן וקוד שספציפיים לספק, לוחצים על הספק Gemini API בדף הזה. |
כדי להפעיל את סיכומי תהליך החשיבה, מגדירים את includeThoughts כ-true בהגדרות המודל. כדי לגשת לסיכום, בודקים את השדה thoughtSummary בתגובה.
הדוגמה הבאה ממחישה איך להפעיל ולאחזר סיכומי חשיבה בתשובה:
Swift
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let response = try await model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries.
if let thoughtSummary = response.thoughtSummary {
print("Thought Summary: \(thoughtSummary)")
}
guard let text = response.text else {
fatalError("No text in response.")
}
print("Answer: \(text)")
Kotlin
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
val response = model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries.
response.thoughtSummary?.let {
println("Thought Summary: $it")
}
response.text?.let {
println("Answer: $it")
}
Java
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Handle the response that includes thought summaries.
ListenableFuture responseFuture = model.generateContent("solve x^2 + 4x + 4 = 0");
Futures.addCallback(responseFuture, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse response) {
if (response.getThoughtSummary() != null) {
System.out.println("Thought Summary: " + response.getThoughtSummary());
}
if (response.getText() != null) {
System.out.println("Answer: " + response.getText());
}
}
@Override
public void onFailure(Throwable t) {
// Handle error
}
}, MoreExecutors.directExecutor());
Web
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContent("solve x^2 + 4x + 4 = 0");
const response = result.response;
// Handle the response that includes thought summaries.
if (response.thoughtSummary()) {
console.log(`Thought Summary: ${response.thoughtSummary()}`);
}
const text = response.text();
console.log(`Answer: ${text}`);
Dart
מפעילים את סיכומי תהליך החשיבה בGenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final response = await model.generateContent([Content.text('solve x^2 + 4x + 4 = 0')]);
// Handle the response that includes thought summaries.
if (response.thoughtSummary != null) {
print('Thought Summary: ${response.thoughtSummary}');
}
if (response.text != null) {
print('Answer: ${response.text}');
}
Unity
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var response = await model.GenerateContentAsync("solve x^2 + 4x + 4 = 0");
// Handle the response that includes thought summaries.
if (response.ThoughtSummary != null) {
Debug.Log($"Thought Summary: {response.ThoughtSummary}");
}
if (response.Text != null) {
Debug.Log($"Answer: {response.Text}");
}
סיכום תהליך החשיבה בזמן אמת
אתם יכולים גם לראות סיכומי מחשבות אם אתם בוחרים להציג תשובה בסטרימינג באמצעות generateContentStream. הפעולה הזו תחזיר סיכומים מצטברים ומתגלגלים במהלך יצירת התשובה.
Swift
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let stream = try model.generateContentStream("solve x^2 + 4x + 4 = 0")
// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
for try await response in stream {
if let thought = response.thoughtSummary {
if thoughts.isEmpty {
print("--- Thoughts Summary ---")
}
print(thought)
thoughts += thought
}
if let text = response.text {
if answer.isEmpty {
print("--- Answer ---")
}
print(text)
answer += text
}
}
Kotlin
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
model.generateContentStream("solve x^2 + 4x + 4 = 0").collect { response ->
response.thoughtSummary?.let {
if (thoughts.isEmpty()) {
println("--- Thoughts Summary ---")
}
print(it)
thoughts += it
}
response.text?.let {
if (answer.isEmpty()) {
println("--- Answer ---")
}
print(it)
answer += it
}
}
Java
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Streaming with Java is complex and depends on the async library used.
// This is a conceptual example using a reactive stream.
Flowable responseStream = model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries
StringBuilder thoughts = new StringBuilder();
StringBuilder answer = new StringBuilder();
responseStream.subscribe(response -> {
if (response.getThoughtSummary() != null) {
if (thoughts.length() == 0) {
System.out.println("--- Thoughts Summary ---");
}
System.out.print(response.getThoughtSummary());
thoughts.append(response.getThoughtSummary());
}
if (response.getText() != null) {
if (answer.length() == 0) {
System.out.println("--- Answer ---");
}
System.out.print(response.getText());
answer.append(response.getText());
}
}, throwable -> {
// Handle error
});
Web
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries.
let thoughts = "";
let answer = "";
for await (const chunk of result.stream) {
if (chunk.thoughtSummary()) {
if (thoughts === "") {
console.log("--- Thoughts Summary ---");
}
// In Node.js, process.stdout.write(chunk.thoughtSummary()) could be used
// to avoid extra newlines.
console.log(chunk.thoughtSummary());
thoughts += chunk.thoughtSummary();
}
const text = chunk.text();
if (text) {
if (answer === "") {
console.log("--- Answer ---");
}
// In Node.js, process.stdout.write(text) could be used.
console.log(text);
answer += text;
}
}
Dart
מפעילים את סיכומי תהליך החשיבה בGenerationConfig כחלק מיצירת מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final responses = model.generateContentStream([Content.text('solve x^2 + 4x + 4 = 0')]);
// Handle the streamed response that includes thought summaries.
var thoughts = '';
var answer = '';
await for (final response in responses) {
if (response.thoughtSummary != null) {
if (thoughts.isEmpty) {
print('--- Thoughts Summary ---');
}
thoughts += response.thoughtSummary!;
}
if (response.text != null) {
if (answer.isEmpty) {
print('--- Answer ---');
}
answer += response.text!;
}
}
Unity
מפעילים את סיכומי תהליך החשיבה ב-GenerationConfig כשיוצרים מכונה של GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var stream = model.GenerateContentStreamAsync("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries.
var thoughts = "";
var answer = "";
await foreach (var response in stream)
{
if (response.ThoughtSummary != null)
{
if (string.IsNullOrEmpty(thoughts))
{
Debug.Log("--- Thoughts Summary ---");
}
Debug.Log(response.ThoughtSummary);
thoughts += response.ThoughtSummary;
}
if (response.Text != null)
{
if (string.IsNullOrEmpty(answer))
{
Debug.Log("--- Answer ---");
}
Debug.Log(response.Text);
answer += response.Text;
}
}
חתימות של תהליך החשיבה
כשמשתמשים בתהליך חשיבה באינטראקציות עם כמה סבבים, למודל אין גישה להקשר של תהליך החשיבה מסבבים קודמים. עם זאת, אם אתם משתמשים בקריאה להפעלת פונקציות, אתם יכולים להשתמש בחתימות מחשבה כדי לשמור על ההקשר של המחשבה בין הפניות. חתימות החשיבה הן ייצוגים מוצפנים של תהליך החשיבה הפנימי של המודל, והן זמינות כשמשתמשים בחשיבה וגם בקריאה להפעלת פונקציות. באופן ספציפי, חתימות המחשבה נוצרות כש:
- החשיבה מופעלת ונוצרות מחשבות.
- הבקשה כוללת הצהרות על פונקציות.
כדי להשתמש בחתימות החשיבה, השתמשו בקריאה להפעלת פונקציות כרגיל.
ערכות ה-SDK של Firebase AI Logic מפשטות את התהליך על ידי ניהול המצב וטיפול אוטומטי בחתימות המחשבה. ערכות ה-SDK מעבירות באופן אוטומטי את כל חתימות המחשבה שנוצרו בין קריאות עוקבות של sendMessage או sendMessageStream בסשן Chat.
תמחור וספירה של טוקנים של חשיבה
התמחור של טוקנים של חשיבה זהה לזה של טוקנים של פלט טקסט. אם מפעילים סיכומי חשיבה, הם נחשבים לטוקנים של חשיבה והמחיר שלהם נקבע בהתאם.
אתם יכולים להפעיל מעקב אחרי שימוש בתכונות AI במסוף Firebase כדי לעקוב אחרי מספר הטוקנים של חשיבה בבקשות שבהן החשיבה מופעלת.
כדי לקבל את המספר הכולל של טוקנים של חשיבה, אפשר להשתמש בשדה thoughtsTokenCount במאפיין usageMetadata של התשובה:
Swift
// ...
let response = try await model.generateContent("Why is the sky blue?")
if let usageMetadata = response.usageMetadata {
print("Thoughts Token Count: \(usageMetadata.thoughtsTokenCount)")
}
Kotlin
// ...
val response = model.generateContent("Why is the sky blue?")
response.usageMetadata?.let { usageMetadata ->
println("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}")
}
Java
// ...
ListenableFuture<GenerateContentResponse> response =
model.generateContent("Why is the sky blue?");
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String usageMetadata = result.getUsageMetadata();
if (usageMetadata != null) {
System.out.println("Thoughts Token Count: " +
usageMetadata.getThoughtsTokenCount());
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
// ...
const response = await model.generateContent("Why is the sky blue?");
if (response?.usageMetadata?.thoughtsTokenCount != null) {
console.log(`Thoughts Token Count: ${response.usageMetadata.thoughtsTokenCount}`);
}
Dart
// ...
final response = await model.generateContent(
Content.text("Why is the sky blue?"),
]);
if (response?.usageMetadata case final usageMetadata?) {
print("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}");
}
Unity
// ...
var response = await model.GenerateContentAsync("Why is the sky blue?");
if (response.UsageMetadata != null)
{
UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}
מידע נוסף על טוקנים זמין במדריך לספירת טוקנים.