Introducción a las llamadas a funciones con la API de Gemini

Con la función de llamada a función de la API de Gemini, puedes proporcionar definiciones de función personalizadas al modelo. El modelo no invoca estas funciones directamente, sino que genera un resultado estructurado que especifica un nombre de función y argumentos sugeridos. Luego, puedes usar el nombre y los argumentos de la función para llamar a una API externa y puedes incorporar el resultado de la API resultante en una consulta adicional al modelo, lo que le permite proporcionar una respuesta más integral y realizar acciones adicionales.

Las llamadas a función permiten que los usuarios interactúen con información y servicios en tiempo real, como bases de datos, sistemas de administración de relaciones con clientes y repositorios de documentos. La función también mejora la capacidad del modelo para proporcionar respuestas relevantes y contextuales. Las llamadas a función son mejores para interactuar con sistemas externos. Si tu caso de uso requiere que el modelo realice cálculos, pero no involucra sistemas o APIs externos, considera usar la ejecución de código.

Para ver un ejemplo funcional de llamadas a función, consulta el notebook de"bot ligero".

Cómo funciona la llamada a función

Para usar la función de llamadas a función, agrega datos de consulta estructurados que describan interfaces de programación, llamadas declaraciones de función, a una instrucción del modelo. Las declaraciones de función proporcionan el nombre de la función de la API, explican su propósito, los parámetros que admite y las descripciones de esos parámetros. Después de pasar una lista de declaraciones de funciones en una consulta al modelo, este analiza las declaraciones de funciones y el resto de la consulta para determinar cómo usar la API declarada en respuesta a la solicitud.

Luego, el modelo muestra un objeto en un esquema compatible con OpenAPI que especifica cómo llamar a una o más de las funciones declaradas para responder a la pregunta del usuario. Luego, puedes tomar los parámetros de llamada a función recomendados, llamar a la API real, obtener una respuesta y proporcionarla al usuario o realizar más acciones. Ten en cuenta que el modelo no llama en realidad a las funciones declaradas. En su lugar, usas los parámetros del objeto de esquema que se muestra para llamar a la función. La API de Gemini también admite llamadas a funciones en paralelo, en las que el modelo recomienda varias llamadas a funciones de la API según una sola solicitud.

Declaraciones de funciones

Cuando implementas la llamada a función en una instrucción, creas un objeto tools, que contiene uno o más function declarations. Las funciones se definen con JSON, específicamente con un subconjunto seleccionado del formato de esquema de OpenAPI. Una sola declaración de función puede incluir los siguientes parámetros:

  • name (cadena): Es el identificador único de la función dentro de la llamada a la API.
  • description (cadena): Una explicación integral del propósito y las capacidades de la función.
  • parameters (objeto): Define los datos de entrada que requiere la función.
    • type (cadena): Especifica el tipo de datos general, como object.
    • properties (objeto): Muestra una lista de parámetros individuales, cada uno con lo siguiente:
      • type (cadena): Es el tipo de datos del parámetro, como string, integer, boolean.
      • description (cadena): Una explicación clara del propósito del parámetro y el formato esperado.
    • required (array): Es un array de cadenas que enumera los nombres de los parámetros que son obligatorios para que funcione la función.

Para ver ejemplos de código de una declaración de función con comandos cURL, consulta los Ejemplos de llamadas a función. Para ver ejemplos de cómo crear declaraciones de funciones con los SDKs de la API de Gemini, consulta el instructivo sobre llamadas a funciones.

Prácticas recomendadas para las declaraciones de funciones

Definir tus funciones con precisión es esencial cuando las integras en tus solicitudes. Cada función se basa en parámetros específicos que guían su comportamiento y su interacción con el modelo. En la siguiente ficha, se proporciona orientación para definir los parámetros de una función individual en un array functions_declarations.

  • name: Usa nombres claros y descriptivos sin espacios, puntos (.) ni guiones (-). En su lugar, usa caracteres de guion bajo (_) o escritura en mayúsculas y minúsculas.

  • description: Proporciona descripciones de las funciones detalladas, claras y específicas, y ofrece ejemplos si es necesario. Por ejemplo, en lugar de find theaters, usa find theaters based on location and optionally movie title that is currently playing in theaters. Evita las descripciones demasiado amplias o ambiguas.

  • properties > type: Usa parámetros de tipos estrictos para reducir las alucinaciones del modelo. Por ejemplo, si los valores de los parámetros son de un conjunto finito, usa un campo enum en lugar de enumerar los valores en la descripción (p.ej., "type": "enum", "values": ["now_playing", "upcoming"]). Si el valor del parámetro es siempre un número entero, establece el tipo en integer en lugar de number.

  • properties > description: Proporciona ejemplos y restricciones concretos. Por ejemplo, en lugar de the location to search, usa The city and state, e.g. San Francisco, CA or a zip code e.g. 95616.

Para conocer más prácticas recomendadas cuando uses llamadas a función, consulta la sección Prácticas recomendadas.

Modo de llamada a función

Puedes usar el parámetro de llamada a función mode para modificar el comportamiento de ejecución de la función. Hay tres modos disponibles:

  • AUTO: Es el comportamiento predeterminado del modelo. El modelo decide predecir una llamada a función o una respuesta de lenguaje natural.
  • ANY: El modelo está restringido para predecir siempre una llamada a función. Si no se proporciona allowed_function_names, el modelo elige entre todas las declaraciones de funciones disponibles. Si se proporciona allowed_function_names, el modelo elige entre el conjunto de funciones permitidas.
  • NONE: El modelo no predecirá una llamada a función. En este caso, el comportamiento del modelo es el mismo que si no pasas ninguna declaración de función.

El uso del modo ANY (“llamada a función forzada”) solo es compatible con los modelos Gemini 1.5 Pro y Gemini 1.5 Flash.

También puedes pasar un conjunto de allowed_function_names que, cuando se proporciona, limita las funciones a las que llamará el modelo. Solo debes incluir allowed_function_names cuando el modo sea ANY. Los nombres de las funciones deben coincidir con los nombres de las declaraciones de funciones. Con el modo establecido en ANY y el conjunto allowed_function_names, el modelo predecirá una llamada a función del conjunto de nombres de funciones proporcionados.

En el siguiente fragmento de código de una solicitud de ejemplo, se muestra cómo configurar mode en ANY y especificar una lista de funciones permitidas:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

Ejemplos de llamadas a función

En esta sección, se proporcionan ejemplos de instrucciones para llamar a funciones con comandos cURL. Los ejemplos incluyen situaciones de un solo turno y de varios turnos, y habilitan diferentes modos de llamada a función.

Cuando usas comandos cURL con esta función, la información de la función y el parámetro se incluye en el elemento tools. Cada declaración de función en el elemento tools contiene el nombre de la función, y puedes especificar los parámetros con un esquema compatible con OpenAPI y una descripción de la función.

Ejemplo de un solo turno

Un solo turno es cuando llamas al modelo de lenguaje una vez. Con las llamadas a función, un caso de uso de un solo turno puede ser cuando proporcionas al modelo una consulta en lenguaje natural y una lista de funciones. En este caso, el modelo usa la declaración de la función, que incluye el nombre, los parámetros y la descripción de la función, para predecir a qué función llamar y los argumentos con los que se la debe llamar.

El siguiente ejemplo de curl es un ejemplo de cómo pasar una descripción de una función que muestra información sobre dónde se está reproduciendo una película. En la solicitud, se incluyen varias declaraciones de función, como find_movies y find_theaters.

Solicitud de ejemplo de llamada a función de un solo turno

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "Which theaters in Mountain View show Barbie movie?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ]
}'
    

La respuesta a este ejemplo de curl podría ser similar a la siguiente.

Solicitud de ejemplo de curl de llamada a función de un solo turno

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "movie": "Barbie",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "totalTokenCount": 9
  }
}]
    

Ejemplo de un solo giro con el modo ANY

El siguiente ejemplo de curl es similar al ejemplo de un solo giro, pero establece el modo en ANY:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY"
  },
}

Llamada a función de un solo turno con CUALQUIER modo (solicitud)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY"
    },
  }
}'
    

La respuesta podría ser similar a la siguiente:

Llamada a función de un solo turno con CUALQUIER modo (respuesta)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "",
                "location": "North Seattle, WA"
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

Ejemplo de un solo turno con el modo ANY y las funciones permitidas

El siguiente ejemplo de curl es similar al ejemplo de un solo giro, pero establece el modo en ANY y, además, incluye una lista de funciones permitidas:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

Llamada a función de un solo turno con CUALQUIER modo y funciones permitidas (solicitud)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY",
      "allowed_function_names": ["find_theaters", "get_showtimes"]
    },
  }
}'
    

El modelo no puede predecir la función find_movies, ya que no está en la lista de funciones permitidas, por lo que predice una función diferente. La respuesta podría ser similar a la siguiente:

Llamada a función de un solo turno con CUALQUIER modo y funciones permitidas (respuesta)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "location": "North Seattle, WA",
                "movie": null
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

Ejemplos de varios turnos

Para implementar una situación de llamada a función de varios turnos, haz lo siguiente:

  1. Obtén una respuesta de llamada a función mediante una llamada al modelo de lenguaje. Este es el primer turno.
  2. Llama al modelo de lenguaje con la respuesta de llamada a función del primer turno y la respuesta a función que obtienes de la llamada a esa función. Este es el segundo turno.

La respuesta del segundo turno resume los resultados para responder tu consulta en el primer turno o contiene una segunda llamada a función que puedes usar para obtener más información para tu consulta.

En este tema, se incluyen dos ejemplos de curl de varios turnos:

Usa una respuesta de un turno anterior

El siguiente ejemplo de curl llama a la función y los argumentos que muestra el ejemplo anterior de un solo turno para obtener una respuesta. El método y los parámetros que muestra el ejemplo de un solo turno están en este JSON.

"functionCall": {
  "name": "find_theaters",
  "args": {
    "movie": "Barbie",
    "location": "Mountain View, CA"
  }
}

Solicitud de ejemplo de curl de llamada a función de varios turnos

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

La respuesta a este ejemplo de curl incluye el resultado de la llamada al método find_theaters. La respuesta podría ser similar a la siguiente:

Función de varios turnos que llama a la respuesta de ejemplo curl

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "candidatesTokenCount": 27,
    "totalTokenCount": 36
  }
}
    

Llama al modelo varias veces

En el siguiente ejemplo de cURL, se llama al modelo de IA generativa varias veces para llamar a una función. Cada vez que el modelo llama a la función, puede usar una función diferente para responder una consulta de usuario diferente en la solicitud.

Solicitud de ejemplo de curl de llamada a función de varios turnos

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  },
  {
    "role": "model",
    "parts": [{
      "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
    }]
  },{
    "role": "user",
    "parts": [{
      "text": "Can we recommend some comedy movies on show in Mountain View?"
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

Función de varios turnos que llama a la respuesta de ejemplo curl

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "comedy",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 48,
    "totalTokenCount": 48
  }
}
]
    

Prácticas recomendadas

Sigue estas prácticas recomendadas para mejorar la precisión y la confiabilidad de tus llamadas a función.

Instrucción del usuario

Para obtener mejores resultados, antepone los siguientes detalles a la consulta del usuario:

  • Contexto adicional para el modelo. Por ejemplo, You are a movie API assistant to help users find movies and showtimes based on their preferences.
  • Detalles o instrucciones sobre cómo y cuándo usar las funciones Por ejemplo: Don't make assumptions on showtimes. Always use a future date for showtimes.
  • Instrucciones para hacer preguntas aclaratorias si las búsquedas de los usuarios son ambiguas. Por ejemplo, Ask clarifying questions if not enough information is available to complete the request.

Parámetros de muestreo

Para el parámetro de temperatura, usa 0 o algún otro valor bajo. Esto le indica al modelo que genere resultados más seguros y reduzca las alucinaciones.

Invocación a la API

Si el modelo propone la invocación de una función que enviaría un pedido, actualizaría una base de datos o tendría consecuencias significativas, valida la llamada a función con el usuario antes de ejecutarla.