Les modèles génératifs sont efficaces pour résoudre de nombreux types de problèmes. Cependant, ils sont limités par des limites telles que:
- 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 comprend une liste utile des 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 :
É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 fonction lors de l'initialisation du modèle afin que le modèle sache comment utiliser la fonction, 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 échanger des informations. Il est donc recommandé d'utiliser l'interface de chat multi-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é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 (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 telle que : 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é toutes les actions 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 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
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, imaginons que vous connaissez une API de service météo externe capable de 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éez 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 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
,enum
.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 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 rédiger 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 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 indique é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 déduit les paramètres d'entrée requis par la fonction fetchWeather
(c'est-à-dire 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 est insuffisante pour que le modèle génère sa réponse finale, le modèle peut demander un appel de fonction supplémentaire ou une fonction entièrement 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 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. 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 à 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 équivaut à une requête de modèle sans déclarations de fonction associées. |
Le mode d'appel de fonction est compatible avec Gemini 1.5 Pro et Gemini 1.5 Flash.
Que pouvez-vous faire d'autre ?
Essayez 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.
- Comprendre la conception des requêtes, y compris les bonnes pratiques, les stratégies et les 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 pouvant être considérées comme dangereuses.
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