Les chatbots sont partout, OneGeo Chat ne se limite pas à des réponses génériques : il exploite vos jeux de données ! Grâce à l’architecture RAG (Retrieval Augmented Generation), il interroge et croise les informations disponibles pour fournir des réponses précises et contextualisées, adaptées à votre domaine.
🔍 Cet article s’adresse à celles et ceux qui veulent aller plus loin et découvrir l’envers du décor : architecture, choix technologiques, infrastructure… On vous embarque dans les coulisses du développement de OneGeo Chat ! 🚀
Un chatbot, mais pas n’importe lequel !
🧑💻 Derrière l’écran : l’équipe aux manettes
Derrière OneGeo Chat, c’est nous, l’équipe du service Innovation de Neogeo Toulouse, qui sommes aux manettes : Sébastien Da Rocha et Mathilde Pommier. Passionnés par les avancées en traitement du langage naturel (NLP : Natural Language Processing), nous nous sommes appuyés sur les recherches les plus récentes pour concevoir un chatbot à la fois performant et réellement utile. Plutôt que de développer un assistant générique, nous avons voulu créer un outil capable d’exploiter vos jeux de données, afin de fournir des réponses précises et adaptées à votre contexte métier.
🎯 Pourquoi OneGeo Chat ?
L’idée de OneGeo Chat est née de l’observation de certains défis récurrents rencontrés par nos utilisateurs dans leur manière de rechercher des jeux de données. Nous disposons déjà de OneGeo Explorer, un outil performant pour la recherche full-text. Ce dernier présente une limite : si l’utilisateur ne connaît pas précisément les termes exacts présents dans les jeux de données qu’il cherche, il risque de ne pas le trouver. Ce constat a révélé un besoin : celui d’une recherche plus flexible, adaptée à des utilisateurs qui ne savent pas toujours comment formuler leur requête.
Un autre besoin que nous avons identifié est celui de questionner les jeux de données sur des sujets vastes et complexes. Lorsque l’utilisateur se lance dans la recherche d’informations, il n’a pas toujours une idée claire de tous les aspects du sujet qu’il explore. Il manque souvent une interaction dynamique qui permettrait d’approfondir la recherche au fur et à mesure, de poser des questions spécifiques et d’obtenir des réponses contextualisées. C’est pour cela que nous avons choisi le format du chatbot : offrir un échange fluide, comme une conversation, pour guider l’utilisateur dans sa recherche.
Enfin, un autre point important est que, souvent, les utilisateurs effectuent des recherches similaires ou cherchent à retrouver des informations qu’ils ont déjà consultées. Le chatbot permet donc de garder une trace des recherches en les enregistrant dans différentes conversations. Cela permet de classer et de retrouver plus rapidement des données pertinentes, facilitant ainsi les futurs échanges.
C’est en réponse à ces besoins que OneGeo Chat a vu le jour : une solution qui permet non seulement de questionner les jeux de données de manière plus naturelle, mais aussi de garder une trace de ses recherches et de faciliter l’exploration même pour les sujets les plus complexes.
🔌 Une intégration aux petits oignons
Dès la phase de conception, OneGeo Chat a été pensé pour s’intégrer de manière fluide dans la plateforme OneGeo Suite, afin d’offrir une expérience unifiée aux utilisateurs. Tout comme OneGeo Explorer, l’objectif était de créer un point d’entrée unique où les utilisateurs peuvent gérer, rechercher et visualiser leurs jeux de données, sans avoir à jongler entre plusieurs outils. Cette intégration permet de centraliser l’accès aux données tout en optimisant la fluidité de l’expérience utilisateur.
Cependant, nous avons également pris en compte le besoin de flexibilité. Ainsi, OneGeo Chat a été conçu pour fonctionner en stand-alone, de manière totalement autonome, pour les utilisateurs ayant des besoins plus modestes ou spécifiques. Cette modularité de la solution, à la fois en termes d’intégration dans un environnement plus large ou de déploiement indépendant, permet à OneGeo Chat de s’adapter à différentes configurations et de répondre à une large variété de cas d’usage.
Dans les coulisses du code
C’est ici que ça se corse ! 🚀 On plonge maintenant au cœur de la technique et des choix qui ont façonné OneGeo Chat. Préparez-vous à découvrir comment ce projet a été conçu, les technologies utilisées et l’infrastructure qui permet à ce chatbot de fonctionner sans accroc.
🏗 Les fondations du projet
Le principe de RAG (Retrieval Augmented Generation)
Au cœur de OneGeo Chat se trouve une architecture puissante qui combine deux technologies : la génération de texte par IA et la récupération d’informations métier. Ce modèle, appelé RAG, permet à notre chatbot d’aller au-delà de la simple génération de réponses. Plutôt que de s’appuyer uniquement sur des connaissances internes, il interroge une base de données vectorielle contenant vos jeux de données pour y chercher des informations pertinentes, puis génère une réponse en fonction de ces données.
Le processus se déroule en deux étapes principales : d’abord, le moissonnage (harvest) des différentes sources de données afin de remplir une base de données vectorielle qui servira au modèle lors de son utilisation (inférence). Puis, l’étape d’inférence où l’utilisateur pose sa question au chatbot et où l’application répond grâce à un modèle d’IA.
Cette seconde étape est elle-même divisée en deux avec, il y a d’abord la phase de récupération des données pertinentes pour la question de l’utilisateur (le retrieval). Ici, le chatbot consulte la base de données vectorielle précédemment remplie dans l’étape de harvest pour récupérer des documents en lien avec la question posée.
Plutôt que de rechercher une correspondance exacte (full-text, comme dans OneGeo Explorer), le modèle se base sur la proximité vectorielle des termes. Autrement dit, il évalue la similarité sémantique entre la question de l’utilisateur et les documents stockés, ce qui lui permet d’identifier des réponses pertinentes même si les termes exacts ne sont pas présents dans les jeux de données. Cela implique donc de vectoriser à la fois les documents en base et la question de l’utilisateur avec un seul et même modèle sémantique.
Une fois les documents pertinents récupérés, ces derniers forment ce qu’on appelle un contexte qui va venir nourrir un LLM (Large Language Model : modèle d’IA générative). En somme, ce contexte offre une base à l’IA et l’oriente dans la bonne direction pour générer une réponse précise à la question de l’utilisateur. Ainsi, la technique utilisée est la même que celle que vous employez quand vous détaillez votre demande dans d’autres chatbots.
C’est donc ainsi que s’achève le modèle de RAG, qui permet donc au modèle d’IA de générer des réponses basées sur les jeux de données de l’utilisateur. Un RAG classique se termine ainsi, mais on verra par la suite que le nôtre comprend une étape supplémentaire. 🔍
Le RAG de OneGeo Chat
Maintenant que le principe général du RAG est clair, passons aux spécificités de son implémentation dans OneGeo Chat. Notre approche va plus loin qu’un simple Retrieval Augmented Generation classique en intégrant des mécanismes avancés pour optimiser la récupération et l’exploitation des informations.
Lors de la phase de moissonnage, notre base de données vectorielle est enrichie avec les jeux de données issus de la plateforme OneGeo Suite. Cette dernière push (pousse) ses méta-données publiées et celles moissonnées dans la base de données vectorielle de OneGeo Chat. Bien sûr, seules les données accessibles en anonymes sont disponibles. La base vectorielle peut aussi (mais ce n’est pas obligatoire) être alimentée en pull (tirant) des données de notre application de management de projet : Redmine. À l’avenir, d’autres sources de données seront ajoutées, vous pourrez également rajouter les votres. Ainsi, ces deux mécanismes (de push et pull) remplissent ainsi la base de données vectorielle de OneGeo Chat avec vos données.
Plus concrètement, la recherche sémantique n’est réalisable et efficace que sur de petits morceaux de texte de quelques centaines de caractères. De ce fait, les documents ne sont pas conservés tels quels dans la base de données vectorielle de OneGeo Chat. Ces derniers sont donc découpés en phrases avant que celles-ci ne soient indexées grâce à cette représentation vectorielle. Bien sûr, chaque phrase est enregistrée avec un lien vers son document d’origine pour que l’on puisse remonter jusqu’à ce dernier.
De plus, OneGeo Chat ne se limite pas à récupérer les documents les plus pertinents dans une base vectorielle, en effet, ce dernier adopte une approche plus complète et modulaire. Nous avons mis en place un système de chaînage de retrievers, permettant d’agréger plusieurs types d’informations pour former le contexte à envoyer au modèle génératif :
- Une pré instruction codée en dur : avant même de chercher des documents, le chatbot récupère un ensemble de directives définissant son comportement (langue de réponse, citation des sources, etc.).
- L’historique de conversation : pour assurer une réelle continuité dans l’échange, le chatbot prend en compte les messages précédents de la conversation en cours.
- Les titres de documents les plus pertinents : afin d’affiner la recherche, nous utilisons un premier filtre basé sur les titres des documents les plus proches de la requête utilisateur. Cela permet d’orienter efficacement le processus de récupération.
- Les documents les plus pertinents dans la base vectorielle : une fois ces étapes réalisées, le chatbot interroge la base vectorielle pour récupérer les documents les plus en adéquation avec la question posée. On récupère uniquement les données pertinentes d’un point de vue sémantique : le titre, la description et autres métadonnées (mais pas les dates par exemple).
Grâce à cette architecture modulaire, il est possible d’ajouter, d’orchestrer ou de retirer des retrievers à tout moment, offrant ainsi une grande flexibilité pour tester et sélectionner différents algorithmes de récupération et de génération.
Finalement, OneGeo Chat possède une dernière particularité s’ajoutant au RAG classique : un bloc supplémentaire nommé Document Searcher. Ce module intervient une fois la réponse générée par le LLM et se concentre sur le cas d’utilisation de la recherche documentaire. Pour cela, ce module prend en entrée la question initiale ainsi que la réponse générée. Il effectue des recherches sémantiques dans la base de données vectorielle sur ces données d’entrées. À l’issue de ce processus, les cinq documents les plus pertinents sont sélectionnés et présentés à l’utilisateur, accompagnés d’un lien, d’une description et de son score.
Ainsi, le chatbot OneGeo Chat vous permet d’accéder directement aux jeux de données les plus pertinents en lien avec votre question initiale.
Vous trouverez l’ensemble des modules composants OneGeo Chat dans le schéma suivant.

🛠 Un savant mélange de technos libres au cœur de OneGeo Chat
OneGeo Chat repose sur plusieurs technologies qui assurent son bon fonctionnement, aussi bien côté intelligence artificielle que sur les aspects backend, frontend et validation.
Pour la partie IA, deux modèles sont utilisés : Llama 3.1:8b pour la génération LLM des réponses et paraphrase-multilingual-MiniLM-L12-v2 pour la recherche sémantique. Vous avez d’ailleurs déjà pu voir ces modèles sur le schéma précédent. Nous avons sélectionné ces modèles non seulement pour leurs performances, mais aussi pour leur taille réduite, ce qui facilite leur exécution (le temps de réponse). De plus, ils sont disponibles via Ollama, une solution qui simplifie la gestion, l’utilisation et l’interchangeabilité des modèles.
Le backend est développé en Python et avec le framework Django. Pour ce qui est de la base de données vectorielles, nous avons fait le choix de QDrant, qui permet d’effectuer facilement les recherches sémantiques. Cette base de données vectorielle est également légère et facilement déployable. Pour gérer la communication en temps réel, nous utilisons Django Channels, qui permet d’intégrer facilement les WebSockets à Django. Cette technologie nous permet de facilement gérer les conversations. Par ailleurs, Django REST Framework (DRF) facilite l’interaction avec la base de données et les échanges entre le frontend et le backend.
Côté frontend, l’interface est construite avec VueJS 3 et TypeScript. On a opté pour TypeScript plutôt que JavaScript afin de bénéficier de ses règles de typage, ce qui permet de limiter les bugs, d’améliorer la clarté du code et de faciliter sa maintenance sur le long terme.
Également, au service innovation de Neogeo, nous accordons une grande importance à la qualité et à la fiabilité de nos développements. Pour garantir un code robuste et maintenir un haut niveau de tests et validation, nous avons mis en place une CI (Intégration Continue) dans le GitLab du projet OneGeo Chat.
Nous utilisons notamment MyPy pour l’analyse statique du code backend Python, ce qui nous permet de détecter les incohérences de typage avant même l’exécution du programme. Pour le suivi de la qualité du code, SonarQube analyse notre code en profondeur afin de détecter d’éventuels bugs, code smells et évaluer notre couverture de code. Quant aux tests en eux-mêmes, Pytest est notre outil principal pour l’exécution des tests unitaires et d’intégration backend. Côté frontend, nous avons quelques tests Cypress, mais ces derniers restent basiques et ne sont pas intégrés dans la CI, mais exécutables manuellement.
Aussi, nous avons l’outil Pip-audit qui nous aide à identifier les vulnérabilités de sécurité dans les dépendances Python et à garantir que notre application repose sur des bibliothèques à jour et sécurisées. Pour finir, puisque OneGeo Chat est open-source, nous utilisons Pylic afin de vérifier que toutes les bibliothèques et API que nous intégrons respectent bien les licences adéquates.
Si vous souhaitez en apprendre plus sur les compatibilités entres licences, je vous invite à consulter notre article sur la licence Affero GPL 3.0
Enfin, le déploiement est géré via Docker, ce qui permet non seulement d’avoir un environnement isolé et reproductible, mais aussi de simplifier la gestion des dépendances et de garantir que OneGeo Chat fonctionne de manière cohérente, peu importe l’environnement. Aussi, Docker simplifie grandement le déploiement et l’exécution des dépendances. En résumé, Docker rend le processus de déploiement de OneGeo Chat rapide, fiable et facile à maintenir, c’est pour cela que nous l’avons adopté.
🌍 Une infrastructure qui tient la route
OneGeo Chat a été conçu pour fonctionner aussi bien sur GPU que sur CPU, offrant ainsi une flexibilité en fonction des ressources disponibles. Toutefois, en pratique, les performances sur GPU sont largement supérieures : les temps de génération sont bien plus rapides et l’expérience utilisateur s’en trouve grandement améliorée.
Le mode CPU reste une alternative, mais il demande une quantité importante de RAM et entraîne des temps de réponse nettement plus longs. C’est pourquoi nous recommandons fortement l’utilisation d’un GPU pour tirer pleinement parti de l’application.
Afin de faciliter l’adaptation du déploiement à votre infrastructure, le fichier docker-compose.yml inclut des sections spécifiques pour les GPU. Par défaut, la configuration utilise le CPU pour plus de compatibilité, mais vous pouvez activer la prise en charge des GPU en décommentant les parties correspondantes. Cela permet de tirer parti des capacités de votre matériel tout en maintenant une configuration unique et facile à gérer. Pour pouvoir utiliser le mode GPU, il vous faudra disposer d’un GPU Nvidia avec au moins 8Go de RAM et avoir installé le Nvidia Container Toolkit. Nous n’avons pas testé avec un GPU AMD, même si c’est théoriquement possible. Encore une fois, l’utilisation de conteneurs avec Docker simplifie grandement le déploiement de OneGeo Chat.
D’ailleurs, pour tester localement OneGeo Chat, suivez les instructions détaillées dans la section Run Locally du README du projet. Vous y trouverez toutes les étapes pour configurer et exécuter l’application en local.
Le mot de la fin
Pour conclure, si vous cherchez un moyen simple et rapide pour rechercher et échanger efficacement autour de vos données, géomatiques ou non, alors OneGeo Chat est fait pour vous. Ce projet étant toujours en pleine évolution, nous souhaitons y apporter des améliorations et de nouvelles features.
Nous souhaitons notamment renforcer la validation en ajoutant plus de tests fonctionnels avec Cypress et en intégrant Ragas pour évaluer la pertinence du modèle. Ragas est une bibliothèque qui fournit des outils pour améliorer l’évaluation des applications LLM.
L’optimisation des réponses générées est aussi une priorité afin d’améliorer encore la qualité des résultats. Par ailleurs, nous ambitionnons de faire de OneGeo Chat un pilote de notre plateforme OneGeo Suite.
Enfin, nous aimerions aller plus loin dans l’interprétation des données géomatiques en exploitant non seulement les titres et descriptions des jeux de données, mais aussi les attributs et la géométrie de ces derniers.
Pour rester informé sur l’évolution de OneGeo Chat, vous pouvez consulter le site officiel de Neogeo, poser vos questions et échanger avec la communauté sur notre forum, et suivre notre actualité sur LinkedIn.
Rédactrice : Mathilde Pommier