Gemini umożliwia łączenie wbudowanych narzędzi, takich jak google_search, i wywoływanie funkcji (znanych też jako narzędzia niestandardowe) w ramach jednej interakcji przez zachowywanie i udostępnianie historii kontekstu wywołań narzędzi. Wbudowane i niestandardowe kombinacje narzędzi umożliwiają tworzenie złożonych przepływów pracy opartych na agentach, w których np. model może opierać się na danych internetowych w czasie rzeczywistym przed wywołaniem konkretnej logiki biznesowej.
Oto przykład, który umożliwia kombinacje wbudowanych i niestandardowych narzędzi z użyciem google_search i niestandardowej funkcji 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(""));
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)
}
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"]
}
}
]
}'
Jak to działa
Modele Gemini 3 korzystają z obiegu kontekstu narzędzia, aby umożliwić wbudowane i niestandardowe kombinacje narzędzi. Obieg kontekstu narzędzia umożliwia zachowanie i udostępnianie kontekstu wbudowanych narzędzi oraz udostępnianie go narzędziom niestandardowym w ramach tej samej interakcji.
Włączanie kombinacji narzędzi
- Aby wywołać zachowanie kombinacji, dodaj
function_declarationswraz z wbudowanymi narzędziami, których chcesz użyć.
Instrukcje dotyczące zwrotów w przypadku interfejsu API
W odpowiedzi na interakcję interfejs API zwraca osobne kroki dla wywołań wbudowanych narzędzi i wywołań funkcji (narzędzi niestandardowych):
- Wbudowane kroki narzędzia: interfejs API zarządza nimi automatycznie, zachowując kontekst między kolejnymi turami.
- Kroki wywołania funkcji: interfejs API zwraca
function_callkroków dla Twoich funkcji niestandardowych. Wykonujesz funkcję i zwracasz wynik.
Krytyczne pola w zwróconych krokach
Niektóre pola w zwracanych krokach mają kluczowe znaczenie dla zachowania kontekstu narzędzia i umożliwienia łączenia narzędzi:
id: znajdziesz je w krokachfunction_callifunction_response. Unikalny identyfikator, który mapuje wywołanie na odpowiedź.signature: występuje w krokachthought, a także we wszystkich krokach wywołania narzędzia (np.function_call) i wyniku (np.function_response) w przypadku modeli Gemini 3+. Ten zaszyfrowany kontekst umożliwia przekazywanie kontekstu narzędzia między interakcjami.
Zarządzanie tymi polami:
- Tryb stanowy (zalecany): gdy używasz
previous_interaction_id, serwer automatycznie obsługuje polaidisignature. - Tryb bezstanowy: jeśli zarządzasz historią rozmów ręcznie, musisz w kolejnych żądaniach przekazywać do modelu pola
idisignature, aby potwierdzić autentyczność i zachować kontekst. Oficjalne pakiety SDK obsługują to automatycznie, jeśli przekazujesz pełny obiekt odpowiedzi z powrotem do historii.
Dane dotyczące konkretnego narzędzia
Niektóre wbudowane narzędzia zwracają argumenty danych widoczne dla użytkownika, które są specyficzne dla typu narzędzia.
| Narzędzie | Argumenty wywołania narzędzia widoczne dla użytkownika (jeśli występują) | Odpowiedź narzędzia widoczna dla użytkownika (jeśli występuje) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsAdresy URL do przeglądania |
status: Stan przeglądaniaretrieved_url: Przeglądane adresy URL |
| file_search | Brak | Brak |
Tokeny i ceny
Pamiętaj, że wbudowane części wywołania narzędzia w żądaniach są wliczane do limitu prompt_token_count. Ponieważ te pośrednie kroki narzędzia są teraz widoczne i zwracane, stanowią część historii rozmowy. Dotyczy to tylko żądań, a nie odpowiedzi.
Wyjątkiem od tej reguły jest narzędzie wyszukiwarki Google. Wyszukiwarka Google stosuje już własny model cenowy na poziomie zapytania, więc tokeny nie są naliczane podwójnie (więcej informacji znajdziesz na stronie Ceny).
Więcej informacji znajdziesz na stronie Tokeny.
Ograniczenia
- Domyślnie włączaj tryb
validated(trybautonie jest obsługiwany), gdy włączone jest przekazywanie kontekstu narzędzia. - Wbudowane narzędzia, takie jak
google_search, korzystają z informacji o lokalizacji i bieżącym czasie, więc jeślisystem_instructionlubfunction_declaration.descriptionmają sprzeczne informacje o lokalizacji i czasie, funkcja łączenia narzędzi może nie działać prawidłowo.
Obsługiwane narzędzia
W przypadku narzędzi po stronie serwera (wbudowanych) obowiązuje standardowe przekazywanie kontekstu narzędzia. Wykonywanie kodu to również narzędzie po stronie serwera, ale ma własne wbudowane rozwiązanie do przekazywania kontekstu. Korzystanie z komputera i wywoływanie funkcji to narzędzia po stronie klienta, które mają też wbudowane rozwiązania do przekazywania kontekstu.
| Narzędzie | Strona wykonania | Obsługa przekazywania kontekstu |
|---|---|---|
| Wyszukiwarka Google | Po stronie serwera | Obsługiwane |
| Mapy Google | Po stronie serwera | Obsługiwane |
| Kontekst adresu URL | Po stronie serwera | Obsługiwane |
| Wyszukiwanie plików | Po stronie serwera | Obsługiwane |
| Wykonywanie kodu | Po stronie serwera | Obsługiwane (wbudowane, korzysta z działań code_execution i code_execution_result) |
| Korzystanie z komputera | Po stronie klienta | Obsługiwane (wbudowane, korzysta z działań function_call i function_response) |
| Funkcje niestandardowe | Po stronie klienta | Obsługiwane (wbudowane, korzysta z działań function_call i function_response) |
Co dalej?
- Dowiedz się więcej o wywoływaniu funkcji w Gemini API.
- Poznaj obsługiwane narzędzia: