ReAct : ToolFactory

, par Bertrand Degoy

ToolFactory est une fonction utilitaire permettant de créer des Outils de Fonction (FunctionTool) à partir d’une bibliothèque de fonctions Python.

La fonction auto_toolkit

Cette fonction génère dynamiquement une liste de `FunctionTool` LlamaIndex à partir des fonctions publiques d’un module Python.

Elle inspecte les fonctions du module fourni, applique des filtres d’inclusion/exclusion, et transforme chaque fonction retenue en outil agentifiable (`FunctionTool`) via l’examende sa signature et de sa documentation.

Paramètres :
module (ModuleType) :
Le module Python à analyser (ex. : `statistics`, `math`, ou un module métier).
include (List[str], optionnel) :
Liste blanche : noms de fonctions à inclure explicitement. Si None, inclut toutes les fonctions publiques.
exclude (List[str], optionnel) :
Liste noire : noms de fonctions à ignorer. Prioritaire sur `include`.
verbose (bool, optionnel) :
Si True, affiche dans la console les outils ajoutés et les erreurs éventuelles.

Retour :
List[FunctionTool] :
Liste des objets `FunctionTool` générés à partir des fonctions sélectionnées.

Usage :
from modules.tools.tool_factory import auto_toolkit
tools = auto_toolkit(
statistics,
include=["mean", "stdev", "median"],
tags=["statistique"],
verbose=True

Voici le code pour générer automatiquement des outils de fonction à partir du module ’statistiques. Noter que n’importe pas toutes les fonctions afin de maîtriser le volume de tokens à transférer à l’agent (voir ReAct : ToolRouteur).

  1.         from modules.tools.tool_factory import auto_toolkit
  2.  
  3.         tools += auto_toolkit(
  4.             statistics,
  5.             include=["mean", "stdev", "median", "variance"],
  6.             verbose=True
  7.         )

Télécharger

Modules Python et fonctions utilisables

Tous les modules Python ne sont pas pertinents pour produire des FunctionTool exploitables dans un agent. Voici une sélection affinée, classée selon leur **pertinence, c’est-à-dire leur capacité à fournir des fonctions :

  • publiques
  • pures ou quasi-pures
  • typées
  • documentées
  • auto-validables via fn_schema
Module Pertinence
statistics Fonctions bien typées, docstring claires, signatures simples
math Fonctions scalaires pures, typées, robustes
cmath Idem, mais pour les complexes
decimal Fonctions précises pour calculs financiers
fractions Manipulation exacte de rationnels
datetime Fonctions de manipulation de dates (attention à la mutabilité)
calendar Fonctions pures sur les jours, semaines, années
itertools Générateurs utiles, mais nécessite des wrappers pour être agentifiables
functools (partiellement) Quelques fonctions décorables (ex. reduce) si bien encapsulées

Voici un tableau synthétique des fonctions principales pour chaque module Python standard qui peuvent être transformés en FunctionTool par tool_factory, avec leur description.* Ces fonctions sont typées, documentées, et généralement compatibles avec FunctionTool*.

statistics — Statistiques descriptives

Fonction Description
mean(data) Moyenne arithmétique
fmean(data) Moyenne arithmétique rapide (float uniquement)
geometric_mean(data) Moyenne géométrique
harmonic_mean(data) Moyenne harmonique
median(data) Médiane
median_low(data) Plus grande valeur ≤ médiane
median_high(data) Plus petite valeur ≥ médiane
median_grouped(data, interval=1) Médiane pour données groupées
mode(data) Valeur la plus fréquente
multimode(data) Liste des valeurs les plus fréquentes
pstdev(data, mu=None) Écart-type de la population
stdev(data, xbar=None) Écart-type de l’échantillon
pvariance(data, mu=None) Variance de la population
variance(data, xbar=None) Variance de l’échantillon
quantiles(data, , n=4, method=’exclusive’)* Découpe en quantiles
covariance(x, y) Covariance entre deux séries
correlation(x, y) Corrélation de Pearson
linear_regression(x, y) Régression linéaire (renvoie pente et intercept)

math — Mathématiques de base

Fonction Description
sqrt(x) Racine carrée
exp(x) Exponentielle
log(x, base=math.e) Logarithme (base e par défaut)
log10(x) Logarithme décimal
log2(x) Logarithme base 2
pow(x, y) Puissance ( x^y )
fabs(x) Valeur absolue
factorial(x) Factorielle
gcd(a, b) Plus grand commun diviseur
lcm(a, b) Plus petit commun multiple
ceil(x) Arrondi supérieur
floor(x) Arrondi inférieur
trunc(x) Troncature (partie entière)
sin(x), cos(x), tan(x) Fonctions trigonométriques
degrees(x), radians(x) Conversion angle ↔ radians
isclose(a, b) Comparaison flottante
isnan(x), isinf(x), isfinite(x) Tests numériques

cmath — Mathématiques complexes

Fonction Description
sqrt(x) Racine carrée complexe
exp(x) Exponentielle complexe
log(x, base=math.e) Log complexe
phase(x) Argument (angle) d’un nombre complexe
polar(x) Coordonnées polaires
rect(r, phi) Conversion polaire → cartésien
sin(x), cos(x), tan(x) Trigonométrie complexe

decimal — Calculs décimaux précis

Fonction Description
Decimal(x) Crée un nombre décimal précis
getcontext() Accès au contexte (précision, arrondi)
setcontext(ctx) Définit un contexte personnalisé
localcontext() Contexte temporaire
Méthodes : sqrt(), ln(), exp(), quantize(), etc. Opérations précises sur Decimal

fractions — Calculs exacts avec fractions

Fonction Description
Fraction(x) Crée une fraction exacte
limit_denominator(max_denominator) Approximation avec dénominateur borné
Opérations : +, -, *, /, ** Calculs exacts entre fractions ou entiers

datetime — Dates et heures

Fonction Description
datetime(year, month, day, ...) Objet date-heure
date(year, month, day) Objet date
time(hour, minute, ...) Objet heure
timedelta(...) Durée
now(), today(), utcnow() Horodatages actuels
Méthodes : isoformat(), weekday(), strftime() Formatage et manipulation

calendar — Calendriers

Fonction Description
isleap(year) Année bissextile ?
monthrange(year, month) Premier jour et nombre de jours
monthcalendar(year, month) Matrice des semaines
weekday(year, month, day) Jour de la semaine
month_name, day_name Noms localisés

Sources : Python 3.14 Standard Library Documentation