Appel de fonction à l'aide de l'API Gemini


Les modèles génératifs sont efficaces pour résoudre de nombreux types de problèmes. Toutefois, ils sont limités par les contraintes suivantes:

  • Ils sont figés après l'entraînement, ce qui entraîne une obsolescence.
  • Ils ne peuvent ni interroger ni modifier des données externes.

L'appel de fonction peut vous aider à surmonter certaines de ces limites. L'appel de fonction est parfois appelé utilisation d'outils, car il permet à un modèle d'utiliser des outils externes tels que des API et des fonctions pour générer sa réponse finale.

Pour en savoir plus sur les appels de fonction, consultez la documentation Google Cloud, qui inclut une liste utile de cas d'utilisation des appels de fonction.

L'appel de fonction est compatible avec Gemini 1.0 Pro, Gemini 1.5 Pro et Gemini 1.5 Flash.

Ce guide vous explique comment implémenter une configuration d'appel de fonction semblable à l'exemple décrit dans la section principale suivante de cette page. Voici les étapes à suivre pour configurer l'appel de fonction dans votre application:

  1. Écrivez une fonction pouvant fournir au modèle les informations dont il a besoin pour générer sa réponse finale (par exemple, la fonction peut appeler une API externe).

  2. Créez une déclaration de fonction qui décrit la fonction et ses paramètres.

  3. Fournissez la déclaration de fonction lors de l'initialisation du modèle afin que le modèle sache comment utiliser la fonction, si nécessaire.

  4. Configurez votre application afin que le modèle puisse envoyer les informations requises pour que votre application appelle la fonction.

  5. Transmettez la réponse de la fonction au modèle afin qu'il puisse générer sa réponse finale.

Accéder à l'implémentation du code

Présentation d'un exemple d'appel de fonction

Lorsque vous envoyez une requête au modèle, vous pouvez également lui fournir un ensemble d'outils (comme des fonctions) qu'il peut utiliser pour générer sa réponse finale. Pour utiliser ces fonctions et les appeler ("appel de fonction"), le modèle et votre application doivent échanger des informations. Il est donc recommandé d'utiliser l'interface de chat à plusieurs tours pour appeler des fonctions.

Imaginez que vous ayez une application dans laquelle un utilisateur peut saisir une requête comme : What was the weather in Boston on October 17, 2024?.

Les modèles Gemini ne connaissent peut-être pas ces informations météorologiques. Toutefois, imaginez que vous connaissez une API de service météorologique externe qui peut les fournir. Vous pouvez utiliser l'appel de fonction pour indiquer au modèle Gemini un chemin d'accès à cette API et à ses informations météorologiques.

Tout d'abord, vous écrivez une fonction fetchWeather dans votre application qui interagit avec cette API externe hypothétique, qui a cette entrée et cette sortie:

Paramètre Type Obligatoire Description
Entrée
location Objet Oui Nom de la ville et de l'État pour lesquels obtenir la météo.
Seules les villes des États-Unis sont acceptées. Doit toujours être un objet imbriqué de city et state.
date Chaîne Oui Date pour laquelle récupérer la météo (doit toujours être au format YYYY-MM-DD).
Sortie
temperature Integer Oui Température (en degrés Fahrenheit)
chancePrecipitation Chaîne Oui Risque de précipitations (en pourcentage)
cloudConditions Chaîne Oui Conditions de nuage (clear, partlyCloudy, mostlyCloudy ou cloudy)

Lorsque vous initialisez le modèle, vous lui indiquez que cette fonction fetchWeather existe et comment elle peut être utilisée pour traiter les requêtes entrantes, si nécessaire. C'est ce qu'on appelle une "déclaration de fonction". Le modèle n'appelle pas la fonction directement. Au lieu de cela, lorsque le modèle traite la requête entrante, il décide si la fonction fetchWeather peut l'aider à y répondre. Si le modèle décide que la fonction peut effectivement être utile, il génère des données structurées qui aideront votre application à appeler la fonction.

Examinez à nouveau la requête entrante : What was the weather in Boston on October 17, 2024?. Le modèle décidera probablement que la fonction fetchWeather peut l'aider à générer une réponse. Le modèle examine les paramètres d'entrée nécessaires pour fetchWeather, puis génère des données d'entrée structurées pour la fonction, qui se présentent à peu près comme suit:

{
  functionName: fetchWeather,
  location: {
    city: Boston,
    state: Massachusetts  // the model can infer the state from the prompt
  },
  date: 2024-10-17
}

Le modèle transmet ces données d'entrée structurées à votre application afin qu'elle puisse appeler la fonction fetchWeather. Lorsque votre application reçoit les conditions météo de l'API, elle transmet les informations au modèle. Ces informations météo permettent au modèle de terminer son traitement final et de générer sa réponse à la requête initiale de What was the weather in Boston on October 17, 2024?.

Le modèle peut fournir une réponse finale en langage naturel, par exemple : On October 17, 2024, in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.

Schéma illustrant comment l'appel de fonction implique l'interaction du modèle avec une fonction de votre application 

Implémenter l'appel de fonction

Avant de commencer

Si vous ne l'avez pas déjà fait, suivez le guide de démarrage des SDK Vertex AI in Firebase. Assurez-vous d'avoir effectué les opérations suivantes:

  1. Configurez un projet Firebase nouveau ou existant, y compris en utilisant le forfait Blaze et en activant les API requises.

  2. Associez votre application à Firebase, y compris en l'enregistrant et en ajoutant votre configuration Firebase à votre application.

  3. Ajoutez le SDK et initialisez le service Vertex AI et le modèle génératif dans votre application.

Une fois que vous avez connecté votre application à Firebase, ajouté le SDK et initialisé le service Vertex AI et le modèle génératif, vous pouvez appeler Gemini API.

Les étapes restantes de ce guide vous expliquent comment implémenter une configuration d'appel de fonction semblable au workflow décrit dans la section Présentation d'un exemple d'appel de fonction (voir la section supérieure de cette page).

Vous pouvez consulter l'exemple de code complet pour cet exemple d'appel de fonction plus loin sur cette page.

Étape 1: Écrire la fonction

Imaginez que vous ayez une application dans laquelle un utilisateur peut saisir une requête comme : What was the weather in Boston on October 17, 2024?. Les modèles Gemini ne connaissent peut-être pas ces informations météo. Toutefois, imaginez que vous connaissez une API de service météo externe qui peut les fournir. L'exemple de ce guide repose sur cette API externe hypothétique.

Écrivez la fonction dans votre application qui interagira avec l'API externe hypothétique et fournira au modèle les informations dont il a besoin pour générer sa requête finale. Dans cet exemple météo, c'est une fonction fetchWeather qui appelle cette API externe hypothétique.

Étape 2: Créer une déclaration de fonction

Créez la déclaration de fonction que vous fournirez ultérieurement au modèle (étape suivante de ce guide).

Dans votre déclaration, incluez autant de détails que possible dans les descriptions de la fonction et de ses paramètres.

Le modèle utilise les informations de la déclaration de fonction pour déterminer quelle fonction sélectionner et comment fournir des valeurs de paramètre pour l'appel réel de la fonction. Consultez la section Comportements et options supplémentaires plus loin sur cette page pour découvrir comment le modèle peut choisir parmi les fonctions, ainsi que pour savoir comment contrôler ce choix.

Notez les points suivants concernant le schéma que vous fournissez:

  • Vous devez fournir des déclarations de fonction dans un format de schéma compatible avec le schéma OpenAPI. Vertex AI offre une compatibilité limitée avec le schéma OpenAPI.

    • Les attributs suivants sont acceptés: type, nullable, required, format, description, properties, items, enum.

    • Les attributs suivants ne sont pas acceptés: default, optional, maximum et oneOf.

  • Par défaut, pour les SDK Vertex AI in Firebase, tous les champs sont considérés comme obligatoires, sauf si vous les spécifiez comme facultatifs dans un tableau optionalProperties. Pour ces champs facultatifs, le modèle peut les renseigner ou les ignorer. Notez que ce comportement est l'opposé du comportement par défaut de Vertex AI Gemini API.

Pour connaître les bonnes pratiques concernant les déclarations de fonction, y compris des conseils sur les noms et les descriptions, consultez la section Bonnes pratiques de la documentation Google Cloud.

Voici comment écrire une déclaration de fonction:

Étape 3: Fournir la déclaration de fonction lors de l'initialisation du modèle

Le nombre maximal de déclarations de fonction que vous pouvez fournir avec la requête est de 128. Consultez la section Comportements et options supplémentaires plus loin sur cette page pour découvrir comment le modèle peut choisir parmi les fonctions, ainsi que pour savoir comment contrôler ce choix (à l'aide d'un toolConfig pour définir le mode d'appel de fonction).

Découvrez comment choisir un modèle Gemini et éventuellement une localisation adaptée à votre cas d'utilisation et à votre application.

Étape 4: Appelez la fonction pour appeler l'API externe.

Si le modèle décide que la fonction fetchWeather peut effectivement l'aider à générer une réponse finale, votre application doit effectuer l'appel réel de cette fonction à l'aide des données d'entrée structurées fournies par le modèle.

Étant donné que des informations doivent être transmises entre le modèle et l'application, la méthode recommandée pour utiliser l'appel de fonction est l'interface de chat multitour.

L'extrait de code suivant montre comment votre application est informée que le modèle souhaite utiliser la fonction fetchWeather. Il montre également que le modèle a fourni les valeurs de paramètre d'entrée nécessaires pour l'appel de fonction (et son API externe sous-jacente).

Dans cet exemple, la requête entrante contenait l'invite What was the weather in Boston on October 17, 2024?. À partir de cette invite, le modèle a inféré les paramètres d'entrée requis par la fonction fetchWeather (à savoir, city, state et date).

Étape 5: Fournir le résultat de la fonction au modèle pour générer la réponse finale

Une fois que la fonction fetchWeather a renvoyé les informations météorologiques, votre application doit les transmettre au modèle.

Le modèle effectue ensuite son traitement final et génère une réponse finale en langage naturel, par exemple : On October 17, 2024 in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.

Autres comportements et options

Voici quelques comportements supplémentaires d'appel de fonction que vous devez prendre en compte dans votre code et des options que vous pouvez contrôler.

Le modèle peut demander à appeler à nouveau une fonction ou une autre fonction.

Si la réponse d'un appel de fonction n'est pas suffisante pour que le modèle génère sa réponse finale, il peut demander un appel de fonction supplémentaire ou un appel à une fonction complètement différente. Ce dernier ne peut se produire que si vous fournissez plusieurs fonctions au modèle dans votre liste de déclarations de fonction.

Votre application doit tenir compte du fait que le modèle peut demander des appels de fonction supplémentaires.

Le modèle peut demander à appeler plusieurs fonctions en même temps.

Vous pouvez fournir jusqu'à 128 fonctions dans votre liste de déclaration de fonction au modèle. Par conséquent, le modèle peut décider que plusieurs fonctions sont nécessaires pour l'aider à générer sa réponse finale. Il peut également décider d'appeler certaines de ces fonctions en même temps. C'est ce que l'on appelle l'appel de fonction parallèle.

Votre application doit tenir compte du fait que le modèle peut demander l'exécution de plusieurs fonctions en même temps, et elle doit fournir toutes les réponses des fonctions au modèle.

Gemini 1.5 Pro et Gemini 1.5 Flash sont compatibles avec les appels de fonction en parallèle.

Vous pouvez contrôler comment et si le modèle peut demander à appeler des fonctions.

Vous pouvez appliquer certaines contraintes sur la manière dont le modèle doit utiliser les déclarations de fonction fournies. C'est ce qu'on appelle le mode d'appel de fonction. Voici quelques exemples :

  • Au lieu de permettre au modèle de choisir entre une réponse en langage naturel immédiate et un appel de fonction, vous pouvez l'obliger à utiliser toujours des appels de fonction. C'est ce qu'on appelle l'appel de fonction forcé.

  • Si vous fournissez plusieurs déclarations de fonction, vous pouvez limiter le modèle à n'utiliser qu'un sous-ensemble des fonctions fournies.

Pour implémenter ces contraintes (ou modes), ajoutez une configuration d'outil (toolConfig) avec la requête et les déclarations de fonction. Dans la configuration de l'outil, vous pouvez spécifier l'un des modes suivants. Le mode le plus utile est ANY.

Mode Description
AUTO Comportement par défaut du modèle. Le modèle décide d'utiliser un appel de fonction ou une réponse en langage naturel.
ANY Le modèle doit utiliser des appels de fonction ("appel de fonction forcé"). Pour limiter le modèle à un sous-ensemble de fonctions, spécifiez les noms de fonction autorisés dans allowedFunctionNames.
NONE Le modèle ne doit pas utiliser d'appels de fonction. Ce comportement est équivalent à une requête de modèle sans aucune déclaration de fonction associée.

Le mode d'appel de fonction est compatible avec Gemini 1.5 Pro et Gemini 1.5 Flash.

Que pouvez-vous faire d'autre ?

Essayer d'autres fonctionnalités de Gemini API

Découvrez comment contrôler la génération de contenu.

Vous pouvez également tester des requêtes et des configurations de modèle à l'aide de Vertex AI Studio.

En savoir plus sur les modèles Gemini

Découvrez les modèles disponibles pour différents cas d'utilisation, ainsi que leurs quotas et tarifs.


Envoyer des commentaires sur votre expérience avec Vertex AI in Firebase