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

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

نماذج 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، واستدعاء الدوال العادي، بما في ذلك استخدام الأدوات المجمّعة، واستخدام الكمبيوتر.

نماذج أخرى

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