Construire l'outil SQL paramétré
Une fonction-outil, pas une étape de script
Section titled “Une fonction-outil, pas une étape de script”Un outil d’agent va chercher un fait précis dans une source externe, avec une interface claire (des paramètres en entrée, un résultat structuré en sortie) — pas une simple étape de script écrite en dur pour un seul scénario.
def offer_search_tool(conn, salaire_min=None, remote=None, ville=None): conditions, params = ["places_restantes > 0"], [] if salaire_min is not None: conditions.append("salaire_max >= ?") params.append(salaire_min) if remote is not None: conditions.append("remote = ?") params.append(remote) if ville is not None: conditions.append("ville = ?") params.append(ville)
sql = f"SELECT * FROM offres WHERE {' AND '.join(conditions)} ORDER BY salaire_max DESC" return pd.read_sql_query(sql, conn, params=params)Paramétrer, jamais concaténer
Section titled “Paramétrer, jamais concaténer”Remarquez que les valeurs (salaire_min, remote, ville) ne sont jamais insérées directement dans la chaîne SQL : elles passent par des ? (place-holders) et une liste params séparée, transmise à pd.read_sql_query. C’est le pilier de la défense contre l’injection SQL : le moteur de base de données traite chaque valeur comme une donnée, jamais comme du code SQL exécutable, même si elle contient des caractères spéciaux.
# Meme une tentative d'injection ne casse rien : la valeur est comparee# telle quelle, jamais executee comme instruction SQL.resultats = offer_search_tool(conn, ville="Paris'; DROP TABLE offres; --")Une requête construite par concaténation de chaînes (f"WHERE ville = '{ville}'") serait, elle, vulnérable : une valeur malveillante pourrait terminer la chaîne de caractères attendue et injecter des instructions SQL arbitraires.
Un outil, plusieurs usages
Section titled “Un outil, plusieurs usages”Cette même fonction sert aussi bien une recherche large (aucun paramètre, toutes les offres disponibles) qu’une recherche ciblée (tous les paramètres combinés) — la boucle de décision de la leçon 4 l’appellera plusieurs fois, avec des combinaisons de critères différentes à chaque tentative.
Prochaine étape
Section titled “Prochaine étape”👉 Construire l’outil de recherche sémantique
Junior TSAFACK – 12/09/2026