Mit Gemini können integrierte Tools wie google_search und Funktionsaufrufe (auch als benutzerdefinierte Tools bezeichnet) in einer einzigen Interaktion kombiniert werden, indem der Kontextverlauf von Tool-Aufrufen beibehalten und verfügbar gemacht wird. Mit integrierten und benutzerdefinierten Toolkombinationen lassen sich komplexe, agentenbasierte Workflows erstellen. Das Modell kann sich beispielsweise auf Echtzeit-Webdaten stützen, bevor es Ihre spezifische Geschäftslogik aufruft.
Hier ist ein Beispiel, in dem integrierte und benutzerdefinierte Toolkombinationen mit google_search und einer benutzerdefinierten Funktion getWeather aktiviert werden:
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"]
}
}
]
}'
Funktionsweise
Gemini 3-Modelle verwenden Tool-Kontextzirkulation, um integrierte und benutzerdefinierte Tool-Kombinationen zu ermöglichen. Durch die Weitergabe des Tool-Kontexts kann der Kontext integrierter Tools beibehalten und verfügbar gemacht werden. Außerdem kann er mit benutzerdefinierten Tools in derselben Interaktion geteilt werden.
Tool-Kombination aktivieren
- Fügen Sie
function_declarationszusammen mit den integrierten Tools, die Sie verwenden möchten, hinzu, um das Kombinationsverhalten auszulösen.
API gibt Schritte zurück
In einer Interaktionsantwort gibt die API separate Schritte für Aufrufe von integrierten Tools und Funktionsaufrufe (benutzerdefinierte Tools) zurück:
- Integrierte Tool-Schritte: Diese werden von der API automatisch verwaltet, sodass der Kontext über mehrere Turns hinweg erhalten bleibt.
- Schritte für Funktionsaufrufe: Die API gibt
function_callSchritte für Ihre benutzerdefinierten Funktionen zurück. Sie führen die Funktion aus und geben das Ergebnis zurück.
Kritische Felder in zurückgegebenen Schritten
Bestimmte Felder in den zurückgegebenen Schritten sind entscheidend, um den Tool-Kontext beizubehalten und Tool-Kombinationen zu ermöglichen:
id: In den Schrittenfunction_callundfunction_response. Eine eindeutige Kennung, die einen Aufruf seiner Antwort zuordnet.signature: Inthought-Schritten sowie in allen Tool-Aufruf- (z.B.function_call) und Ergebnisschritten (z.B.function_response) für Gemini 3+-Modelle. Dieser verschlüsselte Kontext ermöglicht die Weitergabe des Tool-Kontexts über Interaktionen hinweg.
Felder verwalten:
- Statusbehafteter Modus (empfohlen): Wenn Sie
previous_interaction_idverwenden, verarbeitet der Server automatisch die Felderidundsignature. - Zustandsloser Modus: Wenn Sie den Unterhaltungsverlauf manuell verwalten, müssen Sie dafür sorgen, dass Sie sowohl das Feld
idals auch das Feldsignaturein nachfolgenden Anfragen an das Modell übergeben, um die Authentizität zu bestätigen und den Kontext beizubehalten. Die offiziellen SDKs übernehmen dies automatisch, wenn Sie das vollständige Antwortobjekt an den Verlauf zurückgeben.
Tool-spezifische Daten
Einige integrierte Tools geben nutzersichtbare Datenargumente zurück, die für den jeweiligen Tooltyp spezifisch sind.
| Tool | Für Nutzer sichtbare Toolaufrufargumente (falls vorhanden) | Für Nutzer sichtbare Tool-Antwort (falls vorhanden) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsURLs, die durchsucht werden sollen |
status: Browse statusretrieved_url: URLs browsed |
| file_search | – | – |
Tokens und Preise
Hinweis: Integrierte Tool-Aufruf-Teile in Anfragen werden auf prompt_token_count angerechnet. Da diese Zwischenschritte des Tools jetzt sichtbar sind und an Sie zurückgegeben werden, sind sie Teil des Unterhaltungsverlaufs. Das ist nur bei Anfragen der Fall, nicht bei Antworten.
Das Tool „Google Suche“ ist eine Ausnahme von dieser Regel. In der Google Suche wird bereits ein eigenes Preismodell auf Abfrageebene angewendet. Daher werden Tokens nicht doppelt berechnet (siehe Seite Preise).
Weitere Informationen finden Sie auf der Seite Tokens.
Beschränkungen
- Standardmäßig wird der Modus
validatedverwendet (der Modusautowird nicht unterstützt), wenn die Weitergabe des Tool-Kontexts aktiviert ist. - Integrierte Tools wie
google_searchsind auf Informationen zum Standort und zur aktuellen Uhrzeit angewiesen. Wenn Ihrsystem_instructionoderfunction_declaration.descriptionwidersprüchliche Standort- und Zeitinformationen enthält, funktioniert die Funktion für die Kombination von Tools möglicherweise nicht richtig.
Unterstützte Tools
Die standardmäßige Weitergabe des Tool-Kontexts gilt für serverseitige (integrierte) Tools. Die Codeausführung ist ebenfalls ein serverseitiges Tool, hat aber eine eigene integrierte Lösung für die Kontextweitergabe. Die Tool-Nutzung und Funktionsaufrufe sind clientseitige Tools und bieten auch integrierte Lösungen für die Kontextweitergabe.
| Tool | Ausführungsseite | Unterstützung für die Kontextübertragung |
|---|---|---|
| Google Suche | Serverseitig | Unterstützt |
| Google Maps | Serverseitig | Unterstützt |
| URL-Kontext | Serverseitig | Unterstützt |
| Dateisuche | Serverseitig | Unterstützt |
| Codeausführung | Serverseitig | Unterstützt (integriert, verwendet die Schritte code_execution und code_execution_result) |
| Computer Use | Clientseitig | Unterstützt (integriert, verwendet die Schritte function_call und function_response) |
| Benutzerdefinierte Funktionen | Clientseitig | Unterstützt (integriert, verwendet die Schritte function_call und function_response) |
Nächste Schritte
- Weitere Informationen zu Funktionsaufrufen in der Gemini API
- Unterstützte Tools: