مدلهای Gemini 2.5 میتوانند از یک «فرآیند تفکر» داخلی استفاده کنند که به طور قابل توجهی تواناییهای استدلال و برنامهریزی چند مرحلهای آنها را بهبود میبخشد و آنها را برای کارهای پیچیدهای مانند کدنویسی، ریاضیات پیشرفته و تجزیه و تحلیل دادهها بسیار مؤثر میکند.
مدلهای تفکر، پیکربندیها و گزینههای زیر را ارائه میدهند:
بودجه تفکر : شما میتوانید با استفاده از بودجه تفکر، میزان «تفکر» یک مدل را پیکربندی کنید. این پیکربندی به ویژه در صورتی که کاهش تأخیر یا هزینه در اولویت باشد، مهم است. همچنین، مقایسه دشواری وظایف را بررسی کنید تا تصمیم بگیرید که یک مدل چقدر به توانایی تفکر خود نیاز دارد.
خلاصههای فکری : میتوانید خلاصههای فکری را برای افزودن به پاسخ تولید شده فعال کنید. این خلاصهها نسخههای ترکیبی از افکار خام مدل هستند و بینشهایی در مورد فرآیند استدلال درونی مدل ارائه میدهند.
امضاهای فکری : کیتهای توسعه نرمافزار Firebase AI Logic به طور خودکار امضاهای فکری را برای شما مدیریت میکنند، که تضمین میکند مدل به طور خاص هنگام استفاده از فراخوانی تابع، به زمینه فکری از نوبتهای قبلی دسترسی داشته باشد.
حتماً بهترین شیوهها و راهنماییهای لازم برای استفاده از مدلهای تفکر را مرور کنید.
از یک مدل تفکر استفاده کنید
درست مانند هر مدل Gemini دیگری، از یک مدل تفکر استفاده کنید (ارائهدهنده API Gemini انتخابی خود را مقداردهی اولیه کنید، یک نمونه GenerativeModel ایجاد کنید و غیره). این مدلها میتوانند برای وظایف تولید متن یا کد، مانند تولید خروجی ساختاریافته یا تجزیه و تحلیل ورودی چندوجهی (مانند تصاویر ، ویدیو ، صدا یا PDF ) استفاده شوند. حتی میتوانید هنگام پخش خروجی از مدلهای تفکر استفاده کنید.
مدلهایی که از این قابلیت پشتیبانی میکنند
فقط مدلهای Gemini 3 و Gemini 2.5 از این قابلیت پشتیبانی میکنند.
-
gemini-3-pro-preview -
gemini-3-pro-image-preview(معروف به "نانو موز پرو") -
gemini-2.5-pro -
gemini-2.5-flash -
gemini-2.5-flash-lite
بهترین شیوهها و راهنماییهای لازم برای استفاده از مدلهای تفکر
توصیه میکنیم سوال خود را در Google AI Studio یا Vertex AI Studio آزمایش کنید، جایی که میتوانید فرآیند تفکر کامل را مشاهده کنید. میتوانید هر قسمتی را که مدل ممکن است در آن دچار مشکل شده باشد شناسایی کنید تا بتوانید سوالات خود را اصلاح کنید تا پاسخهای سازگارتر و دقیقتری دریافت کنید.
با یک دستورالعمل کلی که نتیجه مطلوب را توصیف میکند شروع کنید و افکار اولیه مدل را در مورد چگونگی تعیین پاسخ خود مشاهده کنید. اگر پاسخ مطابق انتظار نبود، با استفاده از هر یک از تکنیکهای دستورالعمل زیر به مدل کمک کنید تا پاسخ بهتری ارائه دهد:
- ارائه دستورالعملهای گام به گام
- چند مثال از جفتهای ورودی-خروجی ارائه دهید
- راهنمایی در مورد نحوه بیان و قالببندی خروجی و پاسخها ارائه دهید.
- مراحل تأیید خاص را ارائه دهید
علاوه بر راهنمایی، استفاده از این توصیهها را نیز در نظر بگیرید:
دستورالعملهای سیستم را تنظیم کنید، که مانند یک "مقدمه" هستند که قبل از اینکه مدل در معرض هرگونه دستورالعمل دیگری از طرف prompt یا کاربر نهایی قرار گیرد، اضافه میکنید. آنها به شما امکان میدهند رفتار مدل را بر اساس نیازها و موارد استفاده خاص خود هدایت کنید.
یک بودجه تفکر تعیین کنید تا میزان تفکر مدل را پیکربندی کنید. اگر بودجه کمی تعیین کنید، مدل در پاسخ خود "بیش از حد" فکر نمیکند. اگر بودجه بالایی تعیین کنید، مدل میتواند در صورت نیاز بیشتر فکر کند. تعیین بودجه تفکر همچنین بخش بیشتری از کل محدودیت خروجی توکن را برای پاسخ واقعی ذخیره میکند.
نظارت بر هوش مصنوعی را در کنسول Firebase فعال کنید تا تعداد توکنهای تفکر و تأخیر درخواستهای خود را که تفکر در آنها فعال شده است، رصد کنید. و اگر خلاصههای تفکر را فعال کرده باشید، آنها در کنسول نمایش داده میشوند که در آنجا میتوانید استدلال دقیق مدل را بررسی کنید تا به شما در اشکالزدایی و اصلاح درخواستهایتان کمک کند.
بودجه تفکر را کنترل کنید
برای کنترل میزان تفکری که مدل میتواند برای تولید پاسخ خود انجام دهد، میتوانید تعداد توکنهای بودجه تفکری را که مجاز به استفاده از آنها است، مشخص کنید.
شما میتوانید در موقعیتهایی که ممکن است به توکنهای بیشتر یا کمتری نسبت به بودجه پیشفرض تفکر نیاز داشته باشید، بودجه تفکر را به صورت دستی تنظیم کنید. راهنماییهای دقیقتر در مورد پیچیدگی کار و بودجههای پیشنهادی را بعداً در این بخش خواهید یافت. در اینجا چند راهنمایی سطح بالا آورده شده است:
- اگر تأخیر مهم است یا برای کارهای سادهتر، بودجهی کمی برای فکر کردن تعیین کنید
- برای کارهای پیچیدهتر، بودجهی فکری بالایی تعیین کنید
بودجه تفکر را تعیین کنید
برای مشاهده محتوا و کد مخصوص ارائهدهنده در این صفحه، روی ارائهدهنده API Gemini خود کلیک کنید. |
بودجه تفکر را در GenerationConfig به عنوان بخشی از ایجاد نمونه GenerativeModel تنظیم کنید. این پیکربندی در طول عمر نمونه حفظ میشود. اگر میخواهید از بودجههای تفکر مختلف برای درخواستهای مختلف استفاده کنید، نمونههای GenerativeModel را با هر بودجه پیکربندی کنید.
در ادامه این بخش، درباره مقادیر بودجه مبتنی بر تفکر پشتیبانیشده بیشتر بیاموزید.
سویفت
بودجه تفکر را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(thinkingBudget: 1024)
)
// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
// ...
Kotlin
مقادیر پارامترها را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
thinkingBudget = 1024
}
}
// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
// ...
Java
مقادیر پارامترها را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setThinkingBudget(1024)
.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
);
);
// ...
Web
مقادیر پارامترها را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
const generationConfig = {
thinkingConfig: {
thinkingBudget: 1024
}
};
// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
// ...
Dart
مقادیر پارامترها را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
final thinkingConfig = ThinkingConfig(thinkingBudget: 1024);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
config: generationConfig,
);
// ...
وحدت
مقادیر پارامترها را در GenerationConfig به عنوان بخشی از ایجاد یک نمونه GenerativeModel تنظیم کنید.
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
var thinkingConfig = new ThinkingConfig(thinkingBudget: 1024);
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
);
// ...
ارزشهای بودجهای مبتنی بر تفکر پشتیبانیشده
جدول زیر مقادیر thinking Budget را که میتوانید برای هر مدل با پیکربندی thinkingBudget مدل تنظیم کنید، فهرست میکند.
| مدل | مقدار پیشفرض | محدوده موجود برای بودجهای معقول | ارزش به غیرفعال کردن تفکر | ارزش به تفکر پویا را فعال کنید | |
|---|---|---|---|---|---|
| حداقل مقدار | حداکثر مقدار | ||||
| جمینی ۲.۵ پرو | 8,192 | 128 | 32,768 | خاموش شدنی نیست | -1 |
| فلش جمینی ۲.۵ | 8,192 | 1 | 24,576 | 0 | -1 |
| جمینی ۲.۵ فلش-لایت | 0(فکر کردن به طور پیشفرض غیرفعال است) | 512 | 24,576 | 0(یا اصلاً بودجه تفکر را تنظیم نکنید) | -1 |
غیرفعال کردن تفکر
برای برخی از وظایف آسانتر ، توانایی تفکر ضروری نیست و استنتاج سنتی کافی است. یا اگر کاهش تأخیر در اولویت باشد، ممکن است نخواهید که مدل برای تولید پاسخ، زمان بیشتری از حد لازم صرف کند.
در این شرایط، میتوانید تفکر را غیرفعال (یا خاموش) کنید:
- جمینی ۲.۵ پرو : تفکر را نمیتوان غیرفعال کرد
- Gemini 2.5 Flash :
thinkingBudgetروی0توکن تنظیم کنید - Gemini 2.5 Flash‑Lite : تفکر به طور پیشفرض غیرفعال است
فعال کردن تفکر پویا
شما میتوانید با تنظیم thinkingBudget روی -1 ، به مدل اجازه دهید تصمیم بگیرد چه زمانی و چقدر فکر کند (که به آن تفکر پویا میگویند). مدل میتواند از هر تعداد توکنی که مناسب بداند، تا حداکثر مقدار توکن ذکر شده در بالا، استفاده کند.
پیچیدگی وظیفه
کارهای آسان - تفکر میتواند خاموش شود
درخواستهای سرراست که در آنها به استدلال پیچیده نیاز نیست، مانند بازیابی یا طبقهبندی اطلاعات. مثالها:- «دیپمایند کجا تأسیس شد؟»
- «آیا این ایمیل درخواست جلسه است یا فقط ارائه اطلاعات؟»
وظایف متوسط - بودجه پیشفرض یا مقداری بودجه تفکر اضافی مورد نیاز است
درخواستهای رایجی که از درجهای از پردازش گام به گام یا درک عمیقتر بهرهمند میشوند. مثالها:- «بین فتوسنتز و بزرگ شدن یک تشبیه ایجاد کنید.»
- «مقایسه و تمایز خودروهای برقی و هیبریدی»
وظایف سخت - ممکن است به حداکثر بودجه تفکر نیاز باشد
چالشهای واقعاً پیچیده، مانند حل مسائل پیچیده ریاضی یا وظایف کدنویسی. این نوع وظایف مستلزم آن است که مدل از تمام قابلیتهای استدلال و برنامهریزی خود استفاده کند، که اغلب شامل مراحل داخلی زیادی قبل از ارائه پاسخ است. مثالها:- «مسئله ۱ را در AIME 2025 حل کنید: مجموع تمام پایههای صحیح b > 9 را که در آنها ۱۷b مقسوم علیه ۹۷b است، بیابید.»
- «کد پایتون را برای یک برنامه وب بنویسید که دادههای بازار سهام را به صورت بلادرنگ، از جمله احراز هویت کاربر، نمایش دهد. آن را تا حد امکان کارآمد کنید.»
خلاصه نظرات را در پاسخها بگنجانید
خلاصههای فکری، نسخههای ترکیبی از افکار خام مدل هستند و بینشهایی در مورد فرآیند استدلال درونی مدل ارائه میدهند.
در اینجا چند دلیل برای گنجاندن خلاصه افکار در پاسخها آورده شده است:
شما میتوانید خلاصه افکار را در رابط کاربری برنامه خود نمایش دهید یا آنها را برای کاربران خود قابل دسترسی کنید. خلاصه افکار به عنوان یک بخش جداگانه در پاسخ بازگردانده میشود تا شما کنترل بیشتری بر نحوه استفاده از آن در برنامه خود داشته باشید.
اگر مانیتورینگ هوش مصنوعی را نیز در کنسول Firebase فعال کنید، خلاصههای تفکر در کنسول نمایش داده میشوند که در آن میتوانید استدلال دقیق مدل را بررسی کنید تا به شما در اشکالزدایی و اصلاح دستوراتتان کمک کند.
در اینجا چند نکته کلیدی در مورد خلاصههای فکری آورده شده است:
خلاصههای تفکر توسط بودجههای تفکر کنترل نمیشوند (بودجهها فقط برای افکار خام مدل اعمال میشوند). با این حال، اگر تفکر غیرفعال باشد ، مدل خلاصه تفکر را برنمیگرداند.
خلاصههای فکر بخشی از پاسخ متنی تولید شدهی منظم مدل در نظر گرفته میشوند و به عنوان توکنهای خروجی محسوب میشوند.
خلاصههای فکری را فعال کنید
برای مشاهده محتوا و کد مخصوص ارائهدهنده در این صفحه، روی ارائهدهنده API Gemini خود کلیک کنید. |
شما میتوانید با تنظیم includeThoughts روی true در پیکربندی مدل خود، خلاصههای تفکر را فعال کنید. سپس میتوانید با بررسی فیلد thoughtSummary از پاسخ، به خلاصه دسترسی پیدا کنید.
در اینجا مثالی آورده شده است که نحوه فعال کردن و بازیابی خلاصه افکار را با پاسخ نشان میدهد:
سویفت
خلاصههای تفکر را در 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('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}');
}
وحدت
خلاصههای تفکر را در 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}");
}
# Example Response:
# Okay, let's solve the quadratic equation x² + 4x + 4 = 0.
# ...
# **Answer:**
# The solution to the equation x² + 4x + 4 = 0 is x = -2. This is a repeated root (or a root with multiplicity 2).
# Example Thought Summary:
# **My Thought Process for Solving the Quadratic Equation**
#
# Alright, let's break down this quadratic, x² + 4x + 4 = 0. First things first:
# it's a quadratic; the x² term gives it away, and we know the general form is
# ax² + bx + c = 0.
#
# So, let's identify the coefficients: a = 1, b = 4, and c = 4. Now, what's the
# most efficient path to the solution? My gut tells me to try factoring; it's
# often the fastest route if it works. If that fails, I'll default to the quadratic
# formula, which is foolproof. Completing the square? It's good for deriving the
# formula or when factoring is difficult, but not usually my first choice for
# direct solving, but it can't hurt to keep it as an option.
#
# Factoring, then. I need to find two numbers that multiply to 'c' (4) and add
# up to 'b' (4). Let's see... 1 and 4 don't work (add up to 5). 2 and 2? Bingo!
# They multiply to 4 and add up to 4. This means I can rewrite the equation as
# (x + 2)(x + 2) = 0, or more concisely, (x + 2)² = 0. Solving for x is now
# trivial: x + 2 = 0, thus x = -2.
#
# Okay, just to be absolutely certain, I'll run the quadratic formula just to
# double-check. x = [-b ± √(b² - 4ac)] / 2a. Plugging in the values, x = [-4 ±
# √(4² - 4 * 1 * 4)] / (2 * 1). That simplifies to x = [-4 ± √0] / 2. So, x =
# -2 again - a repeated root. Nice.
#
# Now, let's check via completing the square. Starting from the same equation,
# (x² + 4x) = -4. Take half of the b-value (4/2 = 2), square it (2² = 4), and
# add it to both sides, so x² + 4x + 4 = -4 + 4. Which simplifies into (x + 2)²
# = 0. The square root on both sides gives us x + 2 = 0, therefore x = -2, as
# expected.
#
# Always, *always* confirm! Let's substitute x = -2 back into the original
# equation: (-2)² + 4(-2) + 4 = 0. That's 4 - 8 + 4 = 0. It checks out.
#
# Conclusion: the solution is x = -2. Confirmed.
خلاصههای تفکر جریانی
همچنین میتوانید خلاصههای تفکر را مشاهده کنید اگر تصمیم دارید پاسخی را با استفاده از generateContentStream پخش کنید. این کار خلاصههای افزایشی و غلتان را در طول تولید پاسخ برمیگرداند.
سویفت
خلاصههای تفکر را در 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('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!;
}
}
وحدت
خلاصههای تفکر را در 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 منتقل میکنند.
قیمتگذاری و شمارش توکنهای تفکر
توکنهای تفکر از همان قیمتگذاری توکنهای خروجی متنی استفاده میکنند. اگر خلاصههای تفکر را فعال کنید، آنها به عنوان توکنهای تفکر در نظر گرفته میشوند و بر اساس آن قیمتگذاری میشوند.
شما میتوانید نظارت بر هوش مصنوعی را در کنسول Firebase فعال کنید تا تعداد توکنهای تفکر را برای درخواستهایی که تفکر در آنها فعال است، رصد کنید.
شما میتوانید تعداد کل توکنهای تفکر را از فیلد thoughtsTokenCount در ویژگی usageMetadata پاسخ دریافت کنید:
سویفت
// ...
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}");
}
وحدت
// ...
var response = await model.GenerateContentAsync("Why is the sky blue?");
if (response.UsageMetadata != null)
{
UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}
برای کسب اطلاعات بیشتر در مورد توکنها، به راهنمای شمارش توکنها مراجعه کنید.