Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

L’appel de fonctions par un modèle

Après cette leçon: Je peux décrire une fonction pour qu’un modèle puisse la demander.

Leçon de 60 min2 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Comment un modèle peut utiliser vos fonctions

Un modèle de langage ne sait qu’écrire du texte. Il ne peut pas chercher un prix dans votre boutique, car il n’exécute pas votre code. L’appel de fonctions, aussi appelé appel d’outils, comble ce manque.

Vous décrivez une fonction au modèle. Il répond par une demande d’appel, et c’est votre programme qui fait l’appel.

À la fin de cette leçon

Remarque

Je peux décrire une fonction pour qu’un modèle puisse la demander.

Mots clés

MotCe que ça veut direExemple
Outilune fonction que votre programme propose à un modèle
Appel d’outilla demande du modèle d’exécuter un outil
Schémaune description de la forme de données
Argumentsles valeurs qu’un appel passe à la fonction{"article": "poire"}
Descriptiondes mots qui disent au modèle à quoi sert un outil

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un outil : un nom et des entrées

Pour proposer une fonction, vous envoyez trois choses. Le nom est celui que le modèle utilisera. La description dit ce qu’elle fait et quand l’utiliser. Les paramètres disent quels arguments elle prend, écrits sous forme de schéma JSON.

Le modèle ne voit jamais votre code. Il lit seulement cette description : une description vague donne de mauvaises demandes.

Exemple travaillé : un outil, partie par partie

PartieCe qu’elle contientDans notre outil
nameLe nom donné par le modèleprix_de
descriptionCe que fait l’outilDonne le prix en centimes d’un article.
parametersLes arguments, sous forme de schémaun texte nommé article
requiredLes arguments obligatoiresarticle

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Afficher la description d’un outil

Commande
docker exec -w /home/node/project agent node -e "const outil={type:'function',function:{name:'prix_de',description:'Donne le prix en centimes d’un article.',parameters:{type:'object',properties:{article:{type:'string',description:'Le nom de l’article, par exemple pomme'}},required:['article']}}};console.log(JSON.stringify(outil,null,2))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le modèle répond par une demande

Quand le modèle veut un outil, sa réponse contient une liste nommée tool_calls au lieu de mots. Chaque appel a un id, le name de la fonction et les arguments.

Les arguments arrivent dans une seule chaîne de JSON, pas dans un objet. Votre programme doit lire cette chaîne avant d’utiliser les valeurs.

Demander un appel d’outil à un modèle

Commande
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const poser=async(m,t)=>{const r=await fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:m,tools:t,tool_choice:'required',max_tokens:80})});const j=await r.json();if(r.ok)return j.choices[0].message;throw Error(r.status+' '+j.error.message)};const outil={type:'function',function:{name:'prix_de',description:'Donne le prix d’un article.',parameters:{type:'object',properties:{article:{type:'string'}}}}};(async()=>{let c;try{c=(await poser([{role:'user',content:'Prix d’une poire ?'}],[outil])).tool_calls[0]}catch(e){console.log('Refus ('+e.message+'). Exemple enregistré :');c={function:{name:'prix_de',arguments:JSON.stringify({article:'poire'})}}}const f=c.function;console.log('Nom : '+f.name);console.log('Arguments : '+f.arguments+' -> article '+JSON.parse(f.arguments).article)})()"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur courante

Attention

Beaucoup pensent que le modèle exécute la fonction. Ce n’est pas le cas. Il écrit seulement une demande. Votre programme lit la demande, exécute la fonction et décide quoi faire du résultat.

Pour aller plus loin : améliorer une description

Changez la description dans l’exécution qui interroge un modèle, par exemple en Donne un prix. Lancez-la trois fois et notez si l’appel change.

Le schéma de cette exécution n’a pas de liste required. Ajoutez required:['article'] à côté de properties, puis écrivez ce que cela change pour le modèle.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.