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 directamente estas funciones, pero en su lugar, genera un resultado estructurado que especifica un nombre de función y sugerencias argumentos. 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 de proporcionar y contextuales. Las llamadas a función son ideales para interactuar y sistemas. 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

Usas la función de llamada a función agregando datos de consulta estructurados que describen llamadas declaraciones de funciones, 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, analiza la de estado y el resto de la consulta para determinar cómo usar la declaración API en respuesta a la solicitud.

Luego, el modelo devuelve un objeto en un Esquema compatible con OpenAPI que especifican 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 paralelas, en las que el modelo recomienda varias llamadas a funciones de la API en función de 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 declaración de una sola 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 y 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 para integrarlas en tu 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 lista, 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 camelCase.

  • description: Proporciona una función detallada, clara y específica. y proporcionar 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 con tipado fuerte para reducir. alucinaciones del modelo. Por ejemplo, si los valores del parámetro provienen de una red finita, establecido, usa un campo enum en lugar de enumerar los valores en la descripción (p.ej., "type": "enum", "values": ["now_playing", "upcoming"]). Si el botón el valor del parámetro siempre es un número entero, establece el tipo en integer en lugar de en number

  • properties > description: Proporciona ejemplos concretos y restricciones. 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 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 modelo el comportamiento 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 proporcionan, limita las funciones que llamará el modelo. Solo debes incluir allowed_function_names cuando el modo sea ANY. Los nombres de las funciones deben coincidir nombres de 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.

El siguiente fragmento de código de un ejemplo de solicitud muestra cómo Establece mode en ANY y especifica 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 la llamada a función con comandos cURL. Los ejemplos incluyen situaciones de un solo turno o de varios turnos, y habilitar modos de llamada a funciones diferentes.

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 función que incluye el nombre de la función, los parámetros y la descripción, para predecir qué función llamar y los argumentos con los que se llama.

El siguiente ejemplo de curl es un ejemplo de cómo pasar una descripción de un que devuelve información sobre dónde se está reproduciendo una película. Varios de funciones se incluyen en la solicitud, como find_movies y find_theaters

Solicitud de ejemplo de llamada a una 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 puede 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 turno con el modo ANY

El siguiente ejemplo de curl es similar al ejemplo de un solo turno, pero establece el modo a 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 funciones permitidas

El siguiente ejemplo de curl es similar al ejemplo de un solo turno, pero establece el mode a ANY e incluye una lista de elementos permitidos funciones:

"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 porque no está en la lista de funciones permitidas, por lo que predice una función diferente. La respuesta pueden ser similares a los siguientes:

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 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 consultas 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.