Connexion Premium

IA générative : le RAG par l’exemple, avec 15 000 actus Next et Mistral 7B

Ça fait raguer mon Mac !

IA générative : le RAG par l’exemple, avec 15 000 actus Next et Mistral 7B

Nous avons passé à la moulinette du RAG le contenu de plus de 15 000 actus publiées sur Next ces dix dernières années. Le but ? En donner ensuite des morceaux à une IA générative pour qu’elle adapte ses réponses. Nous avons tout fait en local, sur un MacBook Pro avec Ollama et Mistral 7B.

Le Retrieval-Augmented Generation, ou génération augmentée par récupération en français, est une technique permettant à des IA génératives d’utiliser une base de connaissances pour répondre à des prompts. On utilise aussi très souvent son acronyme pour en parler : RAG.

Rag dans ma machine

Après les explications techniques et son principe de fonctionnement, nous vous proposons un exemple pratique. Nous avons récupéré le contenu de plus de 15 000 articles de Next sur une dizaine d’années pour l’associer à Mistral 7B, un LLM libre de 7,3 milliards de paramètres (sorti en 2023, désormais loin des ténors du moment qui ont au bas mot des centaines de milliards de paramètres, voire des milliers pour certains), sous licence Apache 2.0. Le RAG est agnostique du modèle d’IA générative, nous aurions évidemment pu en prendre un autre.

Dans notre cas, un traitement local était impératif. Nous avons utilisé un MacBook Pro avec un SoC M2 et 16 Go de mémoire partagée. Mistral 7B tourne dessus sans problème, avec de la marge pour exécuter d’autres applications en même temps. Côté logiciel, nous avons installé Ollama (open source, licence MIT). Nous l’avions déjà présenté dans un précédent tuto sur l’influence du GPU dans les performances des IA génératives.

Si les explications techniques ne vous intéressent pas, sautez directement à l’inter : « Concrètement, ça donne quoi d’utiliser le RAG ». Vous aurez des exemples de réponses à des prompts sur Mistral 7B avec et sans RAG (en local dans les deux cas).

Sous le capot pour la partie technique : Ollama, Mistral et Nomic

Passons rapidement (mais pas trop) sur les détails techniques, dont voici les grandes lignes : on télécharge le modèle d’IA générative avec la commande ollama pull mistral puis un autre modèle pour transformer le texte de nos actus en vecteurs (des nombres, qui sont ensuite utilisés par les algorithmes des IA génératives) avec ollama pull nomic-embed-text (on parle aussi d’embedding).

Un petit script permet de découper automatiquement le texte en plusieurs morceaux (chunks) qui sont ensuite transformés en tokens via nomic-embed-text. Cette indexation ne doit se faire qu’une seule fois. Dans notre cas, elle a pris environ trois heures (sur le MacBook Pro M2 avec plus de 15 000 articles). Pour ajouter de nouveaux articles par la suite, pas la peine de tout réindexer, il suffit de passer à la moulinette les nouveaux textes.

Passons aux choses sérieuses avec le déroulement d’un prompt. Le prompt est vectorisé, puis comparé à tous les vecteurs des morceaux des articles de notre base. Nous gardons les 10 meilleurs ; qui sont ensuite envoyés à Mistral en même temps que le prompt. Mistral va donc élaborer sa réponse en s’appuyant sur ses connaissances et les 10 morceaux des actus de Next.

On peut affiner le prompt pour lui demander de n’utiliser que les données de Next par exemple. Après, c’est un modèle statistique (comme toutes les IA génératives), donc statistiquement, il fait parfois n’importe quoi ; rien de neuf sous le Soleil.

Concrètement, ça donne quoi d’utiliser le RAG

Pour nos tests, nous utilisons donc Ollama sur notre MacBook Pro, sans aucune connexion à Internet, toutes les opérations se faisant en local.

Voici quelques prompts et les réponses de Mistral, avec ou sans RAG. Rappel important : nous n’avons pas spécialement cherché à optimiser les réponses (le prompt passé à Mistral avec le contenu des actualités jugé le plus intéressant pourrait être amélioré).

Nous vous proposons huit prompts, sur le logiciel, le droit, les réseaux sociaux, le hardware, l’informatique quantique… Les réponses sont, pour rappel, statistiques et peuvent donc par définition être totalement différentes pour un même prompt répété plusieurs fois. Nous livrons ici la première réponse proposée par l’IA générative.

Si vous avez des idées de prompts à tester, n’hésitez pas à les proposer en commentaire, suivant les cas je pourrai les lancer et donner les résultats dans une prochaine actualité

Passons aux choses sérieuses avec une première question soulevée par Vincent (il a la réponse, j’en suis certain ) ! Mais il est curieux de voir le résultat avec ou sans le contenu des actualités de Next… qu’il a pour la plupart rédigées.

Puis-je avoir une synthèse des défauts de Windows 11 ?

Réponse de Mistral avec RAG sur les actus Next :

Il reste 72% de l'article à découvrir.

Cadenas en colère - Contenu premium

Soutenez un journalisme indépendant,
libre de ton, sans pub et sans reproche.

Accédez en illimité aux articles

Profitez d'un média expert et unique

Intégrez la communauté et prenez part aux débats

Partagez des articles premium à vos contacts

Commentaires (42)

votre avatar
Que donnent ces questions ?
Quelle puissance d’émission il faut pour communiquer avec un satellite qui se trouve à plus de 300Km ?
Il n'y a pas de problème ?
Il faut je pense ajouter du contexte en précisant avant :
On parle de plus en plus de communications des smartphones avec des satellites en orbite basse.
votre avatar
Maintenant, plus qu'à remplacer la barre de recherche par un chatbot qui tourne sur la machine de Sébastien :-D
votre avatar
Il n'y a qu'à faire un coup de RAG à @Ness_01 .

En fait, je m'étais fait un peu la même réflexion en lisant le titre de l'article : chic, si les abonnés peuvent avoir accès à un outil de ce type sur Next.
votre avatar
Un tel outil aurait sans doute un intérêt sur Next puisqu'on a des archives volumineuses avec beaucoup d'articles très denses.

Maintenant, serait-il de nature à convaincre des lecteurs (nouveaux ou anciens) de franchir le pas de l'abonnement ?
votre avatar
Ça peut être une option réservée aux abonnés pour le coup, histoire d'en supporter aussi le coût.

Après, reste toujours la bonne vieille option du site:next.ink dans un moteur de recherche et se palucher les résultats.
votre avatar
Ce serait intéressant pour rechercher et mettre en contexte, avec des citations des articles. Une sorte de moteur de recherche. Tenter un POC pour voir l'adoption ?
votre avatar
Je pense qu'améliorer la barre de recherche peut être pertinent (elle est un peu lente et ne trouve que si on utilise les termes précis de l'article), mais par pitié ne faites pas un chatbot !

L'idéal je pense serait une barre de recherche où, lorsqu'on tape "protocole domotique mesh" sorte les articles sur Zigbee ou Matter, même si c'est pas un terme qui est exactement présent dans le titre/corps de l'article. Juste une barre de recherche boostée aux hormones avec les technologies du RAG (donc un RAH (Retrieval-Augmented Human) ?).

On en a discuté un peu sur le Discord : je rêve d'un moteur de recherche où on peut taper "film de cambriolage avec Clooney" et que ça nous sorte direct la trilogie "Ocean" (DuckDuckGo avec cette recherche sort les filmographies de Clooney mais c'est tout - Google y arrive à peu près), mais sous forme d'un moteur de recherche, pas d'un chatbot.

Pensez à utiliser du souverain si jamais :p
votre avatar
Si on devait explorer cette voie (et je dis bien "si"), on tiendrait compte de ces avisés conseils :D
votre avatar
Je fait déjà assez chaud chez moi, laissez ma machine tranquille !!! :xzombi:
votre avatar
"On dit chiffrer ou crypter ? Explique-moi pourquoi un seul des deux est correct" c'est pour troller ?? hein...
et l'IA qui ne donne pas la véritable raison: chiffrer est le faux-amis de crypter.
chiffrer vient du latin, utiliser des chiffres pour coder un message
crypter vient du grec et forme le mot "to encrypt"

La différence est simple, il est possible de décrypter un message (rendre lisible un message dont on ne connait pas la clef, cassé le chiffrement) mais il est impossible de "crypter" un message car cela revient à transformer un message lisible en message chiffré sans connaitre la clef, c'est philosophique.
votre avatar
Il me semblait que crypter c'est transformer une donnée en une autre, opération réversible si on connait l'algorithme.
Tandis que chiffrer, c'est hacher ou hasher, c'est à dire qu'on ne peux pas revenir à la donnée d'origine.
Est-ce correct ?
votre avatar
non, c'est plutôt l'inverse. chiffrer est réversible et crypter n'est pas possible car il y a un notion de "secret". Il est impossible de chiffrer un message si tu ne connais pas la clef.
contrairement à l'anglais où: "to encrypt" -> chiffrer en français, aucune notion de secret.
votre avatar
Pourquoi ne pas tester avec un LLM de pointe, même libre ? On est censés s'étonner que Mistral 7B raconte n'importe quoi ?
La démonstration serait bien plus percutante avec un DeepSeek V4 Pro ou GLM 5.2 censés été bcp plus forts par exemple.
votre avatar
L’idée c’est de comparer avec et sans RAG, pas nécessairement de démontrer les perfs d’un modèle de pointe !
votre avatar
Et il faut aussi pouvoir charger en local un modèle plus gros… @Ferd a dit non pour un DGX POD en note de frais
votre avatar
Faut dire que les notes de frais se font rares cet été.
votre avatar
Faut dire que ça fait juste une semaine que l'été a commencé ;) Il reste encore 2 mois 1/2 !! On a le temps d'avoir froid :D
votre avatar
Tu fais quand même bcp de commentaires sur le fait que Mistral est "aux fraises", fait des "réponse générique" qui "reprend le discours officiel largement porté par les géants du secteur, sans aucune mise en perspective", "fait n'importe quoi", est "sans réelle profondeur" et sort du "boubligoulba".
Avoue que l'effet aurait été gâché et le LLM bashing moins impressionnant si tu avais eu de meilleures réponses, ce qui aurait été un peu plus probable avec un meilleur modèle.
D'ailleurs pourquoi interroger un LLM en local si c'est juste pour poser des questions simples ?
Franchement, depuis quelques temps déjà, la ligne éditoriale est devenue en grande majorité des articles pour nous dire combien l'IA, ses datacenters, ses entreprises, ses patrons, etc sont horribles et vont tous nous perdre. Y a bcp à dire, reprocher, critiquer certes, mais là c'est devenu vraiment les gros sabots.
Bref, j'adore Next et votre travail (je suis là depuis 2004) mais je pense que vous pourriez regagner un peu de crédibilité sur l'IA (générative) en vous montrant un peu moins partiaux peut-être, pas toujours tout ramener à l'IA, y a d'autres sujets tech aussi.
votre avatar
Perso je le comprends plutôt comme une façon de mieux illustrer l’intérêt du RAG grâce à un contraste forcément plus marqué avec un vieux modèle (et présenté dès le début comme tel, sans aucun bashing imho).
Si on avait utilisé les derniers modèles pour ce test, la différence avec un modèle enrichi aurait été beaucoup moins facile à mettre en évidence sur des thématiques relativement généralistes comme celles traitées sur Next (comparé à des entraînements sur des datasets métier).

Sinon merci de nous adorer 🥰
votre avatar
J’allais répondre pareil, mais je me uis fait grilled… Effectivement, l’idée n’est pas du tout de « tester » Mistral 7B, mais de voir l’intérêt du RAG avec les actus Next.

« D'ailleurs pourquoi interroger un LLM en local si c'est juste pour poser des questions simples ? » -> Car il était pour moi hors de question d’envoyer les 15 000 actus Next en intégralité sur un cloud. C’est aussi l’occasion de rappeler l'existence d’Ollama (qui a eu droit à son tuto) et de son fonctionnement.

Et concernant les autres sujets tech je ne peux être que d’accord, et on ne parle pas que d’IA (même si elle occupe une place importante, comme dans le monde numérique). Sur Next on parle d’ailleurs de bien d’autres choses que l’IA, je fais également bien d’autres tests/vulgarisations/exemples sur d’autres sujets que l’IA :)

Merci de nous adorer :love: C’est réciproque :chinois:
votre avatar
Car il était pour moi hors de question d’envoyer les 15 000 actus Next en intégralité sur un cloud.
Pis elles doivent déjà être dans les dataset d'OpenAI et compagnie, donc ça aurait faussé le résultat :p
votre avatar
C’est possible, mais c’est pas une bonne raison pour autant de tout envoyer n’importe oui :D
votre avatar
Pour ce qui n'est pas accessible sans abonnement, je ne vois pas trop comment ça y serait.

(J'ai bien compris l'ironie)
votre avatar
Pour ce qui n'est pas accessible sans abonnement, je ne vois pas trop comment ça y serait.
L'abnégation d'un abonné zélé qui a cliqué 15 000 fois sur "Offrir cet article".
votre avatar
L'expérience est intéressante, merci de l'avoir partagée.
De mon point de vue, un outil qui à partir d'un prompt, donnerait uniquement les liens vers les articles serait plus fiable.
Je ne dirais pas ça si le taux d'erreur était proche de zero.
votre avatar
Puis-je avoir une synthèse des défauts de Windows 11 ?

Donne-moi la liste de 20 articles de Next.ink me permettant de répondre à cette question.
votre avatar
Oui.
Seulement si je lis la synthèse, je risque de ne pas visiter les liens et repartir avec des informations fausses.
Et si je visite les liens, ça sera potentiellement avec un avis erroné, ce qui m'engendrera une fatigue inutile lorsque je lirai les infos contradictoires avec la synthèse.
Bref, les liens me suffisent.
votre avatar
un moteur de recherche ?
votre avatar
Presque.
Sauf que la recherche ne serait pas basée sur des mots clés mais une réelle analyse du prompt.
Une sélection de passages dans les articles pourrait également être utile.
Mais pas de résumé ou d'analyse tant qu'on n'est pas à quasi zero erreur.
votre avatar
Puis-je avoir une synthèse des défauts de Windows 11 ?
Je suis surpris du rang des réponses s'appuyant sur Next :
7. Les incompatibilités avec les configurations d’ordinateurs existantes ont été critiquées, en particulier l’exigence d’un processeur récent et la présence d’une puce TPM 2.0.
8. L’attitude de Microsoft sur la fin de vie de Windows 10 risque d’entraîner un vaste problème mondial de sécurité, en particulier puisqu’environ 54 % du parc Windows est encore constitué de Windows 10.
vu le nombre de fois que des articles en parlent sur Next.
votre avatar
Et si on ajoute les commentaires dans la base, cela donne quoi ? :D
votre avatar
Ça donne que la machine va exploser à cause de l'historique de @fred42
votre avatar
Attention, tu n'es pas très loin : ton nombre de commentaires est de 82 % du mien ! :langue:
votre avatar
La GavCave en tremble :stress:
votre avatar
C'est sûr qu'l va être difficile de condenser tout ça en quelques dizaines de kilo-octets. :-D
votre avatar
On est donc bien d'accord qu'un RAG sert à donner la bonne réponse à un LLM puis s'en extasier
votre avatar
C'est clair maintenant. Sans influenceur externe, Mistral tranche clairement pour crypter.
Ici tout le monde va être d'accord avec ça, c'est certain. Il pouvait aussi donner une autre bonne réponse (et c'est la meilleure sur ce sujet) : 42.

Pour ceux qui ont soif :tchintchin:, il y a du sang à volonté et des cercueils dans ma crypte ce soir.

En espérant que ce commentaire arrive dans un maximum de RAG. :langue:
votre avatar
Il pouvait aussi donner une autre bonne réponse (et c'est la meilleure sur ce sujet) : 42.
Remarque, si le modèle avait été un plus gros, genre Large, et exécuté sur la même machine, je pense qu'il aurait mis autant de temps à poser sa réponse que Deep Thougts.
votre avatar
Je serais curieux avec un modèle plus récent avec raisonnement du type Ministral 3 8B, voir 3B ou encore 14B.
votre avatar
Est-ce qu'on va enfin avoir un moteur de recherche digne de ce nom sur Next ? 😅
votre avatar
On peut avoir un peu plus d'info sur la partie technique ? Car au final, on n'a que les modèles qui sont chargés, mais pas comment faire l'indexation via nomic-embed-text, ni comment utiliser mistral en chargeant ensuite l'index créé.

Depuis le temps que je souhaite créé un RAG sans prendre le temps de le faire, je sens que j'ai déjà la moitié du chemin là :D
votre avatar
Bonjour,c'est possible d'avoir les quelques lignes de scripts ?
"Un petit script permet de découper automatiquement le texte en plusieurs morceaux (chunks) qui sont ensuite transformés en tokens via nomic-embed-text. "
Merci d'avance !