ما الجديد في Gemini 3.5 Flash؟

أحدث طراز طُرز أخرى

‫Gemini 3.5 Flash (gemini-3.5-flash) هو نموذج Flash من الجيل السابق تم إيقافه نهائيًا ضمن سلسلة Gemini 3. يتم تلقائيًا توجيه الطلبات إلى gemini-3.5-flash إلى Gemini 3.6 Flash. للاطّلاع على أحدث إصدار من Flash، يُرجى الانتقال إلى Gemini 3.8 Flash.

يتم الاحتفاظ بهذا الدليل كمرجع سابق، وهو يوضّح التغييرات الأساسية في واجهة برمجة التطبيقات Gemini 3.x واقتراحات المَعلمات.

النظرة العامة على الطراز

الطراز رقم تعريف الطراز الحالة
Gemini 3.5 Flash gemini-3.5-flash تمّت إزالة هذا العمود (يتم توجيه الطلبات تلقائيًا إلى gemini-3.6-flash).

كان نموذج Gemini 3.5 Flash يتيح قدرة استيعاب تصل إلى مليون رمز مميّز، و65 ألف رمز مميّز كحد أقصى للناتج، بالإضافة إلى إمكانات "المفكِّر" ومجموعة الأدوات وميزات المنصة نفسها المتوفّرة في Gemini 3 Flash، بما في ذلك استخدام الكمبيوتر (إصدار تجريبي).

للاطّلاع على المواصفات الكاملة، يُرجى الرجوع إلى نظرة عامة على الطُرز.

البدء السريع

تستخدِم جميع الأمثلة الواردة في هذا الدليل Interactions API. تتوفّر أيضًا واجهة برمجة التطبيقات GenerateContent، وتنطبق عليها خيارات الإعداد والاقتراحات نفسها.

Python

from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3.5-flash",
    input="Explain how parallel agentic execution works in three sentences."
)
print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const interaction = await client.interactions.create({
    model: "gemini-3.5-flash",
    input: "Explain how parallel agentic execution works in three sentences.",
  });
  console.log(interaction.output_text);
}

main();

جافا

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.5-flash"))
        .input(
            InteractionsInput.of(
                "Explain how parallel agentic execution works in three sentences."))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

Go

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.5-flash"),
            Input: interactions.NewInteractionsInput("Explain how parallel agentic execution works in three sentences."),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

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.5-flash",
    "input": "Explain how parallel agentic execution works in three sentences."
  }'

الميزات الجديدة

  • الأداء المستمر: تم تحسينه لتنفيذ مهام الترميز والمهام المستندة إلى الذكاء الاصطناعي الوكيل على نطاق واسع.
  • التنفيذ المستند إلى الوكلاء: نشر الوكلاء الفرعيين وحلّ المشاكل وإنشاء حلقات مستندة إلى الوكلاء بسرعة وعلى نطاق واسع
  • الترميز: دورات الترميز التكرارية والاستكشاف السريع وإنشاء النماذج الأولية لاختبار المسارات البديلة واستكشاف الحلول بشكل ديناميكي
  • الأفق البعيد: مهام العمل المتعددة الخطوات واستخدام الأدوات على نطاق واسع
  • الاحتفاظ بالأفكار: يحتفظ النموذج تلقائيًا بالاستدلال الوسيط في المحادثات المترابطة. لا يلزم إجراء أي تغييرات على واجهة برمجة التطبيقات.
  • مستوى الجهد التلقائي الجديد: تم تغيير مستوى الجهد التلقائي للتفكير من high إلى medium. راجِع مستوى الجهد التلقائي الجديد لمعرفة التفاصيل.
  • تحسين قدرات low: تم تحسين low بشكل كبير للرموز البرمجية والمهام التي تتطلّب خطوات أقل، ما يوفّر جودة عالية مع وقت استجابة وتكلفة أقل.

اختيار نموذج Flash المناسب

بما أنّ gemini-3.5-flash سيتم إيقافه نهائيًا وسيتم توجيهه تلقائيًا إلى gemini-3.6-flash، ننصحك بنقل بياناتك إلى أحد النماذج النشطة التالية:

  • ‫Gemini 3.8 Flash: أحدث نماذج Flash وأكثرها ذكاءً، وهو مصمَّم لعمليات الترميز المعقّدة وسير العمل المستند إلى الذكاء الاصطناعي المستقلّ. راجِع دليل Gemini 3.8 Flash.
  • Gemini 3.6 Flash: بديل مباشر لنموذج gemini-3.5-flash مع انخفاض في استخدام الرموز المميزة وانخفاض في سعر الناتج. اطّلِع على دليل Gemini 3.6 Flash و3.5 Flash-Lite.
  • ‫Gemini 3.5 Flash-Lite / Gemini 3.1 Flash-Lite: للمهام المنخفضة التكلفة والتي تتطلّب معالجة كميات كبيرة من البيانات ولا تتطلّب إمكانات الاستنتاج الكاملة في Flash، استخدِم Gemini 3.5 Flash-Lite أو Gemini 3.1 Flash-Lite.

التغييرات السلوكية

مستوى الجهد التلقائي الجديد: medium

أصبح مستوى التفكير التلقائي الآن medium، بعد أن كان high في الإصدار التجريبي من Gemini 3 Flash. يحقّق نموذج medium نتائج جيدة جدًا في مجموعة كبيرة من المهام، كما أنّه أسرع وأكثر فعالية من حيث التكلفة. بالنسبة إلى المشاكل المعقّدة، يشجّع high النموذج على التفكير بشكل أعمق.

مستوى الجهد حالات الاستخدام
minimal تم تحسينه لزيادة سرعة الاستجابة. حالات الاستخدام الشبيهة بالمحادثة، والإجابات السريعة المستندة إلى الحقائق، وعمليات استدعاء الأدوات الأبسط
low الرموز البرمجية والمهام التي تتطلب استجابة أسرع وعددًا أقل من الخطوات وتناسب أيضًا مهام التحليل والكتابة التي تتطلب بعض التفكير.
medium (تلقائية) أفضل جودة لمعظم المهام: يُنصح به في حالات الاستخدام المعقّدة للرموز البرمجية والوكلاء.
high تزيد هذه الميزة من قدرة النموذج على التفكير واستخدام الأدوات. الخيار الأفضل للاستدلال المعقّد والرياضيات الصعبة ومهام الرموز البرمجية أو الوكلاء الأكثر صعوبة تتيح هذه السمة التفكير الموسّع واستخدام الدوال.

لتجاوز الإعداد التلقائي، اضبط thinking_level في ملف الإعداد:

Python

from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3.5-flash",
    input="Prove that the square root of 2 is irrational.",
    generation_config={"thinking_level": "high"},
)
print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const interaction = await client.interactions.create({
    model: "gemini-3.5-flash",
    input: "Prove that the square root of 2 is irrational.",
    generationConfig: { thinkingLevel: "high" },
  });
  console.log(interaction.output_text);
}

main();

جافا

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.5-flash"))
        .input(InteractionsInput.of("Prove that the square root of 2 is irrational."))
        .generationConfig(GenerationConfig.builder().thinkingLevel(ThinkingLevel.HIGH).build())
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

Go

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.5-flash"),
            Input: interactions.NewInteractionsInput("Prove that the square root of 2 is irrational."),
            GenerationConfig: &interactions.GenerationConfig{
                ThinkingLevel: interactions.ThinkingLevelHigh.ToPointer(),
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

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.5-flash",
    "input": "Prove that the square root of 2 is irrational.",
    "generation_config": {"thinking_level": "high"}
  }'

يوضّح الجدول التالي مستويات التفكير المتوافقة مع كل نموذج:

مستوى التفكير Gemini 3.5 Flash Gemini 3.1 Pro Gemini 3.1 Flash-Lite Gemini 3 Flash الوصف
minimal متاح غير متاح متاح (تلقائي) متاح يتطابق مع إعداد "بدون تفكير" لمعظم طلبات البحث. يُرجى العِلم أنّ minimal لا يضمن إيقاف التفكير، فقد يقدّم النموذج أسبابًا بسيطة جدًا للمهام المعقّدة.
low متاح متاح متاح متاح تقليل زمن الاستجابة والتكلفة
medium متاح (تلقائي) متاح متاح متاح التفكير المتوازن لمعظم المهام
high متوافق (ديناميكي) متوافق (تلقائي، ديناميكي) متوافق (ديناميكي) متوافق (تلقائي، ديناميكي) زيادة عمق الاستدلال إلى أقصى حد

الاحتفاظ بالأفكار

يحتفظ النموذج بالاستدلال الوسيط خلال المحادثات المترابطة تلقائيًا. عند توفّر سياق الاستدلال في سجلّ المحادثات، يتم الاحتفاظ به، ما يؤدي إلى تحسين الأداء في المهام المعقّدة المتعدّدة الخطوات، مثل تصحيح الأخطاء بشكل متكرّر وإعادة تصميم الرموز البرمجية. لا يلزم إجراء أي تغييرات على واجهة برمجة التطبيقات:

  • Interactions API: يتم تلقائيًا الاحتفاظ بالأفكار. لم يطرأ أي تغيير على السلوك.
  • ‫GenerateContent API: بدءًا من Gemini 3.5 Flash، يستخدم النموذج سياق الاستدلال من جميع الجوانب السابقة عندما تكون توقيعات الأفكار متوفّرة في سجلّ المحادثات. لتفعيل هذه الميزة، يجب تمرير سجلّ المحادثات الكامل غير المعدَّل (بما في ذلك توقيعات الأفكار) في contents. وتتعامل حِزم تطوير البرامج (SDK) مع ذلك تلقائيًا.

آخر الأخبار حول المَعلمات وأفضل الممارسات في الإصدار 3.x من Gemini

تنطبق ما يلي على جميع نماذج Gemini 3.x، بما في ذلك Gemini 3.5 Flash.

  • temperature وtop_p وtop_k: ننصح بشدة بعدم تغيير القيم التلقائية. تم تحسين إمكانات الاستدلال في Gemini 3 لتناسب الإعدادات التلقائية.
  • استخدِم thinking_level بدلاً من thinking_budget.
  • مطابقة استجابة استدعاء الدالة: يجب أن تتطابق id وname وعدد الاستجابات مع الاستدعاءات السابقة.
  • ردود الدوال المتعددة الوسائط: يجب أن تتضمّن محتوًى متعدد الوسائط داخل ردّ الدالة، وليس خارجه.
  • التعليمات المضمّنة في ردود الدوال: يجب إلحاقها بنص رد الدالة، وليس كأجزاء منفصلة.
  • تقليل عدد طلبات استخدام الأدوات غير الضرورية: استخدِم مستويات تفكير أقل أو جرِّب تعليمات النظام لتقليل عدد طلبات استخدام الأدوات في سير العمل الذي يتطلّب وكيلًا.

راجِع الأقسام أدناه لمعرفة كيفية تعديل الرمز.

مَعلَمات اختيار العيّنات (لم يعُد يُنصح بها)

لم يعُد يُنصح باستخدام temperature وtop_p وtop_k مع جميع نماذج Gemini 3.x. تم تحسين قدرات Gemini 3 الاستنتاجية لتتوافق مع الإعدادات التلقائية. إزالة هذه المَعلمات من جميع الطلبات

# ⚠️ Remove these parameters (not recommended)
generation_config = {
    "temperature": 0.7,
    "top_p": 0.9,
    "top_k": 40,
}

لضمان الحتمية، ننصحك بتحديد تعليمات نظام تتضمّن قواعد واضحة لحالة الاستخدام المحدّدة.

thinking_budget (لم يعُد هذا الخيار مُقترَحًا)

لم يعُد يُنصح باستخدام المَعلمة الرقمية الأولية thinking_budget في جميع نماذج Gemini 3.x. استخدِم تعداد السلسلة thinking_level بدلاً من ذلك.

# ⚠️ Before (not recommended)
generation_config = {
    "thinking": {"thinking_budget": 7500},
}

# ✅ After
generation_config = {
    "thinking": {"thinking_level": "medium"},
}

القيم المتاحة: minimal وlow وmedium (القيمة التلقائية) وhigh

استدعاء الدالة: مطابقة الردود بدقة

تُبلغ Interactions API عن أخطاء في حال عدم تطابق ردود الدوال. لا تعرض واجهة برمجة التطبيقات GenerateContent API خطأً حتى الآن، ولكن تؤدي الردود غير المتطابقة إلى أن يعرض النموذج ردودًا فارغة مع finish_reason: STOP في معظم الحالات. يجب دائمًا اتّباع هذه القواعد:

المتطلبات التفاصيل
تضمين id يجب أن يتضمّن كل FunctionResponse id من FunctionCall المقابل
المباراة name يجب أن يتطابق name في الردّ مع name في الطلب
عدد حالات التطابق إرجاع FunctionResponse واحد بالضبط مقابل كل FunctionCall تم استلامه

Python

# ✅ Include matching call_id and name in the function_result
final_interaction = client.interactions.create(
    model="gemini-3.5-flash",
    previous_interaction_id=interaction.id,
    tools=[my_tool],
    input=[{
        "type": "function_result",
        "name": fc_step.name,
        "call_id": fc_step.id,
        "result": [{"type": "text", "text": json.dumps(result)}],
    }],
)

JavaScript

// ✅ Include matching call_id and name in the function_result
const finalInteraction = await client.interactions.create({
  model: "gemini-3.5-flash",
  previousInteractionId: interaction.id,
  tools: [myTool],
  input: [{
    type: "function_result",
    name: fcStep.name,
    call_id: fcStep.id,
    result: [{ type: "text", text: JSON.stringify(result) }],
  }],
});

جافا

import java.util.Arrays;
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Function;
import com.google.genai.gaos.models.interactions.FunctionResultStep;
import com.google.genai.gaos.models.interactions.FunctionResultStepResultUnion;
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.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.List;

Client client = new Client();

// Assumes interactionId, callId, functionName, myTool, and resultJson from previous step
String interactionId = "interaction-id-123";
String callId = "call-id-123";
String functionName = "get_weather";
Function myTool = Function.builder().name(functionName).build();
String resultJson = "{\"temperature\": \"72F\"}";

// ✅ Include matching callId and name in the FunctionResultStep
FunctionResultStep functionResult =
    FunctionResultStep.builder()
        .name(functionName)
        .callId(callId)
        .result(
            FunctionResultStepResultUnion.of(
                Arrays.asList(TextContent.builder().text(resultJson).build())))
        .build();

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.5-flash"))
        .previousInteractionId(interactionId)
        .tools(Arrays.asList(myTool))
        .input(InteractionsInput.ofStep(Arrays.asList(functionResult)))
        .build();

Interaction finalInteraction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

Go

package main

import (
    "context"
    "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)
    }

    // Assumes interactionID, callID, functionName, myTool, and resultJSON from previous step
    interactionID := "interaction-id-123"
    callID := "call-id-123"
    functionName := "get_weather"
    myTool := interactions.NewTool(interactions.Function{Name: genai.Ptr(functionName)})
    resultJSON := `{"temperature": "72F"}`

    // ✅ Include matching CallID and Name in the FunctionResultStep
    functionResult := interactions.NewStep(interactions.FunctionResultStep{
        Name:   genai.Ptr(functionName),
        CallID: callID,
        Result: interactions.NewFunctionResultStepResultUnion([]interactions.FunctionResultSubcontent{
            interactions.NewFunctionResultSubcontent(interactions.TextContent{Text: resultJSON}),
        }),
    })

    finalRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model:                 interactions.Model("gemini-3.5-flash"),
            PreviousInteractionID: genai.Ptr(interactionID),
            Tools:                 []interactions.Tool{myTool},
            Input:                 interactions.NewInteractionsInput([]interactions.Step{functionResult}),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    _ = finalRes
}

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.5-flash",
    "previous_interaction_id": "<INTERACTION_ID>",
    "tools": [...],
    "input": [{
      "type": "function_result",
      "name": "my_function",
      "call_id": "<CALL_ID>",
      "result": [{"type": "text", "text": "..."}]
    }]
  }'

ردود الوظائف المتعددة الوسائط

نلاحظ غالبًا أنّ العملاء يقدّمون صورًا خارج استجابة الدالة. وقد يؤدي ذلك إلى سلوك غير متوقّع للنموذج (مثل تسريب الأفكار) وإلى انخفاض جودة النتائج. اتّبِع الاقتراح الوارد في مستندات واجهة برمجة التطبيقات الخاصة بالردود المتعدّدة الوسائط بدلاً من ذلك، وأدرِج المحتوى المتعدّد الوسائط في أجزاء ردود الدوال التي ترسلها إلى النموذج. يمكن للنموذج معالجة هذا المحتوى المتعدد الوسائط في دوره التالي لتقديم ردّ أكثر دقة.

Python

# ✅ Include multimodal content in the function response
final_interaction = client.interactions.create(
    model="gemini-3.5-flash",
    previous_interaction_id=interaction.id,
    input=[
        {
            "type": "function_result",
            "name": tool_call.name,
            "call_id": tool_call.id,
            "result": [
                {"type": "text", "text": "instrument.jpg"},
                {
                    "type": "image",
                    "mime_type": "image/jpeg",
                    "data": base64_image_data,
                },
            ],
        }
    ],
)

JavaScript

// ✅ Include multimodal content in the function response
const finalInteraction = await client.interactions.create({
  model: "gemini-3.5-flash",
  previousInteractionId: interaction.id,
  input: [{
    type: "function_result",
    name: toolCall.name,
    call_id: toolCall.id,
    result: [
      { type: "text", text: "instrument.jpg" },
      {
        type: "image",
        mime_type: "image/jpeg",
        data: base64ImageData,
      },
    ],
  }],
});

جافا

import java.util.Arrays;
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.FunctionResultStep;
import com.google.genai.gaos.models.interactions.FunctionResultStepResultUnion;
import com.google.genai.gaos.models.interactions.ImageContent;
import com.google.genai.gaos.models.interactions.ImageContentMimeType;
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.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.List;

Client client = new Client();

// Assumes interactionId, callId, functionName, and base64ImageData from previous step
String interactionId = "interaction-id-123";
String callId = "call-id-123";
String functionName = "get_instrument_image";
String base64ImageData = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=";

// ✅ Include multimodal content in the function response
FunctionResultStep functionResult =
    FunctionResultStep.builder()
        .name(functionName)
        .callId(callId)
        .result(
            FunctionResultStepResultUnion.of(
                Arrays.asList(
                    TextContent.builder().text("instrument.jpg").build(),
                    ImageContent.builder()
                        .mimeType(ImageContentMimeType.IMAGE_JPEG)
                        .data(base64ImageData)
                        .build())))
        .build();

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.5-flash"))
        .previousInteractionId(interactionId)
        .input(InteractionsInput.ofStep(Arrays.asList(functionResult)))
        .build();

Interaction finalInteraction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

Go

package main

import (
    "context"
    "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)
    }

    // Assumes interactionID, callID, functionName, and base64ImageData from previous step
    interactionID := "interaction-id-123"
    callID := "call-id-123"
    functionName := "get_instrument_image"
    base64ImageData := "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="

    // ✅ Include multimodal content in the function response
    functionResult := interactions.NewStep(interactions.FunctionResultStep{
        Name:   genai.Ptr(functionName),
        CallID: callID,
        Result: interactions.NewFunctionResultStepResultUnion([]interactions.FunctionResultSubcontent{
            interactions.NewFunctionResultSubcontent(interactions.TextContent{
                Text: "instrument.jpg",
            }),
            interactions.NewFunctionResultSubcontent(interactions.ImageContent{
                MimeType: interactions.ImageContentMimeType("image/jpeg").ToPointer(),
                Data:     genai.Ptr(base64ImageData),
            }),
        }),
    })

    finalRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model:                 interactions.Model("gemini-3.5-flash"),
            PreviousInteractionID: genai.Ptr(interactionID),
            Input:                 interactions.NewInteractionsInput([]interactions.Step{functionResult}),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    _ = finalRes
}

التعليمات المضمّنة في ردود الدوال

نرى غالبًا أنّ العملاء يقدّمون تعليمات إضافية مع ردود الدوال كـ Parts لاحقة. ويمكن أن يؤدي ذلك إلى سلوك غير متوقّع للنموذج (مثل تسريب الأفكار) وينتج عنه مخرجات أقل جودة. بدلاً من ذلك، أضِف أي تعليمات إضافية إلى نهاية نص رد الدالة مع الفصل بينها بسطرين جديدين.

Python

# ✅ Append inline instructions to the end of the function response separated by two newlines
result_text = f"{json.dumps(result)}\n\n<your inline instructions>"

final_interaction = client.interactions.create(
    model="gemini-3.5-flash",
    previous_interaction_id=interaction.id,
    tools=[my_tool],
    input=[{
        "type": "function_result",
        "name": fc_step.name,
        "call_id": fc_step.id,
        "result": [{"type": "text", "text": result_text}],
    }],
)

JavaScript

// ✅ Append inline instructions to the end of the function response separated by two newlines
const resultText = `${JSON.stringify(result)}\n\n<your inline instructions>`;

const finalInteraction = await client.interactions.create({
  model: "gemini-3.5-flash",
  previousInteractionId: interaction.id,
  tools: [myTool],
  input: [{
    type: "function_result",
    name: fcStep.name,
    call_id: fcStep.id,
    result: [{ type: "text", text: resultText }],
  }],
});

جافا

import java.util.Arrays;
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Function;
import com.google.genai.gaos.models.interactions.FunctionResultStep;
import com.google.genai.gaos.models.interactions.FunctionResultStepResultUnion;
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.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.List;

Client client = new Client();

// Assumes interactionId, callId, functionName, myTool, and resultJson from previous step
String interactionId = "interaction-id-123";
String callId = "call-id-123";
String functionName = "get_weather";
Function myTool = Function.builder().name(functionName).build();
String resultJson = "{\"temperature\": \"72F\"}";

// ✅ Append inline instructions to the end of the function response separated by two newlines
String resultText = resultJson + "\n\n<your inline instructions>";

FunctionResultStep functionResult =
    FunctionResultStep.builder()
        .name(functionName)
        .callId(callId)
        .result(
            FunctionResultStepResultUnion.of(
                Arrays.asList(TextContent.builder().text(resultText).build())))
        .build();

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.5-flash"))
        .previousInteractionId(interactionId)
        .tools(Arrays.asList(myTool))
        .input(InteractionsInput.ofStep(Arrays.asList(functionResult)))
        .build();

Interaction finalInteraction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

Go

package main

import (
    "context"
    "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)
    }

    // Assumes interactionID, callID, functionName, myTool, and resultJSON from previous step
    interactionID := "interaction-id-123"
    callID := "call-id-123"
    functionName := "get_weather"
    myTool := interactions.NewTool(interactions.Function{Name: genai.Ptr(functionName)})
    resultJSON := `{"temperature": "72F"}`

    // ✅ Append inline instructions to the end of the function response separated by two newlines
    resultText := resultJSON + "\n\n<your inline instructions>"

    functionResult := interactions.NewStep(interactions.FunctionResultStep{
        Name:   genai.Ptr(functionName),
        CallID: callID,
        Result: interactions.NewFunctionResultStepResultUnion([]interactions.FunctionResultSubcontent{
            interactions.NewFunctionResultSubcontent(interactions.TextContent{Text: resultText}),
        }),
    })

    finalRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model:                 interactions.Model("gemini-3.5-flash"),
            PreviousInteractionID: genai.Ptr(interactionID),
            Tools:                 []interactions.Tool{myTool},
            Input:                 interactions.NewInteractionsInput([]interactions.Step{functionResult}),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    _ = finalRes
}

تقليل عدد استدعاءات الأدوات غير الضرورية

إذا لاحظت كثرة استخدام ميزة "استدعاء الأدوات"، هناك أسلوبان يساعدان في تقليلها:

  1. ابدأ بتقليل مستوى التفكير (medium أو low أو minimal): تشجّع مستويات التفكير الأعلى النموذج على استخدام المزيد من الأدوات للاستكشاف والتحقّق، لذا يمكن أن يؤدي خفض المستوى إلى تقليل عدد طلبات استخدام الأدوات.

  2. إضافة تعليمات للنظام: إذا استمر الاستخدام المفرط بعد تعديل مستوى التفكير، يمكنك استخدام طلب يقيّد استخدام الأدوات. على سبيل المثال:

    You have a limited action budget of <n> tool calls. Use them efficiently.
    

ميزات Gemini 3 للعائلة

يستفيد Gemini 3.5 Flash من جميع إمكانات مجموعة Gemini 3، بما في ذلك ميزة "استخدام الكمبيوتر". الميزات التي تم طرحها في Gemini 3 والتي سيتم نقلها إلى الإصدارات الأحدث:

  • التفكير: يتم الحفاظ على سياق الاستدلال المشفّر في جميع طلبات البيانات من واجهة برمجة التطبيقات. تلقائي في واجهة برمجة التطبيقات Interactions ، وضمني في GenerateContent
  • النتائج المنظَّمة باستخدام الأدوات: يمكنك الجمع بين وضع JSON والأدوات المضمّنة (البحث، وسياق عناوين URL، وتطبيق الرموز البرمجية، واستدعاء الدالة).
  • ردود الوظائف المتعدّدة الوسائط: عرض الصور والصوت والوسائط الأخرى في نتائج طلبات الوظائف
  • تنفيذ الرموز البرمجية باستخدام الصور: تنفيذ رموز برمجية تعالج الصور وتنشئها
  • استخدام الأدوات معًا: يمكنك استخدام الأدوات المضمّنة واستدعاء الدوال المخصّصة في الطلب نفسه.
  • دقة الوسائط: تحكّم دقيق في عملية تخصيص الرموز المميزة للمدخلات من الصور والفيديوهات وملفات PDF تتيح نماذج Gemini 3 إعدادات الدقة لكل عنصر من المحتوى (low وmedium وhigh وultra_high) للطلبات التي تتضمّن دقة مختلطة.
  • توقيعات الأفكار: تمثيلات مشفّرة لعمليات الاستدلال الداخلية التي يجريها النموذج مطلوب لإجراء محادثات مترابطة في وضع عدم الاحتفاظ بالحالة، وتتم إدارته تلقائيًا من خلال Interactions API وحِزم تطوير البرامج الرسمية.

أفضل الممارسات المتعلقة بإنشاء الطلبات

نماذج Gemini 3.x هي نماذج استدلال، ما يغيّر طريقة تقديم الطلبات.

  • تعليمات دقيقة: يجب أن تكون التعليمات موجزة. يقدّم Gemini 3.x أفضل ردّ عند تلقّي تعليمات مباشرة وواضحة. قد تؤدي أساليب هندسة الطلبات المطوّلة أو المعقّدة المصمّمة للنماذج القديمة إلى الإفراط في التحليل.
  • الإسهاب في النتائج: يكون مستوى التفصيل في Gemini 3 و3.1 أقل بشكل تلقائي، حيث يفضّل تقديم إجابات مباشرة وفعّالة. إذا كانت حالة الاستخدام تتطلّب أسلوبًا حواريًا، وجِّه النموذج بشكل صريح في طلبك (على سبيل المثال، "اشرح هذا الموضوع بأسلوب مساعد ودود ومُتحدّث").
  • إدارة السياق: عند العمل على مجموعات بيانات كبيرة (مثل كتب كاملة أو قواعد رموز أو فيديوهات طويلة)، ضَع تعليماتك أو أسئلتك المحدّدة في نهاية الطلب، بعد سياق البيانات. يمكنك تعزيز قدرة النموذج على الاستنتاج من خلال بدء سؤالك بعبارة مثل "استنادًا إلى المعلومات السابقة...".

يمكنك الاطّلاع على مزيد من المعلومات حول استراتيجيات تصميم الطلبات في دليل هندسة الطلبات.

القيود

  • لا تتوفّر ميزة تقسيم الصور في الإصدار 3.x من Gemini. بالنسبة إلى أحمال العمل الخاصة بتقسيم الصور، واصِل استخدام Gemini 2.5 Flash مع إيقاف ميزة "المفكِّر".

الأسئلة الشائعة

  1. ما هو تاريخ آخر تحديث للبيانات في Gemini 3.5 Flash؟ يبلغ تاريخ آخر تحديث لبيانات Gemini 3.5 Flash يناير 2025. للحصول على معلومات أحدث، استخدِم أداة الاستناد إلى مصادر.

  2. ما هي الحدود القصوى لقدرة الاستيعاب؟ يستوعب Gemini 3.5 Flash مليون رمز مميّز كحد أقصى في قدرة استيعاب السياق، ويمكنه إنشاء ما يصل إلى 65 ألف رمز مميّز.

  3. هل سيظلّ رمز thinking_budget القديم صالحًا؟ نعم، لا يزال thinking_budget متاحًا للتوافق مع الأنظمة القديمة، ولكن ننصحك بالانتقال إلى thinking_level لتحقيق أداء أكثر قابلية للتوقّع. يُرجى عدم استخدام كليهما في الطلب نفسه.

  4. هل يتوافق Gemini 3.5 Flash مع واجهة Batch API؟ نعم. راجِع دليل Batch API للحصول على التفاصيل.

  5. هل تتوفّر ميزة "التخزين المؤقت للسياق"؟ نعم، تتوفّر ميزة التخزين المؤقت للسياق.

  6. ما هي الأدوات المتوافقة؟ يتوافق Gemini 3.5 Flash مع بحث Google واستخدام "خرائط Google" كمصدر والبحث عن الملفات وتطبيق الرموز البرمجية وسياق عناوين URL واستدعاء الدالة العادي، بما في ذلك استخدام الأدوات المدمجة واستخدام الكمبيوتر.

نماذج أخرى

الخطوات التالية