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

Las funciones personalizadas pueden definirse y proporcionarse a los modelos de Gemini usando la función Función de llamadas. Los modelos no invocan directamente estas funciones, sino Generar una salida de datos estructurados en la que se especifique el nombre de la función y las sugerencias argumentos. Este resultado te permite escribir aplicaciones que toman la estructura de salida y llamar a APIs externas, y la salida de la API resultante puede en una instrucción de modelo adicional, lo que permite realizar consultas de respuestas ante incidentes. Las llamadas a función permiten a los usuarios interactuar con información y varios servicios, como bases de datos, relaciones con clientes sistemas de gestión de proyectos y repositorios de documentos, lo que mejora su capacidad para proporcionar respuestas relevantes y contextuales.

Cómo funciona la llamada a función

Puedes usar la función Llamadas a función agregando datos de consulta estructurados que describan llamadas declaraciones de funciones, a una instrucción del modelo. El las declaraciones de funciones proporcionan el nombre de la función de la API, explican su propósito cualquier parámetro que admita y 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 realizar la llamada a función recomendada de respuesta, llamar a la API real, obtener una respuesta y proporcionar esa respuesta a al usuario o realizar alguna otra acción. Ten en cuenta que el modelo en realidad no llama al declaradas. En su lugar, usa los parámetros mostrados del objeto de esquema 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.

Modelos compatibles

Los siguientes modelos admiten la función Llamadas a función:

  • gemini-1.0-pro
  • gemini-1.0-pro-001
  • gemini-1.5-flash-latest
  • gemini-1.5-pro-latest

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. Defines funciones usando JSON, específicamente con un seleccionar subconjunto de los Esquema de OpenAPI de un conjunto de datos tengan un formato común. Una declaración de una sola función puede incluir los siguientes parámetros:

  • name (cadena): El identificador único de la función dentro de la API llamada.
  • description (cadena): Es una explicación completa de la función y las capacidades de una organizació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): Enumera los 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): Es una explicación clara de la propiedad del parámetro. propósito y el formato esperado.
    • required (array): Es un array de cadenas que enumeran los nombres de los parámetros. que son obligatorios para el funcionamiento de la función.

Para ver ejemplos de código de una declaración de función con comandos cURL, consulta la Ejemplos de llamada a funciones. Por ejemplo y obtener información sobre cómo crear declaraciones de funciones para otras plataformas, consulta el Guía de plataformas de 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 depende de parámetros específicos que guían su comportamiento y la interacción con el modelo. En la siguiente lista, se proporciona orientación sobre definir los parámetros de una función individual en un functions_declarations .

  • name: Usa nombres claros y descriptivos sin espacios ni puntos. (.) o guion (-). 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 el contenido demasiado amplio o ambiguo. descripciones.

  • 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, conjunto, 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 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.

Si deseas conocer más prácticas recomendadas para el uso de las llamadas a funciones, consulta el Prácticas recomendadas.

Modo de llamada a función

Puedes usar el parámetro mode de llamada a función para modificar la 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á limitado para predecir siempre una llamada a función. Si allowed_function_names no se proporciona, el modelo elige entre todas las de funciones disponibles. Si se proporciona allowed_function_names, que el modelo elige del 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.

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 es ANY. Los nombres de las funciones deben coincidir nombres de declaraciones de funciones. Con el modo establecido en ANY y el allowed_function_names, el modelo predecirá una llamada a función a partir 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 se usan comandos cURL con esta función, la función y el parámetro información se incluye en el elemento tools. Cada declaración de función en el El elemento tools contiene el nombre de la función y especificas 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"
  },
}

Llamadas a funciones de un solo turno con el modo ANY (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:

Llamadas a funciones de un solo turno con el modo ANY (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"]
  },
}

Llamadas a funciones de un solo turno con el modo ANY y las 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:

Llamadas a funciones de un solo turno con el modo ANY 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:

Usar una respuesta de un giro 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": "function",
    "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": "function",
    "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.