Sharpening your .NET applications

En détail

Donner accès à une base de connaissances grâce à l'IA

Donner accès à une base de connaissances grâce à l'IA

Le logiciel de gestion qui est le sujet ici disposait déjà d’une très large base de connaissance sous la forme d’un portail web. La recherche dans cette documentation était parfois rendue difficile par la nécessité d’utiliser les « bons mots » pour atteindre les pages les plus pertinentes. C’est ici que l’IA entre en jeu et ouvre bien d’autres portes. Le système que j’ai mis en place repose sur une architecture RAG (Retrieval-Augmented Generation).

Concrètement, j’ai créé deux applications :

  • Un programme de mise en forme de l’information (vectorisation) écrit sous la forme d’une application console .NET, qui fonctionne quotidiennement sur un serveur Linux.
  • Un portail web écrit en Blazor qui permet le mode conversationnel avec l’IA.

Sources d’information

La base de connaissance du logiciel est bien entendu la première source d’information. Mais d’autres contenus se sont ajoutés afin d'enrichir la base documentaire exploitée par le modèle : d’anciens manuels legacy, certaines pages du site commercial, les explications des options générales du programme disponibles dans l’interface et finalement le schéma de la base de données SQL (au format DDL).

Adaptation du contenu

Afin de pouvoir être utilisé par l’IA, tous ces contenus doivent être découpés (chunking). Cependant, la base de connaissance contient des extraits de codes C#, SQL ou XAML. Ils doivent être extraits au préalable parce que le découpage de tels codes serait contre-productif. Le contenu est normalisé et toutes les balises HTML doivent être retirées. Le résultat du découpage est placé dans une base de données vectorielle Qdrant par du code .NET. Le server Qdrant tourne sur un serveur Ubuntu.

Portail conversationnel

Ce portail est écrit en Blazor. L’utilisateur y formule sa question, accepte des conditions d'utilisation et valide un captcha. Blazor est idéal pour afficher de façon progressive la réponse de l’IA. Ce dernier point est nécessaire car, sinon, le processus de réflexion pourrait paraître long.

Paradoxalement, la partie la plus difficile à mettre au point est le prompt système, c.-à-d. les instructions qui indiquent à l’IA comment répondre, ce qu’il ne peut pas dire, comment il doit structurer le contenu qu’il renvoie afin de pouvoir réassocier par la suite des URL vers la base de connaissance, …

Toute une série d’optimisations seront aussi nécessaires dans la pratique :

  • Détecter si la question fait référence à une page bien précise.
  • La question contient-elle de noms de variables, de paramètres, … qui vont être difficilement reconnus par la recherche sémantique. Dans ce cas, il faut ajouter une recherche traditionnelle (like %).

Le code normalise la question et la vectorise de la même manière que le processus d’adaptation du contenu. La recherche est alors effectuée, d’abord dans les contenus textuels, ensuite dans les extraits de code associés aux pages trouvées à l’étape précédente. Une surpondération est appliquée si le premier résultat correspond à un chunk qui est un titre de page.

Tous ces résultats forment la documentation potentiellement pertinente envoyée à l’IA (ChatGPT). La réponse est affichée de façon progressive à l’utilisateur. Une fois celle-ci entièrement générée, l’utilisateur peut poursuivre la conversation et le même processus entre alors dans une nouvelle itération.

Ce portail est capable de composer des requêtes SQL, sur base d’instructions données en langage naturel. C’est pour cela qu’il dispose du schéma de la base de données. La pratique a aussi montré qu’il est capable de produire du code C# en se basant, notamment, sur les exemples inclus dans la base de connaissance.

Une architecture RAG transforme ainsi une documentation existante en une véritable base de connaissance conversationnelle. L’IA ne remplace pas l’information accumulée au fil des années : elle lui donne une nouvelle dimension en permettant de l’interroger en langage naturel, de croiser des sources de natures très différentes et même d’exploiter cette connaissance pour produire du SQL ou du code. La qualité du résultat dépend alors autant du modèle utilisé que du soin apporté à la préparation, à la recherche et à la sélection des informations qui lui sont fournies.

Précédente Suivante
Tous les produits, technologies et noms de sociétés mentionnés sur ce site sont des marques déposées de leurs propriétaires respectifs. Les produits Microsoft cités (SQL Server, Windows, MAUI, Xamarin, .NET, Blazor, ...) sont des marques de Microsoft Corporation. Ubuntu est une marque déposée de Canonical Ltd.
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.