Construire un chatbot spécialisé sur vos données grâce à l'IA générative et PHP

JoliCode - JoliCodeBlog - 26/03
Utilisée pour rédiger n'importe quel type de contenus, pour faire des résumés ou encore intégrée à nos outils de développement, l'IA, et en particulier l'IA générative, a trouvé sa place dans bon nombre de secteurs. Basée sur des LLM entraînés sur des quantités astronomiques de documents

Utilisée pour rédiger n’importe quel type de contenus, pour faire des résumés ou encore intégrée à nos outils de développement, l’IA, et en particulier l’IA générative, a trouvé sa place dans bon nombre de secteurs. Basée sur des LLM entraînés sur des quantités astronomiques de documents divers et variés, ces IA sont capables de comprendre et répondre à la plupart des questions qui leur sont posées. Ce qui ne les empêche cependant pas de donner des réponses erronées ou imprécises dans beaucoup de situations.

Prenons l’exemple de notre projet Castor et sa documentation en ligne et demandons à ChatGPT le rôle de la fonction run() :

Même s’il comprend à peu près de quoi nous parlons, l’explication et l’exemple fournis ne sont pas corrects : la fonction line() n’existe tout simplement pas. ChatGPT n’a pas été entraîné spécifiquement sur la documentation de Castor mais a malgré tout « improvisé » une réponse.

Heureusement, il existe un moyen de forcer ce genre d’IA à être plus pertinente sur des domaines précis, sans avoir à dépenser du temps, ni d’argent à entraîner nos propres modèles de LLM. C’est notamment le principe de fonctionnement des Retrieval-Augmented Generation, abrégés RAG.

Section intitulée qu-est-ce-qu-un-ragQu’est-ce qu’un RAG ?

Bien qu’un modèle de langage (LLM) soit entraîné sur une vaste quantité de documents, il ne peut jamais être constamment à jour ni pertinent sur tous les sujets pour plusieurs raisons :

  • son entraînement prend souvent du temps ;
  • les documents en ligne (sur lesquels ils sont entraînés) changent régulièrement ;
  • le modèle n’a pas accès à toutes les informations du monde (et heureusement).

Dans cet article, nous utiliserons la documentation de Castor comme exemple. Mais imaginez avoir une IA capable de répondre à vos questions sur n’importe quel outil open source ou encore sur votre documentation interne du fonctionnement de votre entreprise.

C’est là qu’intervient le concept de RAG (Retrieval-Augmented Generation). Il permet de découper le processus de génération de réponses en deux étapes distinctes :

Section intitulée la-recuperationLa récupération 🔎

Lorsque l’utilisateur va saisir un message, nous allons nous occuper nous-mêmes de rechercher les documents pertinents pour lui répondre. Cette recherche pourrait se faire en faisant une simple recherche de mots-clefs dans notre ensemble de documents, par exemple avec Elasticsearch. Mais cela reste assez basique et les résultats peu satisfaisants. À la place, nous allons effectuer une recherche vectorielle dans notre corpus de documents. Cette idée peut faire peur au premier abord mais elle n’est pas très compliquée à appréhender. Voyons maintenant comment cela fonctionne.

Dans un premier temps, nous allons transformer chaque document en vecteurs. Ce vecteur est un objet mathématique qui permet de représenter le contexte et la sémantique du document en question. Ainsi, deux documents qui parlent d’un sujet assez similaire auront des vecteurs assez proches dans l’espace vectoriel rattaché.

Exemple de représentation de documents dans un espace vectoriel à trois dimensions.

Dans cet exemple simplifié, on voit que les deux chapitres de la documentation à propos des fonctions run() et capture() sont assez proches, et plutôt éloignés du chapitre concernant l’utilisation et la souscription aux événements de Castor. Ici, nous avons trois dimensions, mais dans la réalité, nous utiliserons plutôt des vecteurs avec des milliers de dimensions, afin d’être capable de capturer une sémantique la plus précise possible pour chaque document.

Si vous n’avez jamais fait de RAG, vous vous demandez sûrement comment obtenir un vecteur à partir d’un simple texte ? La réponse est plutôt simple et presque décevante : on va demander à une IA ! Il existe des modèles spécialement entraînés pour capturer la sémantique d’un texte et en extraire le vecteur correspondant. En anglais, cette représentation d’une valeur (textuelle, image ou autre) dans un format adapté (ici un vecteur) à un traitement par un algorit...
[Courte citation de 8% de l'article original]

Loading...