Depuis le lancement de OneGeo Chat, notre chatbot RAG dédié à l’exploration de données géographiques, la solution n’a cessé d’évoluer.

Après plusieurs itérations sur l’architecture RAG, l’interface et l’intégration à OneGeo Suite, voici la v2.2 : une refonte complète de l’interface, de nouvelles fonctionnalités de recherche géographique et des outils d’administration intégrés à l’application. Tour d’horizon de ce qui change !

Si vous n’êtes pas encore familier avec le principe de fonctionnement de OneGeo Chat, nous vous invitons à consulter notre article « Votre chatbot OneGeo Chat : décryptage technique » avant de poursuivre.

ℹ️ Bon à savoir : pour accéder à OneGeo Chat, vous devez disposer d’un compte OneGeo Suite et être connecté à celui-ci. Vous pouvez tester la solution sur notre instance de démonstration : demo.onegeosuite.fr.

La nouveauté la plus visible de cette version est sans doute la refonte complète de l’interface. Jusqu’ici le frontend reposait sur un ensemble de composants Vue 3 classiques avec Vuex pour la gestion d’état. La v2.2 abandonne cette approche au profit d’une nouvelle bibliothèque de composants : AI Elements Vue.

🎨 Une interface entièrement repensée avec AI Elements Vue

Ce changement n’est pas esthétique : il s’accompagne d’une modernisation complète de la pile technologique frontend. Finis Vuex et axios, place à TailwindCSS v4, Reka UI, Motion V pour les animations, Shiki pour la coloration syntaxique du code, et tokenlens pour la gestion et la visualisation des tokens LLM. Autant de briques qui permettent de construire une expérience utilisateur bien plus riche.

Thèmes clair et sombre

L’interface supporte désormais un thème clair et un thème sombre, commutable à tout moment. Un détail appréciable quand on passe des heures à interroger ses jeux de données ! 🌙

Shimmer de chargement

Pendant la génération d’une réponse, un effet de shimmer (animation de chargement douce) remplace l’ancien indicateur de progression. Le chatbot vous fait désormais savoir qu’il «réfléchit» de façon bien plus élégante qu’avant.

Visualisation du raisonnement du modèle

Certains modèles récents (comme les modèles « thinking » basés sur Llama ou DeepSeek) produisent une chaîne de raisonnement interne avant de formuler leur réponse finale. La v2.2 expose cette trace de réflexion directement dans l’interface : un encart dédié affiche le processus de réflexion du modèle, ce qui permet de mieux comprendre comment il arrive à sa conclusion.

💬 Des conversations plus riches

Éditer et régénérer les messages

Vous avez posé une question trop vague ? Plus besoin de relancer une nouvelle conversation. La v2.2 introduit trois nouvelles actions sur les messages :

  • Copier : copier le texte d’un message en un clic.
  • Éditer : modifier un message utilisateur. L’édition tronque proprement la conversation à partir de ce point, comme dans les assistants conversationnels habituels.
  • Régénérer : demander au modèle de reformuler sa réponse depuis le message utilisateur précédent, sans avoir à retaper sa question.

Sélecteur de modèle

L’utilisateur peut désormais choisir le modèle de langage depuis l’interface, parmi la liste des modèles disponibles sur l’instance Ollama connectée. Fini le paramétrage caché dans les variables d’environnement : le changement de modèle se fait en direct, conversation par conversation, ou même, message par message.

Activation ou désactivation du RAG à la volée

Jusqu’à présent, le RAG (la recherche dans la base documentaire) était toujours actif. La v2.2 ajoute un bouton bascule pour activer ou désactiver le RAG pour chaque échange. Utile quand on souhaite poser une question générale au LLM sans que celui-ci ne se restreigne aux documents indexés.

🗺️ Le GeoFilter : une recherche géographique repensée

Le GeoFilter est l’une des fonctionnalités les plus originales de OneGeo Chat : il permet de détecter automatiquement les noms de lieux dans la question de l’utilisateur et de filtrer les résultats de recherche par emprise géographique (bounding box).

Dans la version précédente, ce filtre s’appuyait sur un index de localités stocké dans Qdrant (la base vectorielle de la solution) et sur un modèle Django. Cela impliquait un moissonnage et une mise à jour régulière de cet index.

La v2.2 simplifie radicalement cette architecture : le GeoFilter utilise désormais du géocodage en temps réel, en interrogeant successivement :

  1. l’API Géo du gouvernement français idéale pour les communes, départements et régions françaises ;
  2. la Base Adresse Nationale (BAN) pour les adresses précises ;
  3. Nominatim / OpenStreetMap en repli pour les lieux internationaux ou non couverts.

Résultat : plus de collection Qdrant à maintenir pour les localisations, une couverture géographique bien plus large, et une meilleure précision pour les lieux français. L’interface affiche désormais le lieu détecté et la zone géographique résolue sous forme de carte Leaflet interactive, directement dans la conversation.

Pour activer ou désactiver la recherche géolocalisée, un simple bouton bascule est disponible dans la barre de composition du message.

📄 La colonne des documents recherchés

La v2.2 introduit une barre latérale droite dédiée aux documents recherchés. Après chaque réponse du chatbot, les documents les plus pertinents retrouvés dans la base vectorielle y sont affichés avec leur titre, leur description et leur score de similarité.

Jusqu’à présent, ces documents apparaissaient en bas du message, ce qui pouvait alourdir la lecture. Leur déplacement dans un panneau latéral dédié permet de mieux séparer la réponse générée des sources documentaires, tout en les gardant accessibles d’un coup d’œil.

Par défaut, cette recherche de documents est automatique après chaque réponse. Pour les cas d’usage qui ne nécessitent pas de recherche systématique, une variable d’environnement permet de la passer en mode manuel : une icône de recherche apparaît alors sur chaque message, à activer à la demande.

📊 Suivi des tokens et indicateur de contexte

À chaque échange, un LLM ne peut pas tout garder en mémoire : il dispose d’une fenêtre de contexte de taille limitée, qui regroupe l’historique de la conversation, les documents injectés par le RAG et la question en cours. Ce volume se mesure en tokens — de petites unités de texte que le modèle traite à la fois.

L’une des difficultés des chatbots basés sur des LLMs est de savoir combien de contexte il reste disponible avant d’atteindre la limite de la fenêtre du modèle. La v2.2 adresse ce problème de deux façons :

  • Comptage de tokens par message : chaque message affiche son nombre de tokens consommés (entrée et sortie), calculé côté client avec tokenlens.
  • Indicateur de contexte de conversation : une roue de progression montre l’utilisation globale de la fenêtre de contexte de la conversation en cours.

Ces informations permettent à l’utilisateur (et à l’administrateur) de mieux comprendre pourquoi une conversation très longue peut produire des réponses dégradées — ou pourquoi il est parfois utile de démarrer une nouvelle conversation.

⚙️ Un panneau d’administration intégré à l’application

Jusqu’ici, la configuration avancée de OneGeo Chat passait exclusivement par l’interface d’administration Django, peu conviviale pour un usage quotidien. La v2.2 introduit un panneau d’administration directement dans l’application, accessible aux utilisateurs administrateurs.

Ce panneau couvre cinq grandes rubriques :

  • Général : paramètres globaux de l’utilisateur.
  • Limites : définitions de combien de messages les utilisateurs non administrateurs peuvent envoyer sur une période donnée, définition du nombre de sources documentaires injectées dans le contexte lors d’un échange RAG, et du nombre de documents proposés après chaque réponse du modèle.
  • Connexions : ajout et gestion d’autres fournisseurs LLM (pas uniquement Ollama en local).
  • Modèles : sélection des modèles accessibles pour tous les utilisateurs.
  • Usage : visualisation de la consommation de tokens par utilisateur, par modèle, sur une période configurable.

L’usage des tokens est stocké dans un registre immuable : même en cas de suppression ou de modification de messages, l’historique de consommation reste intact.

🌾 Un moissonnage repensé

L’alimentation de la base de connaissances à partir de OneGeo Suite n’est pas nouvelle : jusqu’ici, c’était la plateforme qui poussait les données vers OneGeo Chat. Lorsqu’un jeu de données était publié ou modifié sur OneGeo Suite, celui-ci était envoyé automatiquement dans la base du chatbot via l’API.

La v2.2 introduit une autre approche : c’est désormais OneGeo Chat qui interroge l’index de OneGeo Suite pour moissonner les jeux de données de la plateforme — ainsi que les pages de contenu, les articles et les ressources moissonnées.

Ce passage du push au pull offre une meilleure abstraction par rapport à OneGeo Suite : le chatbot n’a plus besoin d’attendre qu’un événement côté plateforme déclenche la synchronisation, il peut rafraîchir sa base de connaissances de façon autonome, à la demande ou selon un planning défini par l’administrateur.

🧩 Un widget web embarquable

Nouvelle venue dans la v2.2 : le composant web onegeo-chat. Il s’agit d’une version allégée de l’interface (sans barre latérale de conversations, sans panneau d’administration) que l’on peut intégrer dans n’importe quelle page web avec quelques lignes de HTML.

Ce widget utilise les mêmes sessions Django et le même mécanisme CSRF que l’application principale, mais peut aussi s’authentifier via un token JWT pour les intégrations dans des environnements tiers. Idéal pour enrichir un portail de données géographiques existant sans déployer une interface complète.

🛠️ Sous le capot : ce qui change côté technique

Quelques évolutions techniques notables complètent ce tableau :

  • uv remplace Pipfile : le gestionnaire de paquets Python est désormais uv, bien plus rapide que pip et offrant une gestion reproductible des dépendances.
  • ASGI + uvicorn : le serveur passe de WSGI à ASGI (uvicorn), ce qui permet de gérer plusieurs flux NDJSON (streaming) en parallèle. Les conversations simultanées ne se bloquent plus mutuellement.
  • Batching des embeddings : lors du moissonnage, les requêtes d’embeddings vers Ollama sont désormais regroupées par document plutôt qu’envoyées fragment par fragment. Le temps d’indexation s’en trouve significativement réduit.
  • Tests de charge : une suite de tests de charge a été intégrée au projet pour mesurer les performances de l’ensemble du pipeline (LLM + RAG + API).

En résumé

La v2.2 apporte des évolutions concrètes autour de l’interface, de la recherche géographique et de l’administration. Sans prétendre tout résoudre d’un coup, elle rend l’outil plus agréable au quotidien, tout en conservant son objectif : faciliter l’exploration de jeux de données par la conversation. Une étape de consolidation, qui ouvre la voie à de prochaines améliorations.

Le projet est open-source sous licence GNU AGPL v3 et accessible sur GitLab Neogeo, n’hésitez pas à jeter un coup d’œil.
Pour rester informé sur l’évolution de OneGeo Chat, vous pouvez consulter le site de Neogeo, poser vos questions et échanger avec la communauté sur notre forum, et suivre notre actualité sur LinkedIn.