Gemini позволяет сочетать встроенные инструменты, такие как google_search, и вызов функций (также известный как персонализированные инструменты) в рамках одного взаимодействия, сохраняя и предоставляя историю вызовов инструментов. Встроенные и пользовательские комбинации инструментов позволяют создавать сложные рабочие процессы, в которых, например, модель может получать актуальные данные из интернета, прежде чем вызывать определенную бизнес-логику.
Вот пример, в котором сочетаются встроенные и специальные инструменты с использованием разметки google_search и специальной функции getWeather:
Python
# This will only work for SDK newer than 2.0.0
from google import genai
client = genai.Client()
getWeather = {
"type": "function",
"name": "getWeather",
"description": "Gets the weather for a requested city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state, e.g. Utqiaġvik, Alaska",
},
},
"required": ["city"],
},
}
# The Interactions API manages context automatically across tool calls.
# The model will first use Google Search, then call getWeather.
interaction = client.interactions.create(
model="gemini-3.8-flash",
input="What is the northernmost city in the United States? What's the weather like there today?",
tools=[
{"type": "google_search"},
getWeather,
],
)
# Process steps: the interaction contains search results and a function call
for step in interaction.steps:
if step.type == "function_call":
print(f"Function call: {step.name} with args: {step.arguments}")
# In a real application, you would execute the function here
# and provide the result back to the model.
JavaScript
// This will only work for SDK newer than 2.0.0
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const getWeather = {
type: "function",
name: "getWeather",
description: "Get the weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA"
}
},
required: ["location"]
}
};
// The Interactions API manages context automatically across tool calls.
// The model will first use Google Search, then call getWeather.
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: "What is the northernmost city in the United States? What's the weather like there today?",
tools: [
{ type: "google_search" },
getWeather,
],
});
// Process steps: the interaction contains search results and a function call
for (const step of interaction.steps) {
if (step.type === "function_call") {
console.log(`Function call: ${step.name} with args: ${JSON.stringify(step.arguments)}`);
// In a real application, you would execute the function here
// and provide the result back to the model.
}
}
Java
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.GoogleSearch;
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;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
Client client = new Client();
Map<String, Object> parameters = new HashMap<>();
parameters.put("type", "object");
Function customFunc =
Function.builder()
.name("get_user_location")
.description("Retrieves user current location.")
.parameters(parameters)
.build();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.of("What is the weather like where I am right now?"))
.tools(Arrays.asList(customFunc, new GoogleSearch()))
.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)
}
customFunc := interactions.NewTool(interactions.Function{
Name: genai.Ptr("get_user_location"),
Description: genai.Ptr("Retrieves user current location."),
Parameters: map[string]any{
"type": "object",
},
})
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput("What is the weather like where I am right now?"),
Tools: []interactions.Tool{
customFunc,
interactions.NewTool(interactions.GoogleSearch{}),
},
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
REST
# Specifies the API revision to avoid breaking changes when they become default
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"model": "gemini-3.8-flash",
"input": "What is the northernmost city in the United States? What'\''s the weather like there today?",
"tools": [
{ "type": "google_search" },
{
"type": "function",
"name": "getWeather",
"description": "Get the weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
]
}'
Принцип работы
Модели Gemini 3 используют циркуляцию контекста инструментов, чтобы поддерживать комбинации встроенных и пользовательских инструментов. Передача контекста позволяет сохранять и предоставлять контекст встроенных инструментов, а также делиться им со специальными инструментами в рамках одного взаимодействия.
Включить комбинацию инструментов
- Чтобы активировать комбинированное поведение, включите
function_declarationsвместе со встроенными инструментами, которые вы хотите использовать.
Возврат товаров через API
В ответе на взаимодействие API возвращает отдельные шаги для вызовов встроенных инструментов и функций (пользовательских инструментов):
- Шаги встроенных инструментов. API управляет ими автоматически, сохраняя контекст между шагами.
- Шаги вызова функции. API возвращает
function_callшагов для ваших пользовательских функций. Вы выполняете функцию и возвращаете результат.
Ключевые поля в возвращаемых шагах
Некоторые поля в возвращаемых шагах имеют решающее значение для поддержания контекста инструмента и включения комбинаций инструментов:
id: обнаружено на шагахfunction_callиfunction_response. Уникальный идентификатор, который сопоставляет вызов с ответом.signature: встречается на шагахthought, а также на всех шагах вызова инструмента (например,function_call) и результата (например,function_response) для моделей Gemini 3 и более новых. Зашифрованный контекст позволяет передавать контекст инструмента между взаимодействиями.
Управление этими полями
- Режим с сохранением состояния (рекомендуется). При использовании
previous_interaction_idсервер автоматически обрабатывает поляidиsignature. - Режим без сохранения состояния. При управлении историей разговоров вручную необходимо передавать в модель поля
idиsignatureв последующих запросах, чтобы подтвердить подлинность и сохранить контекст. Официальные SDK обрабатывают это автоматически, если вы передаете полный объект ответа в историю.
Данные, относящиеся к определенному инструменту
Некоторые встроенные инструменты возвращают видимые пользователю аргументы данных, относящиеся к определенному типу инструмента.
| Инструмент | Аргументы вызова инструмента, видимые пользователю (если есть) | Ответ инструмента, видимый пользователю (если есть) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsURL, которые будут просмотрены |
status: статус сканированияretrieved_url: количество просканированных URL |
| file_search | Нет | Нет |
Токены и цены
Обратите внимание, что части вызовов встроенных инструментов в запросах учитываются в prompt_token_count. Поскольку промежуточные шаги теперь видны и возвращаются вам, они являются частью истории чата. Это относится только к запросам, но не к ответам.
Исключение составляет инструмент Google Поиска. В Google Поиске уже применяется собственная модель ценообразования на уровне запроса, поэтому токены не оплачиваются дважды (см. страницу Цены).
Подробнее о токенах…
Ограничения
- Если включена передача контекста инструмента, по умолчанию используется режим
validated(режимautoне поддерживается). - Встроенные инструменты, такие как
google_search, используют данные о местоположении и текущем времени. Если вsystem_instructionилиfunction_declaration.descriptionуказаны несовпадающие сведения о местоположении и времени, функция комбинирования инструментов может работать некорректно.
Поддерживаемые инструменты
Стандартная циркуляция контекста инструмента применяется к серверным (встроенным) инструментам. Выполнение кода – это также инструмент на стороне сервера, но у него есть собственное встроенное решение для передачи контекста. Использование компьютера и вызов функций – это клиентские инструменты, в которых также есть встроенные решения для циркуляции контекста.
| Инструмент | Сторона исполнения | Поддержка передачи контекста |
|---|---|---|
| Google Поиск | Сторона сервера | Поддерживается |
| Google Карты | Сторона сервера | Поддерживается |
| URL-контекст | Сторона сервера | Поддерживается |
| Поиск файлов | Сторона сервера | Поддерживается |
| Выполнение кода | Сторона сервера | Поддерживается (встроенная, использует шаги code_execution и code_execution_result) |
| Использование компьютера | Сторона клиента | Поддерживается (встроенная, использует шаги function_call и function_response) |
| Пользовательские функции | Сторона клиента | Поддерживается (встроенная, использует шаги function_call и function_response) |
Дальнейшие действия
- Подробнее о вызове функций в Gemini API…
- Поддерживаемые инструменты: