Что нового в 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.

Это руководство сохранено для исторической справки и содержит информацию об изменениях в базовом API Gemini 3.x и рекомендации по параметрам.

Обзор модели

Модель Идентификатор модели Статус
Gemini 3.5 Flash gemini-3.5-flash Поддержка прекращена (автоматически перенаправляется на gemini-3.6-flash).

Gemini 3.5 Flash поддерживала окно контекста на 1 млн токенов, максимальное количество выходных токенов – 65 000, функцию "Думает" и тот же набор инструментов и функций платформы, что и Gemini 3 Flash, включая использование компьютера (предварительная версия).

Полные характеристики приведены в обзоре моделей.

Краткое руководство

Во всех примерах в этом руководстве используется Interactions API. Также поддерживается 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();

Java

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(""));

Проложить маршрут

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."
  }'

Что нового

  • Стабильная производительность. Оптимизировано для выполнения задач по написанию кода с помощью агентов в большом масштабе.
  • Агентное выполнение. Развертывание дочерних агентов, решение проблем и быстрые агентные циклы в масштабе.
  • Программирование. Итеративные циклы программирования, быстрое исследование и прототипирование для тестирования альтернативных путей и динамического поиска решений.
  • Долгосрочное планирование. Многоэтапные рабочие процессы и масштабное использование инструментов.
  • Сохранение промежуточных рассуждений. Модель автоматически сохраняет промежуточные рассуждения в многоходовых диалогах. Изменения в API не требуются.
  • Новый уровень рассуждений по умолчанию. Уровень рассуждений по умолчанию изменен с 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. Для недорогих и объемных задач, не требующих глубокого анализа, используйте Gemini 3.5 Flash-Lite или Gemini 3.1 Flash-Lite.

Изменения в поведении

Новый уровень усилий по умолчанию: medium

Уровень рассуждений по умолчанию теперь medium (в Gemini 3 Flash Preview был high). 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();

Java

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(""));

Проложить маршрут

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 Поддерживается (динамический) Поддерживается (по умолчанию, динамический) Поддерживается (динамический) Поддерживается (по умолчанию, динамический) Максимальная глубина рассуждений.

Сохранение цепочки рассуждений

Модель автоматически сохраняет промежуточные рассуждения в многоэтапных разговорах. Если в истории чата есть контекст рассуждений, он сохраняется, что повышает эффективность выполнения сложных многоэтапных задач, таких как итеративная отладка и рефакторинг кода. Изменения в API не требуются:

  • Interactions API. Мысли сохраняются автоматически. Поведение не изменится.
  • GenerateContent API. Начиная с Gemini 3.5 Flash, модель использует контекст рассуждений из всех предыдущих шагов, если в истории чата есть сигнатуры мыслей. Для этого передайте полную, неизмененную историю чата (включая подписи мыслей) в contents. SDK обрабатывают это автоматически.

Изменения параметров и рекомендации в Gemini 3.x

Ниже приведены сведения, которые относятся ко всем моделям 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) }],
  }],
});

Java

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();

Проложить маршрут

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": "..."}]
    }]
  }'

Мультимодальные ответы функций

Часто клиенты предоставляют изображения вне ответа функции. Это может привести к неожиданному поведению модели (например, утечке мыслей) и снижению качества результатов. Следуйте рекомендациям в документации по API Multimodal Function Responses и включайте мультимодальный контент в части ответа функции, которые вы отправляете модели. Модель может обработать этот мультимодальный контент на следующем шаге, чтобы дать более обоснованный ответ.

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,
      },
    ],
  }],
});

Java

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();

Проложить маршрут

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 }],
  }],
});

Java

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();

Проложить маршрут

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 Family

Gemini 3.5 Flash унаследовала все возможности моделей Gemini 3, в том числе функцию "Использование компьютера". Функции, которые были представлены в Gemini 3 и сохранены в Gemini 3.5:

Рекомендации по составлению запросов

Модели Gemini 3.x – это модели рассуждения, поэтому запросы к ним нужно составлять иначе.

  • Точные инструкции. Будьте кратки. Gemini 3.x лучше всего реагирует на прямые и понятные инструкции. Сложные техники создания запросов, разработанные для более старых моделей, могут привести к тому, что модель будет анализировать слишком много информации.
  • Многословность. По умолчанию Gemini 3 и 3.1 менее многословны и предпочитают давать прямые и лаконичные ответы. Если вам нужен разговорный тон, явно укажите это в запросе (например, "Объясни это как дружелюбный, разговорчивый помощник").
  • Управление контекстом. При работе с большими наборами данных (например, целыми книгами, базами кода или длинными видео) размещайте конкретные инструкции или вопросы в конце запроса, после контекста данных. Направляйте рассуждения модели, начиная вопрос с фразы "На основе приведенной выше информации…".

Подробнее о стратегиях создания запросов…

Ограничения

  • Сегментация изображений не поддерживается в Gemini 3.x. Для сегментации продолжайте использовать Gemini 2.5 Flash с отключенным режимом Thinking.

Часто задаваемые вопросы

  1. Какова дата окончания периода обучения Gemini 3.5 Flash? Данные Gemini 3.5 Flash актуальны на январь 2025 года. Чтобы получить более актуальную информацию, используйте инструмент Обоснование в Поиске.

  2. Каковы ограничения на размер окна контекста? Gemini 3.5 Flash поддерживает окно контекста на 1 миллион входных токенов и до 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-контекст и стандартный вызов функций, в том числе комбинированное использование инструментов и использование компьютера.

Другие модели

Дальнейшие действия