Gemini consente la combinazione di strumenti integrati, come google_search, e chiamate di funzione (note anche come strumenti personalizzati) in una singola interazione conservando ed esponendo la cronologia del contesto delle chiamate di strumenti. Le combinazioni di strumenti integrati e personalizzati consentono
workflow complessi e basati su agenti in cui, ad esempio, il modello può basarsi
su dati web in tempo reale prima di richiamare la logica di business specifica.
Ecco un esempio che consente combinazioni di strumenti integrati e personalizzati con
google_search e una funzione personalizzata 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"]
}
}
]
}'
Come funziona
I modelli Gemini 3 utilizzano la circolazione del contesto degli strumenti per consentire combinazioni di strumenti integrati e personalizzati. La circolazione del contesto degli strumenti consente di preservare ed esporre il contesto degli strumenti integrati e condividerlo con gli strumenti personalizzati nella stessa interazione.
Abilitare la combinazione di strumenti
- Includi
function_declarations, insieme agli strumenti integrati che vuoi utilizzare, per attivare il comportamento di combinazione.
Passaggi per i resi API
In una risposta all'interazione, l'API restituisce passaggi separati per le chiamate allo strumento integrato e le chiamate di funzione (strumento personalizzato):
- Passaggi dello strumento integrato: l'API li gestisce automaticamente, preservando il contesto tra i turni.
- Passaggi di chiamata della funzione: l'API restituisce
function_callpassaggi per le tue funzioni personalizzate. Esegui la funzione e fornisci il risultato.
Campi critici nei passaggi restituiti
Alcuni campi nei passaggi restituiti sono fondamentali per mantenere il contesto dello strumento e consentire le combinazioni di strumenti:
id: trovato nei passaggifunction_callefunction_response. Un identificatore univoco che associa una chiamata alla relativa risposta.signature: presente nei passaggithought, nonché in tutti i passaggi di chiamata dello strumento (ad es.function_call) e dei risultati (ad es.function_response) per i modelli Gemini 3+. Questo contesto criptato consente la circolazione del contesto dello strumento tra le interazioni.
Gestione di questi campi:
- Modalità stateful (consigliata): quando utilizzi
previous_interaction_id, il server gestisce automaticamente i campiidesignature. - Modalità stateless: quando gestisci manualmente la cronologia delle conversazioni, devi assicurarti di trasmettere al modello sia il campo
idsia il camposignaturenelle richieste successive per convalidare l'autenticità e mantenere il contesto. Gli SDK ufficiali gestiscono questa operazione automaticamente se passi l'oggetto di risposta completo alla cronologia.
Dati specifici dello strumento
Alcuni strumenti integrati restituiscono argomenti di dati visibili all'utente specifici per il tipo di strumento.
| Strumento | Argomenti della chiamata allo strumento visibili all'utente (se presenti) | Risposta dello strumento visibile all'utente (se presente) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsURL da visitare |
status: Stato della navigazioneretrieved_url: URL navigati |
| file_search | Nessuno | Nessuno |
Token e prezzi
Tieni presente che le parti di chiamata di strumenti integrate nelle richieste vengono conteggiate ai fini di
prompt_token_count. Poiché questi passaggi intermedi dello strumento sono ora visibili e
ti vengono restituiti, fanno parte della cronologia della conversazione. Questo vale solo per le richieste, non per le risposte.
Lo strumento Ricerca Google è un'eccezione a questa regola. La Ricerca Google applica già il proprio modello di prezzi a livello di query, pertanto i token non vengono addebitati due volte (consulta la pagina Prezzi).
Per saperne di più, consulta la pagina Token.
Limitazioni
- Imposta la modalità
validated(la modalitàautonon è supportata) quando è abilitata la circolazione del contesto dello strumento. - Gli strumenti integrati come
google_searchsi basano sulla posizione e sull'ora corrente, quindi sesystem_instructionofunction_declaration.descriptionhanno informazioni su posizione e ora in conflitto, la funzionalità di combinazione degli strumenti potrebbe non funzionare correttamente.
Strumenti supportati
La circolazione del contesto degli strumenti standard si applica agli strumenti lato server (integrati). Code Execution è anche uno strumento lato server, ma ha una propria soluzione integrata per la circolazione del contesto. L'utilizzo del computer e la chiamata di funzioni sono strumenti lato client e dispongono anche di soluzioni integrate per la circolazione del contesto.
| Strumento | Lato di esecuzione | Supporto per la circolazione del contesto |
|---|---|---|
| la Ricerca Google | Lato server | Supportato |
| Google Maps | Lato server | Supportato |
| Contesto URL | Lato server | Supportato |
| Ricerca file | Lato server | Supportato |
| Esecuzione di codice | Lato server | Supportato (integrato, utilizza i passaggi code_execution e code_execution_result) |
| Utilizzo del computer | Lato client | Supportato (integrato, utilizza i passaggi function_call e function_response) |
| Funzioni personalizzate | Lato client | Supportato (integrato, utilizza i passaggi function_call e function_response) |
Passaggi successivi
- Scopri di più sulla chiamata di funzione nell'API Gemini.
- Esplora gli strumenti supportati: