Exercices AI Engineering Tool use : definir des outils
🎉

Bravo!

Débutant 🧠 Fondamentaux 10 XP 0 personnes ont réussi

Tool use : definir des outils

Les LLM sont mauvais en calcul, ne connaissent pas les donnees en temps reel, et ne peuvent pas envoyer d'emails. Mais ils savent decider QUEL outil utiliser et AVEC QUELS parametres. C'est le principe du tool use (ou function calling) : tu donnes au LLM une liste d'outils disponibles, et il choisit lequel appeler.

Pour que le LLM sache quels outils il a a disposition, tu dois decrire chaque outil avec un schema JSON. Ce schema contient le nom de l'outil, une description, et la liste des parametres avec leur type. C'est exactement ce que font OpenAI, Anthropic et Google dans leurs APIs.

Voici a quoi ressemble un schema d'outil :

{
"name": "calculer",
"description": "Effectue un calcul mathematique",
"parameters": {
"expression": {"type": "string", "description": "L'expression a calculer"}
}
}

Tu vas ecrire une fonction creer_outil(nom, description, parametres, fonction) qui cree un dictionnaire representant un outil. Le dictionnaire doit contenir :
- "name" : le nom de l'outil
- "description" : la description
- "schema" : un dictionnaire decrivant les parametres (tu prends le dictionnaire parametres tel quel)
- "function" : la fonction Python a appeler

Tu vas aussi ecrire une fonction lister_outils(outils) qui prend une liste d'outils (crees par creer_outil) et renvoie une liste de schemas (sans la cle "function", juste "name", "description" et "schema"). C'est cette liste qu'on enverrait au LLM.

Exemple :

def meteo(ville):
return f"Il fait beau a {ville}"

outil = creer_outil("meteo", "Donne la meteo", {"ville": {"type": "string"}}, meteo)
outil["name"] renvoie "meteo"
outil["function"]("Paris") renvoie "Il fait beau a Paris"

schemas = lister_outils([outil])
schemas renvoie [{"name": "meteo", "description": "Donne la meteo", "schema": {"ville": {"type": "string"}}}]

Tests (4/5)

Creer un outil complet
def add(a, b): return a + b
outil = creer_outil('addition', 'Additionne deux nombres', {'a': {'type': 'int'}, 'b': {'type': 'int'}}, add)
assert outil['name'] == 'addition'
assert outil['description'] == 'Additionne deux nombres'
assert outil['function'](3, 4) == 7
Schema correct
def noop(): pass
outil = creer_outil('test', 'Test', {'x': {'type': 'string'}}, noop)
assert outil['schema'] == {'x': {'type': 'string'}}
Lister les schemas sans fonctions
def f1(): pass
def f2(): pass
o1 = creer_outil('a', 'Desc A', {}, f1)
o2 = creer_outil('b', 'Desc B', {'p': {'type': 'int'}}, f2)
schemas = lister_outils([o1, o2])
assert len(schemas) == 2
assert 'function' not in schemas[0]
assert schemas[1]['name'] == 'b'
Liste vide
assert lister_outils([]) == []

+ 0 tests cachés

Indices (3 disponibles)

solution.py