Classe ChatEngine version 1.5.x pour ChattyBot

, par Bertrand Degoy

Cette nouvelle version du ChatEngine met en oeuvre un moteur d’inférences React et des outils. Le Query Engine des versions précédentes est intégré comme l’un de ces outils. Les autres outils comprennent des outils généraux (par exemple calculs mathématiques et statistiques) et des outils particularisés selon le thème. Une attention particulière est apportée à l’extraction de données en temps réel.

L’évolution consiste à utiliser un moteur d’inférences ’React’ (Reasoning and Acting).
Cela permet à l’agent LLM de raisonner et agir en utilisant des outils, dans une boucle logique inspirée du document : Synergizing Reasoning and Acting in Language Models.

Dans cette architecture, les outils comprennent :
 un outil QueryEngineTool pour mettre en oeuvre le RAG sur les index créés par RAG Manager ou IngestCmd ;
 des outils généraux tels que calcul statistique etc.
 des outils personnalisés (FunctionTools) selon le thème. On peut par exemple intégrer de façon dynamique des données "temps réel" issues de WhatisWhat.

L’outil Query Engine

Un QueryEngine semblable à celui des versions précédentes est intégré au moteur d’inférences React en tant que QueryEngineTool, directement dans la classe ChatEngine. Il fonctionne avec le même paramétrage que les versions précédentes et ne requiert donc aucune modification de ChattyBot.

Contrairement aux versions précédentes dans lesquelles le Query Engine n’était appelé qu’une fois par cycle question-réponse (une seule inférence), le moteur d’inférences peut l’appeler plusieurs fois pour une recherche par étapes dans le cadre d’un raisonnement. Ceci améliore grandement la qualité des réponses, notamment leur concision au regard de la question posée.

Les outils généraux

La classe GeneralToolKit (modules/tools/_general_.py) expose des outils généraux. Ses outils sont systématiquement mis à disposition du moteur d’inférences React.

Les outils personnalisés

Chaque thème peut, de façon optionnelle, mettre des outils spécifiques à disposition du moteur d’inférences React.
Une classe ThemeToolKit (modules/tools/theme.py) expose des outils spécifiques du thème, par exemple pour obtenir des données "temps réel".

Saisie de données "temps réel"

Principe général
Par données "temps réel", nous entendons des valeurs obtenues au moyen d’un outil qui interroge un service selon un protocole donné. Le service répond en fournissant les dernières valeurs ou informations connues avec datation. Nous nous limitons à une interrogation "passive", ainsi, la sécurité du système de données du côté du serveur est préservée, aucune action n’étant déclenchée du côté de l’application serveur.

Les données "temps réel" peuvent être saisies par appel à un simple Web Service attaché à une source de données.
Il est également possible d’utiliser Model Context Protocol (MCP) pour accéder à des sources sous ce standard.

Choix entre MCP ou Web Service simple

Critère MCP WS
Externalisation de traitement LLM standard non
définition des outils côté serveur côté client
protocole standard propriétaire
sécurité publique OAuth2 et OpenID Connect à développer

Au vu de ce simple tableau, on voit que MCP est adapté à des traitements d’IA répartis sur réseau ouvert, au prix d’une certaine complexité côté serveur.

Dans le cas de MCP, il faut noter que la définition des outils est déterminée côté serveur, ce qui peut poser des problème de compréhension de leur fonctionnalité par le moteur d’inférence ou des conflits avec d’autres outils.

En conclusion :
 Si on veut utiliser des outils existants (par exemple WolframAlpha) ainsi que des ressources LLM, le serveur MCP, lorsqu’il est offert, sera une alternative à la création d’outils sur l’API.
 Si on n’a besoin que d’une simple extraction de données en communiquant dans un espace de confiance, un Web Service est plus simple et mieux maîtrisable. Ceci est d’autant plus vrai que le serveur MCP doit être le plus souvent construit sur une API REST ou équivalent.

Lister les outils à la disposition de ChattyBot

Pour obtenir la liste des outils et leur description, posons la question à ChattyBot :

Q : what function tools and query tool do you have available ? [1]

R : Je suis équipé de plusieurs outils pour vous aider avec différentes tâches. Voici une liste de mes outils et leurs fonctions :

doc_search : Cet outil permet de rechercher des informations dans des documents indexés. Il est utile pour trouver des réponses à des questions spécifiques ou pour obtenir des informations détaillées sur un sujet particulier.

calcul_tool : Cet outil effectue des calculs arithmétiques simples. Vous pouvez l’utiliser pour additionner, soustraire, multiplier ou diviser des nombres.

tva_tool : Cet outil calcule la TVA (Taxe sur la Valeur Ajoutée) sur un montant donné. Il est utile pour les calculs financiers et fiscaux.

stats_tool : Cet outil réalise des analyses statistiques telles que le calcul de la moyenne, de la médiane, de l’écart type, de la variance et de la tendance linéaire. Il est utile pour l’analyse de données.

alerte_stats_tool : Cet outil déclenche une alerte si la dernière valeur s’écarte trop de la tendance linéaire. Il est utile pour la surveillance des données et la détection d’anomalies.

stats_alert_tool : Cet outil retourne les valeurs qui s’écartent trop de la tendance linéaire selon l’écart type. Il est utile pour identifier les valeurs aberrantes dans un ensemble de données.

Notes

[1Il faut poser la question en anglais, langage dans lequel sont définies sans risque d’hallucination les termes "function tools" et "query tools".