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, y compris une liste utile de cas d'utilisation des appels de fonction.
Les appels de fonction sont compatibles 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 prochaine section majeure de cette page. Voici les étapes à suivre pour configurer l'appel de fonction dans votre application :
É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).
Créez une déclaration de fonction qui décrit la fonction et ses paramètres.
Fournissez la déclaration de la fonction lors de l'initialisation du modèle afin que celui-ci sache comment l'utiliser, si nécessaire.
Configurez votre application afin que le modèle puisse envoyer les informations requises pour que votre application appelle la fonction.
Renvoyez 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 se transmettre des informations. La méthode recommandée pour utiliser l'appel de fonction consiste donc à utiliser l'interface de chat multitours.
Imaginons que vous disposiez d'une application dans laquelle un utilisateur peut saisir une requête telle que 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éo externe capable de les fournir. Vous pouvez utiliser un appel de fonction pour fournir au modèle Gemini un chemin vers 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 (exprimée en pourcentage) |
cloudConditions |
Chaîne | Oui | Conditions de nuage (clear , partlyCloudy , mostlyCloudy ou cloudy )
|
Lors de l'initialisation du 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. À la place, lorsque le modèle traite la requête entrante, il détermine 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éorologiques en retour de l'API, elle les transmet 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.
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 :
Configurez un projet Firebase nouveau ou existant, y compris en utilisant le forfait Blaze et en activant les API requises.
Connectez votre application à Firebase, y compris en l'enregistrant et en ajoutant votre configuration Firebase à votre application.
Ajoutez le SDK, puis 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
Imaginons que vous disposiez d'une application dans laquelle un utilisateur peut saisir une requête telle que 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, il s'agit d'une fonction fetchWeather
qui appelle cette API externe fictive.
Étape 2 : Créer une déclaration de fonction
Créez la déclaration de fonction que vous fournirez plus tard 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 la 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 et comment contrôler ce choix.
Notez les points suivants concernant le schéma que vous fournissez:
Vous devez fournir vos 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
etenum
.Les attributs suivants ne sont pas acceptés :
default
,optional
,maximum
etoneOf
.
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 contraire du comportement par défaut pour 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 savoir comment le modèle peut choisir parmi les fonctions et comment contrôler ce choix (en utilisant 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 appeler 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 pour les appels de fonction que vous devez adapter à votre code et aux 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 au modèle jusqu'à 128 fonctions dans votre liste de déclarations de fonctions. Par conséquent, le modèle peut décider que plusieurs fonctions sont nécessaires pour générer sa réponse finale. Elle peut aussi décider d'appeler certaines de ces fonctions en même temps. C'est ce qu'on appelle l'appel de fonction parallèle.
Votre application doit s'adapter au fait que le modèle peut demander plusieurs fonctions s'exécutant en même temps et fournir au modèle toutes les réponses des fonctions.
L'appel de fonction parallèle est compatible avec Gemini 1.5 Pro et Gemini 1.5 Flash.
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. Il s'agit de définir le mode d'appel de fonction. Voici quelques exemples :
Au lieu de laisser le modèle choisir entre une réponse immédiate en langage naturel et un appel de fonction, vous pouvez le forcer à toujours utiliser 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.
Vous mettez en œuvre ces contraintes (ou modes) en ajoutant une configuration d'outil (toolConfig
) avec l'invite 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
- Créez des conversations multitours (chat).
- Générez du texte à partir de requêtes textuelles uniquement.
- Générer du texte à partir de requêtes multimodales (y compris du texte, des images, des PDF, des vidéos et de l'audio)
Découvrez comment contrôler la génération de contenu.
- Familiarisez-vous avec la conception de requêtes, y compris les bonnes pratiques, les stratégies et des exemples de requêtes.
- Configurez les paramètres du modèle, tels que la température et le nombre maximal de jetons de sortie.
- Utilisez les paramètres de sécurité pour ajuster la probabilité d'obtenir des réponses considérées comme nuisibles.
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