Pour mener à bien mon projet, il me fallait apprendre et implémenter le concept de RAG (Retrieval Augmented Generation).
Pour faire simple, il s’agit d’utiliser un modèle d’IA non pas à partir de son apprentissage initial, mais d’utiliser un contexte plus spécifique fourni par des fichiers privés. Ma première idée était de converser avec mes emails en utilisant un modèle. Au départ, plus facile à dire qu’à faire.

Avant toute chose, je commençais par utiliser un simple fichier texte, sous format PDF, afin de faire un premier test. Mais première question, comment proposer ce fichier au modèle ? Où le stocker et de quelle façon ? Mes lectures faisaient mention de base de données vectorielle, aussi j’entrepris d’en apprendre plus sur ce sujet.
Une base de données vectorielle est souvent utilisée en association avec un modèle d’IA, car elle permet des recherches rapides et pertinentes. En effet, avec l’utilisation d’une telle base, les mots sont « vectorisés », ils sont transformés en représentations numériques, où les vecteurs de mots ayant des significations ou des contextes similaires se retrouvent proches les uns des autres. Par exemple les mots d’une même famille auront des « nombres » plus proches. Cela facilite la récupération d’informations pertinentes pour répondre aux questions posées, on parle de « distance » entre les mots.
Deuxième question, comment « vectoriser » les mots et plus particulièrement un fichier en entier ?
(Vous pouvez trouver des tutos ici : Vector Search and RAG Tutorial – Using LLMs with Your Data, Use Vector Embeddings to Create an AI Assistant)
J’appris alors un des sujets centraux du RAG et des LLMs en général, la façon de vectoriser les mots grâce aux modèles d’«embedding». Dans le même ordre que les LLMs, les modèles d’embedding sont nombreux et complexes, certains utilisent des réseaux de neurones simples, d’autres factorisant des matrices de cooccurrence de mots et d’autres utilisent des modèles existant en apportant une fonctionnalité supplémentaire. Dans tous les cas, pour ne pas m’éparpiller et rester concentré sur le sujet du moment, je choisi d’utiliser un des modèles disponibles, quitte à y revenir plus tard.

Mais ce n’était pas terminé, j’appris également que les modèles d’embedding, dû à des restrictions techniques, ne vont pas prendre le texte entier pour vectoriser les mots, il y a encore un autre concept, le « chunking » (ou fragmentation en Français). Comme son nom l’indique, il s’agit de découper le texte en morceau.
En effet, les modèles d’embedding sont limités à un nombre de caractères maximal pour vectoriser, ils doivent donc utiliser plusieurs petits morceaux plutôt qu’un seul. Il y a également une problématique de performance, les morceaux peuvent être plus ou moins gros, ce qui permet d’adapter la granularité afin de faire ressortir un contexte plus ou moins précis. Bon, je choisis une nouvelle fois les paramètres par défaut afin de pouvoir avancer sur mon projet.
Après toutes ces recherches et de nombreuses erreurs de code plus tard, j’arrivais donc aux deux schémas suivants : Fichier d’entrée PDF -> Chunking -> Embedding -> Ajout dans la base. Puis pour la réponse du LLM : Poser une question -> LLM -> lecture dans la base -> ajout du contexte fourni par le fichier -> réponse.
J’appris également que ces deux schémas sont appelés « ingestion de données » et « inférence ». Le nom ingestion de données va de soi, celui d’inférence un peu moins, c’est la partie de l’application qui propose une réponse à la question posée.
Il ne me restait plus qu’à mettre tout ça en place, je choisis mon fichier PDF, et je lançais mon script, il ne me restait plus qu’à poser une question. Et quelle fut ma surprise par la réponse du LLM, claire, nette et précise. Il fallait parfois que les questions posées fussent mieux formulées, mais ça marchait !

Aussi bien pour résumer le fichier que pour extraire des informations spécifiques, le LLM trouvait la réponse et me la donnait sans manquer le contexte. Il ne me restait plus qu’à télécharger mes emails, les ajouter dans la base et poser mes questions !
J’avais réussi à faire ce premier projet LLM/RAG en utilisant un fichier texte, j’étais satisfait. Je me remis à la tâche remplie d’enthousiasme, j’avais réussi à avancer. Je voulais concrétiser ce prototype, je commençais alors une deuxième étape.
Et oui, il m’apparut assez rapidement que ce ne serait pas aussi simple qu’avant et qu’il allait bien s’agir d’un deuxième projet. Parce qu’en effet, après avoir téléchargé mes emails dans un fichier Excel et réutilisé les schémas précédemment cités, la réponse : ça marchait pas ! Le LLM était flou et imprécis. Les réponses manquaient clairement de contexte.
Pourquoi ? La réponse au prochaine épisode !