مدلهای Gemini از یک «فرایند تفکر» استفاده میکنند که تواناییهای استدلال و برنامهریزی چندمرحلهای آنها را بهطور قابلتوجهی بهبود میبخشد و آنها را برای کارهای پیچیده مانند کدنویسی، ریاضیات پیشرفته، و تجزیهوتحلیل دادهها بسیار مؤثر میسازد.
وقتی از مدل اندیشگر استفاده میکنید، Gemini قبلاز پاسخ دادن بهصورت داخلی استدلال میکند. «میانای برنامهسازی کاربردی تعاملات» این استدلال را ازطریق thought مرحله، مراحل اختصاصی که بهترتیب زمانی در کنار فراخوانیهای تابع، ورودیهای کاربر، یا بروندادهای مدل در آرایه steps ظاهر میشوند، نمایان میکند.
هر مرحله فکری شامل دو فیلد است:
| فیلد | الزامی | شرح |
|---|---|---|
signature |
✅ بله | نمایش رمزگذاریشدهای از وضعیت استدلال داخلی مدل. همیشه وجود دارد، حتی زمانی که مدل حداقل استدلال را انجام میدهد. |
summary |
❌ نه | مجموعهای از محتوا (نوشتار و/یا تصاویر) که استدلال را خلاصه میکند. بسته به پیکربندی thinking_summaries، اینکه مدل استدلال کافی انجام داده است یا نه، یا نوع محتوا (برای مثال، تصاویر پنهان ممکن است خلاصه نوشتاری نداشته باشند) ممکن است خالی باشد. |
تعامل با فکر کردن
شروع تعامل با مدل اندیشگر مشابه هر درخواست تعامل دیگری است. یکی از مدلهای دارای پشتیبانی از استدلال را در فیلد model مشخص کنید:
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.8-flash",
input="Explain the concept of Occam's Razor and provide a simple, everyday example."
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: "Explain the concept of Occam's Razor and provide a simple, everyday example."
});
console.log(interaction.output_text);
جاوا
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(
InteractionsInput.of(
"Explain the concept of Occam's Razor and provide a simple, everyday example."))
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(interaction.outputText().orElse(""));
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput("Explain the concept of Occam's Razor and provide a simple, everyday example."),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": "Explain the concept of Occam'\''s Razor and provide a simple example."
}'
خلاصه افکار
خلاصههای فکری اطلاعاتی درباره فرایند استدلال داخلی مدل ارائه میدهند.
بهطور پیشفرض، فقط برونداد نهایی برگردانده میشود. میتوانید خلاصه افکار را
با thinking_summaries فعال کنید:
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.8-flash",
input="What is the sum of the first 50 prime numbers?",
generation_config={
"thinking_summaries": "auto"
}
)
for step in interaction.steps:
if step.type == "thought":
print("Thought summary:")
if step.summary:
for content_block in step.summary:
if content_block.type == "text":
print(content_block.text)
print()
elif step.type == "model_output":
for content_block in step.content:
if content_block.type == "text":
print("Answer:")
print(content_block.text)
print()
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: "What is the sum of the first 50 prime numbers?",
generation_config: {
thinking_summaries: "auto"
}
});
for (const step of interaction.steps) {
if (step.type === "thought") {
console.log("Thought summary:");
if (step.summary) {
for (const contentBlock of step.summary) {
if (contentBlock.type === "text") console.log(contentBlock.text);
}
}
} else if (step.type === "model_output") {
for (const contentBlock of step.content) {
if (contentBlock.type === "text") {
console.log("Answer:");
console.log(contentBlock.text);
}
}
}
}
جاوا
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.GenerationConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.ModelOutputStep;
import com.google.genai.gaos.models.interactions.Step;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.interactions.ThoughtStep;
import com.google.genai.gaos.models.interactions.ThoughtSummaryContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Collections;
Client client = new Client();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.of("What is the sum of the first 50 prime numbers?"))
.generationConfig(
GenerationConfig.builder().thinkingSummaries(ThinkingSummaries.AUTO).build())
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
for (Step step : interaction.steps().orElse(Collections.emptyList())) {
if (step instanceof ThoughtStep thoughtStep) {
System.out.println("Thought summary:");
for (ThoughtSummaryContent contentBlock : thoughtStep.summary().orElse(Collections.emptyList())) {
if (contentBlock instanceof TextContent textContent) {
System.out.println(textContent.text().orElse(""));
}
}
System.out.println();
} else if (step instanceof ModelOutputStep outputStep) {
for (Content contentBlock : outputStep.content().orElse(Collections.emptyList())) {
if (contentBlock instanceof TextContent textContent) {
System.out.println("Answer:");
System.out.println(textContent.text().orElse(""));
System.out.println();
}
}
}
}
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput("Provide a list of 3 famous physicists and their key contributions"),
GenerationConfig: &interactions.GenerationConfig{
ThinkingLevel: interactions.ThinkingLevelLow.ToPointer(),
},
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": "What is the sum of the first 50 prime numbers?",
"generation_config": {
"thinking_summaries": "auto"
}
}'
در این موارد، یک بلوک فکر ممکن است فقط حاوی امضا بدون خلاصه باشد:
- درخواستهای سادهای که مدل برای تولید خلاصه بهاندازه کافی استدلال نکرده است
thinking_summaries: "none"، که در آن خلاصهها صریحاً غیرفعال شدهاند- برخیاز انواع محتوای فکری، مثل تصاویر، ممکن است خلاصه نوشتاری نداشته باشند
کد شما باید همیشه بلوکهای فکری را در جایی که summary خالی یا وجود ندارد مدیریت کند.
جاریسازی با اندیشیدن
از جاریسازی برای دریافت خلاصههای فزاینده افکار درطول تولید استفاده کنید. بلوکهای فکر بااستفاده از «رویدادهای ارسالی سرور» (SSE) با دو نوع دلتا متمایز ارائه میشوند:
| نوع دلتا | شامل میشود | زمان ارسال |
|---|---|---|
thought_summary |
محتوای خلاصه نوشتاری یا تصویری | یک یا چند دلتا با خلاصه افزایشی |
thought_signature |
امضای رمزنگارانه | آخرین تغییر قبلاز step.stop |
Python
from google import genai
client = genai.Client()
prompt = """
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
Alice does not live in the red house.
Bob does not live in the green house.
Carol does not live in the red or green house.
Which house does each person live in?
"""
thoughts = ""
answer = ""
stream = client.interactions.create(
model="gemini-3.8-flash",
input=prompt,
generation_config={
"thinking_summaries": "auto"
},
stream=True
)
for event in stream:
if event.event_type == "step.delta":
if event.delta.type == "thought_summary":
if not thoughts:
print("Thinking...")
summary_text = event.delta.content.text
print(f"[Thought] {summary_text}", end="")
thoughts += summary_text
elif event.delta.type == "text" and event.delta.text:
if not answer:
print("\nAnswer:")
print(event.delta.text, end="")
answer += event.delta.text
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const prompt = `Alice, Bob, and Carol each live in a different house on the same
street: red, green, and blue. Alice does not live in the red house.
Bob does not live in the green house.
Carol does not live in the red or green house.
Which house does each person live in?`;
let thoughts = "";
let answer = "";
const stream = await client.interactions.create({
model: "gemini-3.8-flash",
input: prompt,
generation_config: {
thinking_summaries: "auto"
},
stream: true
});
for await (const event of stream) {
if (event.event_type === "step.delta") {
if (event.delta.type === "thought_summary") {
if (!thoughts) console.log("Thinking...");
const text = event.delta.content?.text || "";
process.stdout.write(`[Thought] ${text}`);
thoughts += text;
} else if (event.delta.type === "text" && event.delta.text) {
if (!answer) console.log("\nAnswer:");
process.stdout.write(event.delta.text);
answer += event.delta.text;
}
}
}
جاوا
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.GenerationConfig;
import com.google.genai.gaos.models.interactions.InteractionSSEEvent;
import com.google.genai.gaos.models.interactions.InteractionSSEStreamEvent;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.StepDelta;
import com.google.genai.gaos.models.interactions.StepDeltaData;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.TextDelta;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.interactions.ThoughtSummaryDelta;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.CreateInteractionResponse;
import com.google.genai.gaos.utils.EventStream;
Client client = new Client();
String prompt =
"Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.\n"
+ "Alice does not live in the red house.\n"
+ "Bob does not live in the green house.\n"
+ "Carol does not live in the red or green house.\n"
+ "Which house does each person live in?";
StringBuilder thoughts = new StringBuilder();
StringBuilder answer = new StringBuilder();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.of(prompt))
.generationConfig(
GenerationConfig.builder().thinkingSummaries(ThinkingSummaries.AUTO).build())
.stream(true)
.build();
CreateInteractionResponse response =
client.interactions.create(CreateInteractionRequestBody.of(params));
try (EventStream<InteractionSSEStreamEvent> stream = response.events()) {
for (InteractionSSEStreamEvent streamEvent : stream) {
InteractionSSEEvent event = streamEvent.data().orElse(null);
if (event instanceof StepDelta stepDelta) {
StepDeltaData delta = stepDelta.delta().orElse(null);
if (delta instanceof ThoughtSummaryDelta thoughtDelta) {
Content content = thoughtDelta.content().orElse(null);
if (content instanceof TextContent textContent) {
if (thoughts.length() == 0) {
System.out.println("Thinking...");
}
String summaryText = textContent.text().orElse("");
System.out.print("[Thought] " + summaryText);
thoughts.append(summaryText);
}
} else if (delta instanceof TextDelta textDelta) {
String text = textDelta.text().orElse("");
if (!text.isEmpty()) {
if (answer.length() == 0) {
System.out.println("\nAnswer:");
}
System.out.print(text);
answer.append(text);
}
}
}
}
}
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput("What is the sum of the first 50 prime numbers?"),
GenerationConfig: &interactions.GenerationConfig{
ThinkingLevel: interactions.ThinkingLevelHigh.ToPointer(),
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
},
}),
})
if err != nil {
log.Fatal(err)
}
for _, step := range res.Interaction.Steps {
if thought := step.ThoughtStep; thought != nil {
for _, part := range thought.Summary {
if part.TextContent != nil {
fmt.Printf("Thought summary:\n%s\n\n", part.TextContent.Text)
}
}
}
}
if res.Interaction.OutputText != nil {
fmt.Printf("Answer:\n%s\n", *res.Interaction.OutputText)
}
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{
"model": "gemini-3.8-flash",
"input": "Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue. Alice does not live in the red house. Bob does not live in the green house. Carol does not live in the red or green house. Which house does each person live in?",
"generation_config": {
"thinking_summaries": "auto"
},
"stream": true
}'
پاسخ جاریسازی از «رویدادهای ارسالی سرور» (SSE) استفاده میکند و از مراحل و رویدادها تشکیل شده است، برای مثال:
event: interaction.created
data: {"interaction":{"id":"v1_xxx","status":"in_progress","object":"interaction","model":"gemini-3.8-flash"},"event_type":"interaction.created"}
event: step.start
data: {"index":0,"step":{"signature":"","summary":[{"text":"**Evaluating the clues**\n\nI'm considering...","type":"text"}],"type":"thought"},"event_type":"step.start"}
event: step.delta
data: {"index":0,"delta":{"signature":"EpoGCpcGAXLI2nx/...","type":"thought_signature"},"event_type":"step.delta"}
event: step.stop
data: {"index":0,"event_type":"step.stop"}
event: step.start
data: {"index":1,"step":{"content":[{"text":"Based on the clues provided, here","type":"text"}],"type":"model_output"},"event_type":"step.start"}
event: step.delta
data: {"index":1,"delta":{"text":" is the answer to your question...","type":"text"},"event_type":"step.delta"}
event: step.stop
data: {"index":1,"event_type":"step.stop"}
event: interaction.completed
data: {"interaction":{"id":"v1_xxx","status":"completed","usage":{"total_tokens":530,"total_input_tokens":62,"total_output_tokens":171,"total_thought_tokens":297}},"event_type":"interaction.completed"}
event: done
data: [DONE]
کنترل کردن اندیشیدن
مدلهای Gemini بهطور پیشفرض درگیر تفکر پویا میشوند و بهطور خودکار
میزان تلاش استدلالی را براساس پیچیدگی درخواست تنظیم میکنند. بااستفاده از پارامتر thinking_level میتوانید این رفتار را کنترل کنید.
| مدل | اندیشیدن پیشفرض | سطوح پشتیبانیشده |
|---|---|---|
| gemini-4-argon | روشن (متوسط) | کم، متوسط، زیاد |
| gemini-3.8-flash | روشن (متوسط) | کم، متوسط، زیاد |
| gemini-3.6-flash | روشن (متوسط) | حداقل، کم، متوسط، زیاد |
| gemini-3.5-flash-lite | روشن (کمینه) | حداقل، کم، متوسط، زیاد |
| gemini-3.1-pro-preview | روشن (زیاد) | کم، متوسط، زیاد |
| gemini-3.1-flash-lite-image | روشن (کمینه) | کمینه، زیاد |
| gemini-3-flash-preview | روشن (زیاد) | حداقل، کم، متوسط، زیاد |
| gemini-3-pro-preview | روشن (زیاد) | کم، زیاد |
| gemini-2.5-pro | روشن | کم، متوسط، زیاد |
| gemini-2.5-flash | روشن | کم، متوسط، زیاد |
| gemini-2.5-flash-lite | خاموش | کم، متوسط، زیاد |
| gemini-robotics-er-2-preview | روشن (زیاد) | حداقل، کم، متوسط، زیاد |
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.8-flash",
input="Provide a list of 3 famous physicists and their key contributions",
generation_config={
"thinking_level": "low"
}
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: "Provide a list of 3 famous physicists and their key contributions",
generation_config: {
thinking_level: "low"
}
});
console.log(interaction.output_text);
جاوا
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.GenerationConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.ThinkingLevel;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(
InteractionsInput.of(
"Provide a list of 3 famous physicists and their key contributions"))
.generationConfig(GenerationConfig.builder().thinkingLevel(ThinkingLevel.LOW).build())
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(interaction.outputText().orElse(""));
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-pro"),
Input: interactions.NewInteractionsInput("What is the sum of the first 50 prime numbers?"),
GenerationConfig: &interactions.GenerationConfig{
ThinkingLevel: interactions.ThinkingLevelHigh.ToPointer(),
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
},
Stream: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
stream := res.InteractionSSEStreamEvent
defer stream.Close()
for stream.Next() {
event := stream.Value()
if stepDelta := event.GetDataStepDelta(); stepDelta != nil {
if thoughtDelta := stepDelta.GetDeltaThoughtSummary(); thoughtDelta != nil {
if textContent := thoughtDelta.GetContentText(); textContent != nil {
fmt.Printf("[Thought Summary] %s\n", textContent.Text)
}
}
if textDelta := stepDelta.GetDeltaText(); textDelta != nil {
fmt.Print(textDelta.GetText())
}
}
}
if err := stream.Err(); err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": "Provide a list of 3 famous physicists and their key contributions",
"generation_config": {
"thinking_level": "low"
}
}'
محدودیتهای کد و max_output_tokens
پارامتر تولید max_output_tokens حداکثر تعداد نشانههایی را که یک پاسخ میتواند تولید کند، ازجمله نشانههای فکری، تعیین میکند.
وقتی این پارامتر تنظیم شود، بهعنوان یک حد نهایی سختگیرانه توسط زیرساخت اعمال میشود
بدون اینکه نحوه تخصیص بودجه تفکر توسط مدل را تغییر دهد
(thinking_level).
اگر مدل درحین استدلال به این حد مجاز برسد، تولید را با وضعیت
"incomplete" متوقف میکند و برونداد کوتاه یا خالی برمیگرداند (درحالیکه همچنان هزینه
هر نشانه فکری تولیدشده را محاسبه میکند). برای کاهش هزینه یا تأخیر بدون کوتاه کردن پاسخها، بهجای تنظیم max_output_tokens کوچک، thinking_level (low یا medium) را کاهش دهید.
برای مدلهای Gemini 4 (gemini-4-argon)، محدودیتهای بافت و برونداد زیر را درنظر داشته باشید:
- پنجره بافت ۱ میلیون دادهواحدی مشترک: دادهواحدهای ورودی، تفکر، و خروجی یک پنجره بافت ۱ میلیون دادهواحدی مشترک (
1,048,576دادهواحد) دارند. اگر دادهواحدهای ورودی شما بهعلاوهmax_output_tokensاز ۱٬۰۴۸٬۵۷۶ دادهواحد فراتر رود، «میانای برنامهسازی کاربردی» بهطور خودکار حد خروجی را به فضای باقیمانده در پنجره زمینهای (1,048,576منهای دادهواحدهای ورودی شما) محدود میکند. - سقف برونداد همزمان پیشفرض (۶۴ هزار): وقتی
background=False(برای درخواستهای جاریسازی و غیرجاریسازی)، سقف پیشفرض و حداکثرmax_output_tokens65,536کد است. تنظیمmax_output_tokens > 65536باbackground=Falseخطای400برمیگرداند. - رمزگشایی طولانی (تا ۱ میلیون دادهواحد): برای اینکه Gemini 4 بتواند فراتر از
65,536دادهواحد (تا1,048,576دادهواحد) استدلال و تولید کند،background=Trueرا تنظیم کنید وmax_output_tokensرا بزرگتر از65,536پیکربندی کنید. برای جزئیات، رمزگشایی طولانی را ببینید.
امضاهای فکری
امضاهای فکری نمایشی رمزگذاریشده از استدلال داخلی مدل است. این مدلها باید پیوستگی استدلال را در تعاملات چندنوبتی حفظ کنند.
«میانای برنامهسازی کاربردی تعاملها» مدیریت امضاهای فکری را بسیار سادهتر از generateContent API میکند.
حالت Stateful (توصیه میشود)
بهطور پیشفرض، وقتی از Interactions API در حالت باحفظ وضعیت استفاده میکنید (با تنظیم store: true و ارسال previous_interaction_id در نوبتهای بعدی)، سرور بهطور خودکار وضعیت مکالمه را مدیریت میکند، ازجمله همه بلوکهای فکری و امضاها. در این حالت، لازم نیست کاری درخصوص امضاها انجام دهید. این درخواستها کاملاً در سمت سرور رسیدگی میشوند.
حالت عدم حفظ سابقه
اگر خودتان وضعیت مکالمه را مدیریت میکنید (حالت بدون وضعیت) و سابقه کامل ورودیها و خروجیها را در هر درخواست ارسال میکنید:
- باید همیشه همه بلوکهای
thoughtرا دقیقاً همانطور که از مدل دریافت شدهاند باز ارسال کنید. - نباید بلوکهای فکری را از سابقه حذف یا اصلاح کنید، زیرا آنها حاوی امضاهای لازم برای ادامه استدلال مدل هستند.
- هنگام تغییر مدلها در یک جلسه، همچنان باید بلوکهای فکری مدل قبلی را دوباره ارسال کنید. سازگاری را زیرینه مدیریت میکند.
قیمتگذاری
وقتی اندیشیدن روشن باشد، قیمت پاسخ مجموع دادهواحدهای برونداد و دادهواحدهای اندیشیدن است. میتوانید تعداد کل دادهواحدهای اندیشیدن تولیدشده را از فیلد total_thought_tokens دریافت کنید.
Python
print("Thoughts tokens:", interaction.usage.total_thought_tokens)
print("Output tokens:", interaction.usage.total_output_tokens)
JavaScript
console.log(`Thoughts tokens: ${interaction.usage.total_thought_tokens}`);
console.log(`Output tokens: ${interaction.usage.total_output_tokens}`);
جاوا
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.Usage;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.of("Explain the concept of Occam's Razor."))
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
if (interaction.usage().isPresent()) {
Usage usage = interaction.usage().get();
System.out.println("Thoughts tokens: " + usage.totalThoughtTokens().orElse(0));
System.out.println("Output tokens: " + usage.totalOutputTokens().orElse(0));
}
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
// Turn 1: Execute a reasoning + tool use interaction
turn1, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-pro"),
Input: interactions.NewInteractionsInput("Compare the GDP growth of Japan and Germany in 2025."),
Tools: []interactions.Tool{
interactions.NewTool(interactions.GoogleSearch{}),
},
GenerationConfig: &interactions.GenerationConfig{
ThinkingLevel: interactions.ThinkingLevelHigh.ToPointer(),
},
}),
})
if err != nil {
log.Fatal(err)
}
// Turn 2: Pass PreviousInteractionID so thought signatures are automatically preserved
turn2, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-pro"),
PreviousInteractionID: turn1.Interaction.ID,
Input: interactions.NewInteractionsInput("Now summarize that comparison in a 3-row markdown table."),
}),
})
if err != nil {
log.Fatal(err)
}
if turn2.Interaction.OutputText != nil {
fmt.Println(*turn2.Interaction.OutputText)
}
}
مدلهای اندیشگر برای بهبود کیفیت پاسخ نهایی، فکرهای کامل تولید میکنند و سپس خلاصههایی را برای ارائه بینش درباره فرایند فکر کردن برونداد میکنند. قیمتگذاری براساس تعداد کامل نشانههای فکری است که مدل برای تولید نیاز دارد، حتی اگر فقط خلاصه از API برونداد شود.
در راهنمای شمارش نشان میتوانید درباره نشانها بیشتر بدانید.
روالهای مطلوب
با دنبال کردن این دستورالعملها، از مدلهای اندیشگر بهطور کارآمد استفاده کنید.
- مرور استدلال: خلاصههای فکری را تجزیهوتحلیل کنید تا شکستها را درک کنید و پیاموارهها را بهبود بخشید.
- کنترل بودجه تفکر: از مدل بخواهید برای خروجیهای طولانی کمتر فکر کند تا در مصرف نشانهها صرفهجویی شود.
- وظایف ساده: برای بازیابی یا طبقهبندی حقایق از حداقل یا سطح پایین تفکر استفاده کنید (برای نمونه، «DeepMind در کجا تأسیس شد؟»).
- تکالیف متوسط: از تفکر پیشفرض برای مقایسه مفاهیم یا استدلال خلاقانه استفاده کنید (مثلاً مقایسه خودروهای برقی و هیبریدی).
- تکالیف پیچیده: از حداکثر اندیشیدن برای کدنویسی پیشرفته، ریاضی، یا برنامهریزی چندمرحلهای استفاده کنید (مثلاً حل مسائل ریاضی AIME).
قدم بعدی چیست
- تولید نوشتار: پاسخهای نوشتاری پایه
- فراخوانی تابع: اتصال به ابزارها
- راهنمای Gemini 4: تازههای Gemini 4
- راهنمای Gemini 3: ویژگیهای مختص مدل