GenAI : exemple de conception de RAG

La génération de texte par IA est je pense une révolution qui n’a fait qu’effleurer le SEO encore : les RAG, encore rares/peu utilisés, vont profondemment tout bouleverser.

Rappel : qu’est-ce qu’un RAG ?

Pour rappel, RAG, « Retrieval Augmented Generation » est une technique consistant à exploiter une base de données pour concevoir le contexte qui sera envoyé au modèle (LLM, Large Language Model).

C’est différent de simplement envoyer toute la base de donnée : vous n’envoyez que les blocs d’information pertinents. Beaucoup de modèles ont une fenêtre de contexte limitée. Ainsi, vous ne pouvez envoyer qu’environ 4000 tokens (~3000 mots) à Llama3.2.

Voilà un petit schéma :

Les étapes d’un RAG

Pour concevoir un RAG, vous avez 3 éléments basiques.

  • L’élaboration de votre base de donnée : il faut découper la base de donnée en petits bouts (« chunks »), les encoder et les passer dans une base de donnée (Chroma ou Faiss sur python).
  • La récupération (le retriever), qui va identifier les « chunks » encodés les plus proches de la question et les décoder.
  • Enfin, le chat LLM.

Comme pour beaucoup de choses, c’est la première étape qui est la plus difficile et la plus cruciale.

Prélude : premiers essais

L’antéconcept

On va commencer simple, avec juste mon livre sur l’Antéconcept, parce ce mot est propre à ce livre. À la réponse « qu’est-ce qu’un antéconcept ? », on obtient une bonne réponse (« Selon les extraits fournis, l’antéconcept est une dissimulation inconsciente et évolutive de la réalité destinée à répondre à un stress pour préserver la structure normative de l’acteur. Cela signifie que l’antéconcept est une mécanique mentale qui permet à l’individu de s’adapter à des situations difficiles en créant un récit ou un discours qui détourne l’attention de la réalité sous-jacente et conserve ainsi l’intégrité de sa structure normative. »)

Néanmoins, si je lui demande ce qu’est un méta-antéconcept ou les liens entre l’antéconcept et l’antisémitisme, là ça patauge. Pourtant, le terme apparaît clairement p.62, p.102, etc.

J’ai donc choisi d’augmenter le nombre de chunks transmis. Là on était à 3, passons à 10.

La définition est encore meilleure : « Selon le texte fourni, l’antéconcept est une dissimulation inconsciente et évolutive de la réalité destinée à répondre à un stress pour préserver la structure normative de l’acteur. C’est une mécanique inhérente à la raison qui permet à l’individu d’éviter de déconstruire son antéconcept, en le protégeant de la conscience. En d’autres termes, l’antéconcept est un système mental qui permet à l’acteur de maintenir une image idéalisée ou fausse de la réalité pour éviter de s’affronter aux difficultés réelles. Cela peut être utilisé comme une forme de protection ou de compensation face au stress, mais cela peut également avoir des conséquences négatives si l’individu ne parvient pas à identifier et à gérer ses antéconcepts. »

Il arrive beaucoup mieux à répondre à la seconde question : « Selon la citation, il y a un lien étroit entre l’antisémitisme et l’antéconcept. L’auteur propose de parler d' »méta-antéconcept » pour désigner ce lien. Cela signifie que même si les antisémites disparaissent, l’antisémitisme en tant que concept ne disparaîtrait pas, car il a laissé des traces et participe à créer un contexte qui est accessible à d’autres acteurs qui peuvent s’en emparer et le reprendre à leur compte. » Néanmoins, la première question reste sans réponse : il ne sait toujours pas ce qu’est un méta-antéconcept. Monter le nombre de chunks à 20 ne change rien.

D’autres questions assez vagues, comme « Quel est le lien entre antéconcept et management ? » ont des réponses assez moyennes. Questionné sur les citations que j’utilise (ex: « quelles sont les citations de Karl Popper ? »), je n’ai pas de réponse. Idem avec d’autres modèles comme mistral:7b et mistral:7b-instruct. D’autres questions plus précises, comme « Dans quelle mesure peut-on parler d’antéconcept à propos de ce que décrit Dujarier dans Le management désincarné ? » donnent une bonne réponse.

Là on a fait un bon premier tour, mais je me suis demandé : et si on changeait la taille des « chunks » ? Là on avait des chunks qui faisaient 500 tokens. La citation de Popper est d’ailleurs coupée en deux : « raisonnons principalement par induction, mais ce mécanisme est imparfait : on a l’impression que le soleil se lève chaque matin comme tous les autres matins, alors qu’il est chaque fois différent et qu’un jour, il ne se « lèvera » pas (mais il n’y aura personne pour en être témoin). Nos observations reposent sur nos outils et méthodes d’observation. On se rappellera alors de ce qu’écrivait Karl Popper (1998) : « Il convient, selon moi, de renoncer à cette idée des sources » [elle est tronquée là, en réalité elle fait plusieurs lignes].

J’ai donc augmenté la taille des chunks, passant de 500 à 1500. J’ai vérifié et on a bien la citation complète. Néanmoins, s’il arrive à la retrouver (parfois, avec certaines formulations le LLM hallucine), il n’arrive pas à la reproduire. Il ne réussit pas mieux la recherche de la notion de méta-antéconcept.

On touche donc aux limites du modèle pour cet usage, qui est très spécifique. En effet, il s’agit de notions et de liens qui sont propres à mon livre. Essayons donc avec un ouvrage plus grand public, dont le propos est plus normé : le rapport du GIEC.

Le rapport du GIEC

Un RAG multi-étapes

J’ai un PC costaud, mais pas assez pour faire tourner un LLM de 175 milliards de paramètres. J’utilise Llama3.2, qui n’accepte que 4096 tokens, donc je dois bien sélectionner ce que j’envoie. Comme base de donnée, j’ai utilisé 9 de mes livres, chacun faisant entre 100 et 250 pages (~20K-50K tokens).

RAG en une étape

Je les découpe par page, chaque page est encodée dans une base Chroma. Le retriever récupère 5 chunks et j’ai ma réponse.

Le résultat est assez boaf. Il répond correctement à une question précise, comme « Qu’est-ce que l’antéconcept ? », mais patauge dès que la question n’a pas une réponse précise dans le texte existant (« Comment le danger des agrégats s’applique dans l’éducation ? »).

Je tente de faire un résumé court de chaque page (ce qui prend littéralement 2h), mais le retriever n’a pas réussi à les utiliser correctement et les résultats sont pire.

Le problème est que les RAG ont du mal avec les questions trop générales, c’est surtout idéal pour des trucs comme le service client (ex: Iadvize). Mais je n’abandonne pas.

Rag en plusieurs étapes

L’approche précédente étant une impasse, j’ai imaginé un système en plusieurs étapes :

  • La question est envoyée à un premier RAG qui se réfère aux livres et à leur résumés. Il découpe la question en plusieurs sous-questions.
  • Chaque sous-question est envoyée à un RAG qui se réfère aux chunks et va générer une réponse.
  • Les réponses sont rassemblées dans un dernier appel simple au modèle qui va les synthétiser.

Je ne sais pas si ça va marcher mais cette logique dite « RAG multi-étapes » ou « Retrieval Cascade » est séduisante. Néanmoins, cela repose sur l’élaboration de résumés.

Les livres : une galère infernale

Le problème est qu’on est sur des livres, dont des formats longs qui ne passent pas d’un coup. Donc il faut être malin. J’ai pris les 4000 premier tokens et les derniers, mais ça ne marche pas : le LLM n’arrive pas à se concentrer sur l’introduction et en conclusion il prend surtout la bibliographie, ce qui le fait vriller. Je tente ensuite une logique RAG classique et les résultats sont … Catastrophiques.

Voilà un exemple avec Gemma:2b :

    "Agribashing 19-05-2021 AB 3-05-2021.pdf": {
      "Titre": "L'agribashing : une violence qui se prétend légitime",
      "Auteur": "Alexandre Baumann",
      "Année": "2021",
      "Résumé": "**Glyphosate: A Controversial History and Legacy** **Introduction:** Glyphosate is a widely used herbicide that has been extensively used in agriculture for over 50 years. However, its use has been associated with various health and environmental concerns. This paper examines the history and legacy of glyphosate, including its environmental impact, health risks, and the debate surrounding its safety. **Environmental Impact:** * Glyphosate is a potent herbicide with a long persistence in the environment. * It can contaminate water sources, soil, and air. * It is particularly harmful to aquatic life, especially fish. * Glyphosate residues have been found in human blood and other environmental matrices. **Health Risks:** * Glyphosate has been linked to several health problems, including cancer, reproductive issues, and developmental disorders. * Studies have shown an increased risk of non-Hodgkin lymphoma and other cancers in people who live near agricultural areas or use glyphosate-treated products. * Glyphosate exposure can also cause kidney damage and other health problems. **Debate:** * Proponents of glyphosate argue that it is a safe and effective herbicide that has saved millions of lives. * Opponents argue that its health risks outweigh its benefits and that its use should be restricted or banned. **Legacy:** * Glyphosate is one of the most widely used herbicides in the world. * Its legacy is complex, with both benefits and risks associated with its use. * Ongoing research and debate continue to evaluate the safety and environmental impact of glyphosate. **Conclusion:** Glyphosate is a controversial herbicide with a long and complex history. While it has been used effectively for agricultural purposes, its potential health risks and environmental impacts have raised significant concerns. The debate surrounding its safety and future use is likely to continue."
    }, 

Je retente avec Llama3.2. C’est un peu mieux, certains passages sont même ok, mais l’ensemble reste inexploitable.

"Agribashing 19-05-2021 AB 3-05-2021.pdf": {
      "Titre": "L'agribashing : une violence qui se prétend légitime",
      "Auteur": "Alexandre Baumann",
      "Année": "2021",
      "Résumé": "La liste des sources fournie semble être un ensemble de articles et d'études variées sur divers sujets liés à l'agriculture, l'environnement et la santé humaine. Voici quelques observations et réflexions sur ces sources : 1.  **Variété des thèmes** : Les sources traitent de sujets très divers, allant de l'efficacité des OGM (Organismes Genétiquement Modifiés) à la toxicité des néonicotinoïdes, en passant par les impacts environnementaux des monocultures et le risque de cancer lié aux herbicides. Cela montre que ces sujets sont très importants et nécessitent une approche globale pour être pleinement compris. 2.  **Études scientifiques** : La plupart des sources sont des articles d'étude ou de recherche, ce qui est excellent car ils apportent des preuves concrètes sur les sujets abordés. Ces études sont souvent menées par des universitaires et des chercheurs expérimentés dans leurs domaines respectifs. 3.  **Sources éthiques** : Une grande majorité de ces sources proviennent de réputées institutions académiques, publications scientifiques réputées et sites web d'information crédibles. Cela indique une certaine qualité des recherches et analyses présentées. 4.  **Diversité des opinions** : Bien que les sources soient majoritairement axées sur des aspects positifs ou neutres (par exemple, l'efficacité des OGM dans certains contextes), il y a aussi des articles qui soulignent les problèmes et impacts négatifs liés à certaines pratiques agricoles. Cela montre que le sujet est complexe et nécessite une approche nuancée. 5.  **Évolution de la recherche** : Les dernières sources apparaissent être plus récentes (2019-2020), indiquant qu'il y a des développements actuels dans les domaines de recherche concernés. Cela suggère que les connaissances scientifiques évoluent et qu'il est important de suivre ces progrès pour avoir une vision claire du sujet. 6.  **Publications académiques** : Le fait que la plupart des sources soient des articles d'études ou de recherches publiées dans des revues académiques ou des sites web universitaires indique qu'elles sont considérées comme fiables et à haut niveau par le communauté scientifique."
    },

Voyez quand je vous disais que la première phase était la plus dure … Du coup, il va falloir utiliser le cheatcode : GPT5.

En effet, il est possible de concevoir des systèmes