Présentation de l'appel de fonction avec l'API Gemini

Vous pouvez définir des fonctions personnalisées et les fournir aux modèles Gemini à l'aide de la fonction Fonctionnalité d'appel. Les modèles n'appellent pas directement ces fonctions, générer une sortie de données structurées spécifiant le nom de la fonction et des suggestions . Ce résultat vous permet d'écrire des applications qui utilisent les données structurées et appeler des API externes. La sortie de ces API peut alors être incorporée dans une autre requête de modèle, ce qui permet d'exécuter des requêtes réponses. L'appel de fonction permet aux utilisateurs d'interagir avec des données en temps réel des informations et divers services (bases de données, relations client, etc.) et des référentiels de documents, ce qui leur permet fournir des réponses pertinentes et contextuelles.

Fonctionnement des appels de fonction

Vous utilisez la fonctionnalité d'appel de fonction en ajoutant des données de requête structurées décrivant de programmation, appelées déclarations de fonctions, à une requête de modèle. La les déclarations de fonction fournissent le nom de la fonction API, expliquent son rôle, tous les paramètres pris en charge et la description de ces paramètres. Après avoir réussi une liste de déclarations de fonction dans une requête envoyée au modèle, il analyse et le reste de la requête pour déterminer comment utiliser les valeurs en réponse à la requête.

Le modèle renvoie ensuite un objet dans une Schéma compatible avec OpenAPI spécifiant comment appeler une ou plusieurs des fonctions déclarées pour répondre à la question de l'utilisateur. Vous pouvez ensuite utiliser l'appel de fonction recommandé appeler l'API proprement dite, obtenir une réponse, puis la transmettre à ou prendre d'autres mesures. Notez que le modèle n'appelle pas réellement fonctions déclarées. À la place, vous utilisez les paramètres d'objet de schéma renvoyés pour pour appeler la fonction. L'API Gemini prend également en charge les appels de fonction parallèles, où le modèle recommande plusieurs appels de fonction d'API pour une même requête.

Modèles compatibles

Les modèles suivants sont compatibles avec la fonctionnalité d'appel de fonction:

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

Déclarations de fonctions

Lorsque vous implémentez l'appel de fonction dans une requête, vous créez un objet tools, qui contient un ou plusieurs function declarations. Vous définissez des fonctions à l'aide du format JSON, en particulier sélectionner un sous-ensemble des Schéma OpenAPI . Une déclaration de fonction unique peut inclure les paramètres suivants:

  • name (chaîne): identifiant unique de la fonction dans l'API. .
  • description (chaîne): explication complète du paramètre l'objectif et les capacités.
  • parameters (objet): définit les données d'entrée requises par la fonction.
    • type (chaîne): spécifie le type de données global, par exemple object.
    • properties (objet): liste les paramètres individuels, chacun comportant les éléments suivants:
      • type (chaîne) : type de données du paramètre. Par exemple : string, integer et boolean.
      • description (chaîne): explication claire des valeurs l'objectif et le format attendu.
    • required (tableau): tableau de chaînes listant les noms des paramètres. qui sont obligatoires pour que la fonction fonctionne.

Pour obtenir des exemples de code de déclaration de fonction utilisant des commandes cURL, consultez la Exemples d'appels de fonctions. Par exemple, et des informations sur la création de déclarations de fonction pour d'autres plates-formes, consultez la Guide des plates-formes d'appel de fonctions

Bonnes pratiques pour les déclarations de fonction

Il est essentiel de définir précisément vos fonctions lorsque vous les intégrez dans votre requêtes. Chaque fonction repose sur des paramètres spécifiques qui guident son comportement et les interactions avec le modèle. La liste suivante fournit des conseils sur définir les paramètres d'une fonction individuelle dans un functions_declarations. tableau.

  • name: utilisez des noms clairs et descriptifs sans espace, point (.) ou tiret (-). Utilisez plutôt le trait de soulignement (_) ou Camel Case ("casse de chameau").

  • description: fournissez des informations détaillées, claires et spécifiques sur la fonction. des descriptions, et en fournissant des exemples si nécessaire. Par exemple, au lieu de find theaters, utilisez find theaters based on location and optionally movie title that is currently playing in theaters. Évitez les éléments trop vagues ou ambigus. des descriptions détaillées.

  • properties > type: utilisez des paramètres fortement typés pour réduire des hallucinations de modèles. Par exemple, si les valeurs de paramètres proviennent d'une utilisez un champ enum au lieu de répertorier les valeurs dans la description. (par exemple, "type": "enum", "values": ["now_playing", "upcoming"]). Si le est toujours un nombre entier, définissez le type sur integer au lieu de number

  • properties > description: fournissez des exemples et des contraintes concrets. Par exemple, au lieu de the location to search, utilisez The city and state, e.g. San Francisco, CA or a zip code e.g. 95616.

Pour connaître d'autres bonnes pratiques concernant l'utilisation de l'appel de fonction, consultez la Bonnes pratiques.

Mode d'appel de fonction

Vous pouvez utiliser le paramètre mode d'appel de fonction pour modifier l'exécution. le comportement de la fonctionnalité. Trois modes sont disponibles:

  • AUTO: comportement par défaut du modèle. Le modèle décide de prédire ou une réponse en langage naturel.
  • ANY: le modèle est contraint de toujours prédire un appel de fonction. Si allowed_function_names n'est pas fourni, le modèle choisit parmi tous les de fonctions disponibles. Si allowed_function_names est fourni, le modèle choisit parmi l'ensemble de fonctions autorisées.
  • NONE: le modèle ne prédit pas un appel de fonction. Dans ce cas, le modèle est le même que si vous ne transmettez aucune déclaration de fonction.

L'utilisation du mode ANY ("appel de fonction forcé") est n'est compatible qu'avec les modèles Gemini 1.5 Pro.

Vous pouvez également transmettre un ensemble de allowed_function_names qui, lorsqu'il est fourni, limite les fonctions que le modèle appellera. Vous ne devez inclure allowed_function_names lorsque le mode est ANY. Les noms des fonctions doivent correspondre noms de déclaration de fonctions. Avec le mode défini sur ANY et allowed_function_names, le modèle va prédire un appel de fonction à partir du l'ensemble de noms de fonctions fourni.

L'extrait de code suivant d'un exemple de requête montre comment Définissez mode sur ANY et spécifiez une liste de fonctions autorisées:

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

Exemples d'appels de fonctions

Cette section fournit des exemples d'invites pour les appels de fonction à l'aide de commandes cURL. Ces exemples incluent des scénarios à un seul et à plusieurs virages, différents modes d'appel de fonction.

Lorsque vous utilisez des commandes cURL avec cette fonctionnalité, la fonction et le paramètre les informations sont incluses dans l'élément tools. Chaque déclaration de fonction dans tools contient le nom de la fonction, et vous spécifiez les paramètres à l'aide de un schéma compatible OpenAPI, et une description de la fonction.

Exemple pour un seul tour

Avec le mode "un seul tour", vous appelez un modèle de langue une fois. Avec les appels de fonction, vous pouvez utiliser un seul tour lorsque vous fournissez au modèle une requête en langage naturel et une liste de fonctions. Dans ce cas, le modèle utilise la déclaration de la fonction, qui inclut le nom, les paramètres et la description de la fonction, pour prédire quelle fonction appeler et les arguments à appeler.

L'exemple curl suivant est un exemple de transmission d'une description d'une fonction qui renvoie des informations sur l'emplacement de la lecture d'un film. Plusieurs déclarations de fonctions, telles que find_movies et find_theaters, sont incluses dans la requête.

Exemple de requête d'appel de fonction à un seul tour

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 réponse à cet exemple curl peut ressembler à ce qui suit.

Exemple de réponse d'appel de fonction à un seul tour curl

[{
  "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
  }
}]
    

Exemple d'utilisation d'un seul tour avec le mode N'IMPORTE LEQUEL des éléments

L'exemple curl suivant est semblable à exemple de tour unique, mais elle définit le mode sur ANY:

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

Appel de fonction à un seul tour en utilisant N'IMPORTE QUEL mode (requête)

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 réponse peut ressembler à ce qui suit :

Appel de fonction à un seul tour en utilisant N'IMPORTE QUEL mode (réponse)

{
  "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"
      }
    ]
  }
}
    

Exemple d'un seul tour utilisant le mode N'IMPORTE LEQUEL des éléments autorisés et les fonctions autorisées

L'exemple curl suivant est semblable à exemple de tour unique, mais elle définit mode sur ANY et inclut une liste des modes fonctions:

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

Appel de fonction à un seul tour à l'aide de n'importe quel mode et des fonctions autorisées (requête)

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

Le modèle ne peut pas prédire la fonction find_movies, car elle ne figure pas dans la liste des fonctions autorisées. Il prédit donc une fonction différente à la place. La réponse peut ressembler à ce qui suit:

Appel de fonction à un seul tour à l'aide de n'importe quel mode et des fonctions autorisées (réponse)

{
  "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"
      }
    ]
  }
}
    

Exemples de commandes multitours

Vous pouvez mettre en œuvre un scénario d'appel de fonction multitour en procédant comme suit:

  1. Obtenez une réponse à un appel de fonction en appelant le modèle de langage. C'est le premier tour.
  2. Appelez le modèle de langage à l'aide de la réponse d'appel de fonction du premier tour et de la réponse de fonction que vous obtenez en appelant cette fonction. Il s'agit du deuxième tour.

La réponse du deuxième tour résume les résultats pour répondre à votre requête lors du premier tour ou contient un deuxième appel de fonction que vous pouvez utiliser pour obtenir plus d'informations sur votre requête.

Cet article inclut deux exemples curl multitours:

Utiliser une réponse d'un tour précédent

L'exemple curl suivant appelle la fonction et les arguments renvoyés par l'exemple de tour unique précédent pour obtenir une réponse. La méthode et les paramètres renvoyés par l'exemple de tour unique sont dans cette entrée JSON.

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

Exemple de requête d'appel de fonction multitours curl

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 réponse à cet exemple curl inclut le résultat de l'appel de la méthode find_theaters. La réponse peut ressembler à ce qui suit :

Exemple de réponse d'appel de fonction multitours 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
  }
}
    

Appeler le modèle plusieurs fois

L'exemple cURL suivant appelle le modèle d'IA générative plusieurs fois une fonction. Chaque fois que le modèle appelle la fonction, elle peut utiliser une fonction différente pour répondre à une requête utilisateur différente dans la requête.

Exemple de requête d'appel de fonction multitours curl

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

Exemple de réponse d'appel de fonction multitours 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
  }
}
]
    

Bonnes pratiques

Suivez ces bonnes pratiques pour améliorer la précision et de la fiabilité des appels de fonction.

Requête de l'utilisateur

Pour de meilleurs résultats, ajoutez les informations suivantes en préfixe à la requête utilisateur:

  • Contexte supplémentaire pour le modèle Par exemple : You are a movie API assistant to help users find movies and showtimes based on their preferences.
  • Détails ou instructions sur comment et quand utiliser ces fonctions. Par exemple, Don't make assumptions on showtimes. Always use a future date for showtimes..
  • Instructions pour poser des questions de clarification si les requêtes des utilisateurs sont ambiguës. Par exemple : Ask clarifying questions if not enough information is available to complete the request.

Paramètres d'échantillonnage

Pour le paramètre de température, utilisez 0 ou une autre valeur faible. Cela indique au modèle de générer des résultats plus fiables et de réduire les hallucinations.

Appel d'API

Si le modèle propose d'appeler une fonction qui permet d'envoyer une commande, de mettre à jour une base de données ou de provoquer des conséquences importantes, validez l'appel de fonction auprès de l'utilisateur avant de l'exécuter.