Académique Documents
Professionnel Documents
Culture Documents
Projet Industriel de Fin D'Etude: Développement D'une Application de Chat Avec Des Données Structurelles
Projet Industriel de Fin D'Etude: Développement D'une Application de Chat Avec Des Données Structurelles
Sous le Thème :
Je dédie ce travail
A mes parents qui m’ont soutenu et encouragé sans cesse durant toutes mes
mes grands-parents et ceux qui ont partagé avec moi tous les moments
Le présent rapport détaille le travail accompli lors d'un stage de quatre mois effectués au
sein de l'entreprise STMicroelectronics Bouskoura, intégré dans le cursus de formation
d'Ingénieur de l'École Nationale Supérieure d'Art et Métiers (ENSAM).
Ce projet avait pour objectif le développement d'une application de chat innovante, conçue
pour faciliter l’analyse des données structuré format CSV, l’utilisateur va simplement entrer
sa requête et l’application va retourner le résultat cherché.
Ce rapport présente toutes les étapes suivies pour la réalisation de ce projet, allant de la
définition de la problématique et du choix des solutions adoptées à leur mise en œuvre,
ainsi que le développement d’une interface de chat conviviale pour les utilisateurs.
Mots clés : Application de chat, Données structurées, CSV, Intelligence artificielle, LLM.
Abstract:
This report details the work completed during a four-month internship at STMicroelectronics
Bouskoura, which is part of the engineering curriculum at the École Nationale Supérieure
d'Arts et Métiers (ENSAM).
The project aimed to develop an innovative chat application designed to facilitate the
analysis of structured CSV format data. The user will simply enter their query, and the
application will return the sought-after result.
This report presents all the steps followed in the realization of this project, from defining the
problem and choosing the adopted solutions to their implementation, as well as the
development of a user-friendly chat interface.
Tableau 5 : Sélection des applications de l’IA générative par secteur d’activité ............Error!
Notre projet de fin d'études s'inscrit parfaitement dans cette dynamique. Il vise à
développer une application de chat innovante qui utilise des données structurées au format
CSV pour améliorer l'interaction et la communication entre les utilisateurs. En exploitant les
capacités de l'intelligence artificielle, notre application sera capable d'analyser et de traiter
de grandes quantités de données pour fournir une expérience utilisateur personnalisée et
intuitive.
Présentation d’Organisme
d’Accueil
I Introduction :
L’objectif de ce chapitre est de situer le projet dans un environnement organisationnel
et contextuel. Nous commencerons par une présentation de l’organisme d’accueil, ensuite
nous passerons à une présentation du contexte du projet, le cahier des charges et la
démarche de travail adoptée.
II Présentation de l’entreprise :
STMicroelectronics est une société internationale d'origine franco-italienne dont le
siège opérationnel et exécutif est situé à Plan-les-Ouates, près de Genève en Suisse.
1957 ➔ La société Società Generale Semiconduttori (SGS) est fondée en Italie pour produire des
semi-conducteurs.
1994 ➔ ST achète certains actifs de la société canadienne Nortel dans le domaine des
semi-conducteurs ainsi que l'usine de Rancho Bernardo. En 2000, STMicroelectronics
acquiert également les actifs de l'usine de semi-conducteurs à Ottawa, toujours auprès de
Nortel.
STMicroelectronics crée des circuits électroniques invisibles qui sont intégrés dans
des puces, lesquelles sont présentes dans des millions, voire des milliards d'appareils
électroniques utilisés chaque jour. Ces puces sont conçues avec les avancées
technologiques les plus récentes en matière de performance, d'intelligence et d'efficacité, et
jouent un rôle clé dans des produits et équipements tels que les voitures, les machines
industrielles, les smartphones et les brosses à dents électriques.
STMicroelectronics aide ses clients à rendre leurs produits plus intelligents, moins
gourmands en énergie, plus connectés, plus sûrs et davantage sécurisés grâce à ses
innovations avancées.
En 2022, STMicroelectronics a été portée par une demande plus soutenue que prévu
sur l'ensemble de ses marchés. Cette dynamique a conduit la direction de l'entreprise à
réviser à la hausse ses projections. À l'origine, l'entreprise s'attendait à un chiffre d'affaires
compris entre 14,8 et 15,3 milliards de dollars, ce qui aurait représenté une augmentation
médiane de 18 % par rapport à l'année 2021, ainsi qu'une marge brute d'environ 46 %.
Cependant, de nouvelles projections ont été formulées, plus optimistes, avec un chiffre
d'affaires prévu entre 15,9 et 16,2 milliards de dollars, reflétant une croissance médiane
annuelle de 25,8 %, et une marge brute ciblée à 47 %.
Ces prévisions ont été renforcées par les solides résultats du deuxième trimestre de
l'année 2022, qui ont surpassé les attentes des analystes financiers. Le chiffre d'affaires a
atteint 3,84 milliards de dollars, se situant au sommet de la fourchette de prévisions de la
direction et dépassant le consensus financier de 80 millions de dollars. La marge
d'exploitation a culminé à 26,2 %, entraînant une augmentation du bénéfice par action à 92
cents de dollars, soit 12 cents de dollars de plus que le consensus. Ces performances ont
été bien accueillies par les marchés financiers, avec une hausse d'environ 3 % du cours de
l'action à la bourse de Paris au moment de la publication des résultats.
- Département Planning :
- Département Manufacturing :
Il a pour mission la gestion des toutes les opérations de fabrication, de maintenance des
équipements et de l’optimisation des rendements.
- Département Qualité :
Son rôle principal est mis en place un système qualité conforme aux normes internationales
les plus sévères afin de satisfaire totalement les clients.
- Département Finances :
- Département Informatique :
Son rôle principal est la gestion des machines de traitement de l’information, leur
installation et leur maintenance hardware et software. Il s’occupe aussi de tout ce qui est
partie informatique dans les machines de production, sans oublier les outils de
télécommunications.
IV Conclusion :
Dans ce premier chapitre, j’ai présenté l’entreprise STMicroelectronics. Dans le
chapitre suivant je vais présenter le contexte général du projet ainsi que la présentation des
outils utilisés pour la réalisation du projet.
Chapitre II :
II Présentation du projet :
Objectif du projet :
Développement d'une application qui accepte les fichiers CSV, et les requêtes de
l'utilisateur en entrée et retourne une réponse comprenant un préambule, le code Python
correspondant, ainsi que le résultat de l'exécution de ce code.
• Réactivité de l'agent : L'application doit être conçue pour que le temps de réponse
de l'agent soient rapides.
Contraintes du projet :
-Les bibliothèques ne sont pas dans leur dernière version.
-Jupyter Notebook est le seul environnement de travail où je peux développer mon
projet.
-J’ai le droit d’utiliser un seul GPU.
-le travail doit être terminer en 4 mois.
-Il y a un manque d'informations spécifiques sur le sujet, ce qui est essentiel pour
une compréhension approfondie et l'avancement du projet.
L’IA permet à des systèmes techniques de percevoir leur environnement, gérer ces
perceptions, résoudre des problèmes et entreprendre des actions pour atteindre un but
précis. L’ordinateur reçoit des données (déjà préparées ou collectées via ses capteurs -
une caméra, par exemple) les analyse et réagit.
Les systèmes dotés d’IA sont capables d’adapter leurs comportements (plus ou
moins) en analysant les effets produits par leurs actions précédentes, travaillant de manière
autonome.
III.1.A.a IA Faible :
L’IA faible, également appelée IA étroite est une IA entraînée et ciblée pour effectuer des
tâches spécifiques. Elle est à l’origine de la plus grande partie de l’IA qui nous entoure
aujourd’hui.
III.1.A.b IA Forte :
L’IA forte se compose de l’intelligence artificielle générale (AGI) et de la superintelligence
artificielle (ASI). L’intelligence artificielle générale (AGI), ou IA générale, est une forme
théorique d’IA grâce à laquelle une machine aurait une intelligence équivalente à celle de
l’homme. Elle serait dotée d’une conscience autonome capable de résoudre des
problèmes, d’apprendre et de planifier l’avenir. La superintelligence artificielle (ASI),
également appelée superintelligence, surpasserait l’intelligence et les capacités du cerveau
humain. Bien que l’IA forte soit encore entièrement théorique et qu’aucun exemple pratique
ne soit utilisé aujourd’hui, cela ne signifie pas que les chercheurs en IA ne sont pas en train
d’explorer son développement.
III.3 IA Générative :
L'intelligence artificielle générative est une technologie qui permet aux ordinateurs de
créer du contenu original, comme des images, de la musique ou des textes, de manière
autonome. Elle utilise des modèles d'apprentissage automatique pour analyser et
comprendre des données existantes, puis générer de nouvelles informations basées sur
ces connaissances. Cette technologie a révolutionné le domaine de l'IA car elle permet aux
machines de produire du contenu créatif et innovant sans intervention humaine directe. Les
acteurs clés dans le domaine de l'IA générative incluent des entreprises telles que OpenAI
et DeepMind, ainsi que des chercheurs et des développeurs travaillant sur des projets d'IA
générative.
L’IA générative diffère de l’IA classique, dans la mesure où elle se présente sous la
forme d’applications en libre-service. Elle vise à produire des réponses semblables à celles
que formulerait un humain. Par comparaison, l’IA classique fonctionne sur des tâches
spécifiques, de manière non interactive, comme dans les algorithmes qui s’acharnent à
détecter les fraudes bancaires.
• Dans le domaine de l'art, l'IA générative est utilisée pour créer des œuvres d'art
uniques et originales.
• En médecine, elle peut être utilisée pour générer des modèles de maladies et aider
à la recherche de nouveaux traitements.
• Dans le secteur du jeu vidéo, elle est utilisée pour créer des mondes virtuels et des
personnages réalistes.
• En finance, elle peut être utilisée pour prévoir les tendances du marché et effectuer
des investissements.
- Modélisation du langage masqué : une tache qui consiste à prédire les mots
masqués dans une phrase.
Figure 13 : un exemple de la modélisation du langage masqué
Les agents exécuteurs sont des systèmes ou des programmes qui effectuent des actions
spécifiques en réponse à des commandes ou des conditions prédéfinies. Ils sont capables
de comprendre, d'interpréter et de manipuler le langage naturel, ce qui leur permet de
réaliser des tâches telles que la communication avec les utilisateurs, la recherche et le
traitement d'informations, ou l'exécution de fonctions spécifiques dans diverses
applications. Ces agents peuvent être intégrés dans des systèmes plus larges pour
automatiser des processus, fournir une assistance, et améliorer l'efficacité des interactions
homme-machine.
IV Conclusion :
Dans ce chapitre, j'ai donné un aperçu du projet. Nous passons maintenant au
troisième chapitre où nous allons explorer les différentes solutions choisies pour la
réalisation du projet.
Chapitre III :
Recherche de solution
efficace
I Introduction :
Ce chapitre représente le commencement du projet. Il va contenir les différentes
solutions pour chaque tâche, et la solution choisie parmi elles selon le besoin.
II Premier plan :
II.1 Architecture :
Mon premier plan était de développer un agent simple qui recevra la requête et le
fichier CSV de l'utilisateur. Ensuite, il observera et proposera des prompts au LLM, qui
retournera de sa part la réponse qu’il apparait la meilleure. Si la réponse est correcte,
l'agent la retournera à l’utilisateur.
II.2.A Mistral 7B :
Pour ce projet, j'ai décidé de travailler avec Mistral 7B, un modèle que Mistral AI décrit
comme le meilleur modèle 7B à ce jour. De plus, il est reconnu pour surpasser les autres
modèles 7B en génération de code Python. Voici quelques informations sur le modèle :
• Approche les performances de CodeLlama 7B sur le code, tout en restant bon dans
les tâches d’anglais.
• GQA pour une inférence plus rapide.
• SWA pour gérer des séquences plus longues à moindre coût.
Pour améliorer les résultats de génération des modèles de Mistral, il est préférable de
placer les instructions entre <s>[INST] et [/INST]</s>. Cela permet au modèle de
reconnaître clairement les instructions et de mieux les intégrer dans sa réponse.
Il éxiste tant de test d’évaluation prédéfinit dans la plateform mais dans mon cas j’était
obligé de créer mon propre test. Voilà les critère d’évaluation que j’ai posé pour ce test :
Ensuite, j'ai créé 5 jeux de données avec lesquels je vais évaluer le Mistral 7B, qui sont:
jeu de données pandas, jeu de données scipy, jeu de données scikit-learn, jeu de données
matplotlib et jeu de données seaborn.
-Chaque ligne du dataset est structurée de la manière suivante :
-La réponse que nous recevons de l'évaluateur (dans notre cas ChatGPT), est généralement sous forme
de texte qui décrit la réponse de LLM et qui finit par donnée la note de la génération du LLM :
II.3.A LLamaIndex :
II.3.A.a Qu’est-ce que c’est LlamaIndex :
LlamaIndex est un Framework conçu pour faciliter l'intégration de données privées
ou spécifiques à un domaine avec LLM. C'est un cadre de données convivial et flexible qui
relie des sources de données privées et personnalisées à de grands modèles de langage.
LlamaIndex prend certaines données d'entrée que vous fournissez et construit un index
autour de celles-ci. Le concept principal derrière LlamaIndex est la capacité d'interroger des
documents, qu'ils soient constitués de texte ou de code, en utilisant un modèle LLM tel que
ChatGPT.
Résultats :
• Il travail uniquement avec pandas ce qui rend son travail trop limité on aimera bien
qu’il travaille avec d’autre bibliothèque comme matplotlib, scipy....
• Parfois, Il ne retourne pas les résultats demander par l’utilisateur.
II.3.B PandasAI :
II.3.C Langchain :
II.3.C.a Qu’est-ce que c’est Langchain :
LangChain est un Framework open-source conçu pour simplifier la création
d'applications utilisant LLMs. Il fournit une interface standard pour les chaînes et de
nombreuses intégrations avec d'autres outils. Les cas d'utilisation de LangChain recouvrent
largement ceux des modèles de langage en général, y compris l'analyse et la synthèse de
documents, les chatbots et l'analyse de code. Il est conçu pour connecter un modèle de
langage à d'autres sources de données et lui permettre d'interagir avec son environnement.
III.1 Architecture :
Le deuxième plan contient quelques modifications par rapport au premier plan. Cette
fois, j'ai décidé de créer un agent personnalisé en utilisant des chaînes de Langchain. Voici
l'architecture du deuxième plan :
III.2.A Définition :
La bibliothèque Langchain contient un module de chaînes qui permet le traitement
séquentiel des données linguistiques. Ce module permet aux utilisateurs de créer un
pipeline de tâches de traitement du langage, telles que la tokenisation, l’analyse syntaxique
et l’analyse sémantique, qui peuvent être appliquées aux données textuelles pour en
extraire le sens, le contexte et la structure. En enchaînant ces tâches, la bibliothèque
facilite le développement d’applications complexes de traitement du langage naturel (NLP)
avec plus de facilité et de flexibilité.
III.2.B Les types des Chaines :
III.2.B.a LCEL chaînes :
Les chaînes LCEL sont une manière plus avancée et structurée de définir et d'exécuter une
séquence de composants ou d'opérations dans Langchain. Cette approche permet une
conception plus modulaire et flexible où différents composants peuvent être combinés pour
traiter la sortie des modèles de langage de manière plus sophistiquée.
Dans mon projet, j'ai utilisé une chaîne de type Legacy : Conversational-
RetrievalChain, en raison de sa forte correspondance avec le cahier de charge posé.
III.3.A Définition :
RAG est une architecture de modèle de traitement du langage naturel qui combine
deux composants clés : un système de récupération d'informations (le retriever) et un
modèle de génération de texte (le generator). Cette approche est utilisée pour améliorer la
capacité d'un modèle à générer des réponses informatives et pertinentes en se basant sur
un ensemble de documents de référence ou une base de connaissances externe.
Une fois les vecteurs obtenus à partir des données du CSV, j'ai mis en place un
magasin de vecteurs avec FAISS, une bibliothèque spécialisée dans la recherche rapide et
efficace dans de grands ensembles de données.
Pour la recherche de similarité, cela fait partie du ConversationalRetrievalChain. Il
lance la recherche des lignes similaires en utilisant un prompt, puis le LLM retourne les
lignes les plus ressemblantes à la requête.
IV Conclusion :
Dans ce chapitre, j'ai expliqué mes choix pour le projet. J'ai aussi partagé les plans que
j'ai réalisé et les résultats obtenus pour chacun. Le prochain chapitre présentera les ajouts
que nous avons faits pour terminer le projet.
Chapitre IV :
II.1 Architecture :
Dans notre solution finale, voici comment ça se passe : Tout d'abord, l'utilisateur
télécharge un fichier CSV et tape une requête. Ensuite, le CSV est transformé en une liste
de données et une base de données vectorielle. Ensuite, ces deux éléments sont intégrés
dans notre processus principal avec la requête. Ensuite, grâce à notre modèle de langage,
nous obtenons une réponse. Si cette réponse ne contient pas de code, elle est directement
renvoyée à l'utilisateur. Mais si elle contient du code, nous l'extraions et vérifions s'il est
exécutable. Si c'est le cas, nous renvoyons à l'utilisateur la réponse ainsi que le résultat de
l'exécution du code. Sinon, nous essayons de corriger le code deux fois avec une chaîne
de correction. Si cela ne fonctionne toujours pas, nous passons à notre chaîne finale, qui
est celle d'explication. Elle informe simplement l'utilisateur de l'erreur rencontrée.
II.2.A Type :
Pour la chaîne principale, je l'ai créée avec ConversationalRetrievalChain après
avoir observé les bons résultats obtenus avec celle-ci.
II.2.B Entrée :
• Requête : L'élément clé de la chaîne principale est la requête. C'est ce que
l'utilisateur saisit pour obtenir une réponse ou une solution. Cette requête peut être
une question, une demande d'assistance ou tout autre type d'interaction. Elle est
essentielle car elle guide le processus de génération de réponse et détermine la
qualité et la pertinence de la sortie. Nous nous assurons que la requête est bien
comprise et traitée de manière appropriée à chaque étape de notre pipeline,
garantissant ainsi une réponse précise et utile à l'utilisateur.
• Base de données des vecteurs : Une autre entrée de la chaîne principale est la
base de données des vecteurs. Cette base de données contient une représentation
vectorielle des données pertinentes pour la tâche en cours. Ces vecteurs capturent
les informations essentielles des données, permettant au modèle de langage de
mieux comprendre le contexte et de générer des réponses plus pertinentes.
II.2.C Sortie :
Dans certains cas, la réponse que la chaîne donne est juste du texte, ce qui peut
suffire pour des questions simples. Mais si la question demande du code, alors l'agent
essaie d'en générer pour répondre à la demande.
II.2.D Latence :
II.3.A Type :
La chaîne de correction, je l'ai créée avec LLMChain, qui est la chaîne la plus
simple de Langchain. Je l'ai choisie pour éviter la latence.
II.3.B Entrée :
• Code généré : La première entrée de la chaîne de correction est le faux code
généré par la chaîne principale, permettant ainsi à cette dernière de s'appuyer sur ce
code pour faciliter la tâche de correction.
II.3.C Sortie :
La sortie de la chaîne de correction, c'est simplement la correction du code venant
de la chaîne principale. Cela assure que le code final soit juste et fonctionne bien. La
chaîne de correction détecte et corrige les erreurs.
II.3.D Latence :
II.4.A Type :
Comme la chaine de correction la chaine d’explication, je l'ai créée avec LLMChain,
pour éviter la latence.
II.4.B Entrée :
• Code généré : Tout comme dans la chaîne de correction, la première entrée de la
chaîne d’explication est le code généré. Cependant, contrairement à la correction,
cette fois-ci, la chaîne d'explication ne cherche pas à corriger le code, mais plutôt à
l'analyser et à le comprendre.
II.4.C Sortie :
La sortie de la chaîne d'explication fournit des explications détaillées sur le code
créé. Cela aide à comprendre les éventuelles erreurs dans le code, souvent dues à la
structure du dataframe. Ainsi, l'utilisateur peut chercher d'autres requêtes pour répondre à
ses besoins.
II.4.D Latence :