Combinar ferramentas integradas e chamada de função

O Gemini permite a combinação de ferramentas integradas, como google_search, e a chamada de função (também conhecida como ferramentas personalizadas) em uma única interação, preservando e expondo o histórico de contexto das chamadas de ferramenta. As combinações de ferramentas integradas e personalizadas permitem fluxos de trabalho complexos e de agentes em que, por exemplo, o modelo pode se basear em dados da Web em tempo real antes de chamar sua lógica de negócios específica.

Confira um exemplo que permite combinações de ferramentas integradas e personalizadas com google_search e uma função personalizada getWeather:

Python

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-flash-preview",
    input="What is the northernmost city in the United States? What's the weather like there today?",
    tools=[
        {"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

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-flash-preview",
    input: "What is the northernmost city in the United States? What's the weather like there today?",
    tools: [
        { googleSearch: {} },
        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.
    }
}

REST

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-flash-preview",
  "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"]
      }
    }
  ]
}'

Como funciona

Os modelos do Gemini 3 usam a circulação de contexto de ferramentas para permitir combinações de ferramentas integradas e personalizadas. A circulação de contexto de ferramentas permite preservar e expor o contexto de ferramentas integradas e compartilhá-lo com ferramentas personalizadas na mesma interação.

Ativar a combinação de ferramentas

  • Inclua os function_declarations, junto com as ferramentas integradas que você quer usar, para acionar o comportamento de combinação.

Etapas retornadas pela API

Em uma resposta de interação, a API retorna etapas separadas para chamadas de ferramentas integradas e chamadas de função (ferramenta personalizada):

  • Etapas de ferramentas integradas: a API gerencia essas etapas automaticamente, preservando o contexto em todas as rodadas.
  • Etapas de chamada de função: a API retorna etapas function_call para suas funções personalizadas. Você executa a função e fornece o resultado.

Campos críticos nas etapas retornadas

Alguns campos nas etapas retornadas são essenciais para manter o contexto da ferramenta e permitir combinações de ferramentas:

  • id: encontrado nas etapas function_call e function_response. Um identificador exclusivo que mapeia uma chamada para a resposta.
  • signature: encontrado nas etapas thought, bem como em todas as etapas de chamada de ferramenta (por exemplo, function_call) e resultado (por exemplo, function_response) para modelos do Gemini 3 e mais recentes. Esse contexto criptografado permite a circulação de contexto de ferramentas em todas as interações.

Como gerenciar esses campos :

  • Modo com estado (recomendado): quando você usa previous_interaction_id, o servidor processa automaticamente os campos id e signature.
  • Modo sem estado: ao gerenciar o histórico de conversas manualmente, é necessário transmitir os campos id e signature de volta ao modelo em solicitações subsequentes para validar a autenticidade e manter o contexto. Os SDKs oficiais processam isso automaticamente se você transmitir o objeto de resposta completo de volta ao histórico.

Dados específicos da ferramenta

Algumas ferramentas integradas retornam argumentos de dados visíveis ao usuário específicos do tipo de ferramenta.

Ferramenta Argumentos de chamada de ferramenta visíveis ao usuário (se houver) Resposta da ferramenta visível ao usuário (se houver)
google_search queries search_suggestions
google_maps queries places
google_maps_widget_context_token
url_context urls
URLs a serem navegados
status: status de navegação
retrieved_url: URLs navegados
file_search Nenhum Nenhum

Tokens e preços

Observe que as partes de chamada de ferramenta integrada nas solicitações são contadas para prompt_token_count. Como essas etapas intermediárias da ferramenta agora estão visíveis e são retornadas para você, elas fazem parte do histórico de conversas. Isso só acontece para o caso de solicitações, não respostas.

A ferramenta Pesquisa Google é uma exceção a essa regra. A Pesquisa Google já aplica o próprio modelo de preços no nível da consulta, então os tokens não são cobrados duas vezes (consulte a página de Preços).

Leia a página Tokens para mais informações.

Limitações

  • O modo validated é o padrão (o modo auto não é compatível) quando a circulação de contexto de ferramentas está ativada.
  • Ferramentas integradas, como google_search, dependem de informações de localização e hora atual. Portanto, se system_instruction ou function_declaration.description tiver informações de localização e hora conflitantes, o recurso de combinação de ferramentas poderá não funcionar bem.

Ferramentas compatíveis

A circulação de contexto de ferramentas padrão se aplica a ferramentas do lado do servidor (integradas). A execução de código também é uma ferramenta do lado do servidor, mas tem a própria solução integrada para a circulação de contexto. O uso do computador e a chamada de função são ferramentas do lado do cliente e também têm soluções integradas para a circulação de contexto.

Ferramenta Lado da execução Suporte à circulação de contexto
Pesquisa Google do lado do servidor Compatível
Google Maps do lado do servidor Compatível
Contexto do URL do lado do servidor Compatível
Pesquisa de arquivos do lado do servidor Compatível
Execução de código do lado do servidor Compatível (integrado, usa etapas code_execution e code_execution_result)
Uso do computador Lado do cliente Compatível (integrado, usa etapas function_call e function_response)
Funções personalizadas Lado do cliente Compatível (integrado, usa etapas function_call e function_response)

A seguir