Modernisation des bases de données avec l'IA
Résumé
La vidéo présente une application utilisant quatre bases de données (Azure SQL, PostgreSQL, DocumentDB, Cosmos DB) modernisées grâce à l'IA. Elle détaille l'intégration de la recherche vectorielle, du langage naturel pour générer des requêtes, et l'utilisation de serveurs MCP pour interroger les bases. Une démonstration illustre la recherche de similarité, la génération d'images, la gestion multilingue et le suivi d'activité. Le code est disponible sur GitHub pour reproduction et adaptation.
À retenir
- L'application présentée utilise quatre bases de données : Azure SQL, PostgreSQL, DocumentDB et Cosmos DB, pour illustrer la modernisation par l'IA.2:51
- La recherche vectorielle permet de retrouver des produits ou clients similaires en transformant descriptions ou données en vecteurs de 1536 dimensions.11:24
- L'intégration du langage naturel via serveurs MCP permet de générer et exécuter des requêtes SQL ou NoSQL à partir de questions utilisateur.20:52
- Les bases de données modernes supportent nativement le stockage de vecteurs et l'indexation pour optimiser la recherche de similarité.12:29
- La sécurité est assurée en propageant les droits utilisateur et en limitant les opérations autorisées lors de l'exécution des requêtes générées.27:05
- Le code source de l'application et la documentation sont disponibles sur GitHub pour test et adaptation à vos besoins.32:42
- L'IA enrichit les bases de données sans les remplacer, en facilitant l'accès, l'automatisation et la compréhension des données.34:07
Description
🧭 Cap sur l’épisode du jour ! Aujourd’hui, j’ai le plaisir d’être accompagné par Emmanuel Deletang linkedin.com/in/emmanueldeletang et Richard Prade linkedin.com/in/richard-prade-81155b8 pour parler d’architectures multibases de données et surtout de comment les exploiter intelligemment grâce à l’AI.
📅 Les temps forts de cette vidéo :
00:00 : Phare Data
01:53 : Demo
31:05 : Conclusion
Quelques sources :
- Flask Multi-Database Demo : github.com/emmanueldeletang/DBwithAISAMPLE
- SQL MCP Server : learn.microsoft.com/en-us/azure/data-api-builder/mc…
#Database #AI #Modernisation
Questions fréquentes
Comment ajouter la recherche vectorielle à une base de données existante ?
Il suffit de rajouter une colonne de type vecteur dans votre base (SQL ou PostgreSQL), puis d'utiliser un modèle pour transformer les descriptions en vecteurs. Les bases modernes supportent nativement cette fonctionnalité.
Quels sont les avantages du langage naturel pour interroger une base de données ?
Le langage naturel permet à tout utilisateur de poser des questions sans connaître SQL, générant automatiquement des requêtes adaptées à la structure de la base grâce à un serveur MCP et un modèle IA.
Pourquoi utiliser DocumentDB ou Cosmos DB pour le suivi d'activité ?
DocumentDB et Cosmos DB sont adaptés au stockage d'événements sous forme de sous-documents, optimisant la recherche et la visualisation des activités par utilisateur et par jour, notamment pour des usages journaliers ou historiques.
Comment sécuriser l'exécution de requêtes générées par l'IA ?
La sécurité repose sur la propagation des droits utilisateur jusqu'à la base, l'utilisation de serveurs MCP pour contrôler les requêtes, et la limitation des opérations autorisées (par exemple, uniquement des SELECT).
Peut-on utiliser n'importe quel modèle IA pour la vectorisation ?
Oui, il est possible d'utiliser Azure Open AI ou tout autre modèle compatible pour générer les embeddings, selon vos préférences et besoins techniques.
Comment gérer les changements de schéma dans la base avec le langage naturel ?
Le serveur MCP récupère dynamiquement le schéma de la base, permettant d'adapter les requêtes générées même si les tables ou colonnes changent de nom.
Où trouver le code source de l'application présentée ?
Le code source et la documentation sont disponibles sur GitHub, avec toutes les instructions pour déployer, configurer et adapter l'application à vos environnements.
Transcript complet
6 064 mots · cliquez sur un horodatage pour lancer la vidéo à cet instant.
Introduction et présentation de Phare Data
0:14Bonjour et bienvenue sur Fardata, la chaîne qui éclaire vos données. Dans l'océan des données, voir clair change tout. Sur farata, on décrypte les services de données d'analytique CDIA, le tout avec un ton accessible, des choix techniques assumés et une touche dermain. Alors que vous soyez architecte, analyse, data engineur, product honur ou simplement curieux, fardata vous accompagne pour comprendre les enjeux réels, éclairer les compromis et prendre de meilleures décisions et parfois avec le cri des mouettes en bruit de fond. Si ce genre de contenu vous parle, n'hésitez pas à vous abonner. Cap sur l'épisode du jour. Aujourd'hui, on va parler d'architecture multibase de données et surtout comment les exploiter intelligemment grâce à les ail. Et pour ça, j'ai le plaisir d'être accompagné de deux passionnés du sujet, à savoir Emmanuel, l'homme qui murmure à l'oreille des bases de données et Richard à celui à qui on pourrait confier nos bases de données de production sans jamais trembler. Messieurs, je vous laisse vous présenter et nous raconter la solution que vous avez construite à partir de besoins, je crois rencontrer en clientèle. Moi, je suis Emmanuel de l'Éthan effectivement. Donc, je suis Solution Engineer chez Microsoft, spécialiste des bases de données et passionné effectivement par l'ajout de nouvelles fonctionnalités dans des applications en utilisant les nouvelles fonctionnalités des bases de données. C'est un peu ce qu'on va vous présenter aujourd'hui. Souvent, je suis accompagné de Richard avec qui je travaille depuis quelques années maintenant. Et donc Richard Pon moi je suis cloud Solution architecte et je travaille en de collaboration avec Emmanuel notamment auprès de nos clients pour mettre en place des solutions autour de la base de données. Voilà. Alors l'idée de l'application elle été très simple. On a beaucoup de clients qui ont un historique de base SQL ou un historique de base Postgress ou des bases de type Mongo Document DB
Démonstration de l'application multibase
2:02ou des bases Cosmos DB. Ils nous ont dit qu'est-ce que l'AI peut nous permettre de rajouter comme fonctionnalité à une application déjà existante ? J'ai un catalogue produit, j'ai des commandes, j'ai des utilisateurs, j'ai du tracking d'application, j'ai enfin tout un tas de de fonctionnalités qui sont déjà existantes avec des bases existantes. Est-ce que aujourd'hui dans les bases de données que l'on a, est-ce que LAAI pourra rajouter des choses et quelles sont ces fonctionnalités possibles aujourd'hui ? sans avoir bien sûr à tout casser mon modèle, à migrer mes bases et cetera. Et c'était un peu l'idée de cette démonstration-là. Voilà. Et situationlà, l'objectif principalement va être de parler de modernisation sur un existant ou bien sûr sur des nouvelles applications. Voilà. L'application qui a été développée, vous allez le voir, utilise quatre bases de données. On utilise un Azure SQL, un Postgref, un document DB, un Cosmos DB no SQL. On a une interaction aussi bien sûr avec l'IA donc Azure Open AI qui va héberger des modèles qu'on va utiliser. Alors on aurait pu très bien quelque part se dire euh je pourrais avoir qu'une base relationnelle donc soit en Azur SQL soit un postgrisse pour l'ensemble des fonctionnalités qu'on va présenter qui vont utiliser du relationnel où on ne pourrait avoir aussi qu'une seule base no SQL soit un cosmos DB no SQL ou un document DB pour la partie non relationnelle. L'idée de la démo, elle est multiple. Elle est de vous montrer que finalement, quelle que soit la base que j'utilise, un SQL, un Postgress, un document SQL, je vais pouvoir rajouter les mêmes types de fonctionnalités. D'accord ? Et l'autre partie, c'est que le code vous est partagé, c'estàd c'est sur un GitHub, vous pourrez avoir accès et regarder beaucoup plus en détail, le réinstaller chez vous, le reproduire et bah finalement utiliser ça pour vos propres produits ou ces propres choses-là. Super. Alors, j'ai hâte de voir ça en démo. Tu nous montres à quoi ça ressemble ? Oui, parce que la théorie c'est bien pratique mais autant aller sur de la démo. Donc vous pouvez voir ici, alors je vais passer en plein écran, sera quand même beaucoup plus simple. Donc cette application qui est donc un site web euh voilà, je suis euh logué en tant que manuel et puis j'ai un petit dashboard. Donc je peux voir que j'ai un Azure SQL, un Postgress, un document DB, un Cosmos SQL. L'idée c'est de dire bah voilà mon catalogue produit il est effectivement mis dans une base SQL et souvent quelles sont les fonctionnalités qu'on a de recherche dans un catalogue produit Richard ? On a des recherches assez simples finalement avec des filtres prédéfinis. Tout à fait. Les recherches classiques basées sur des métadata qu'on a sur nos produits qui nous permettent de filtrer tout simplement. par exemple, voilà, sur les closings, je peux retrouver un certain nombre de choses. Alors, je la l'intérêt, hein, surtout la nouvelle fonctionnalité qu'on va rajouter, c'est on peut se servir de l'IA à plusieurs niveaux. Par exemple, ici, on peut se servir de l'IA aussi pour générer directement l'image. C'est-à-dire que toutes les images que vous voyez ici, quand Richard a rajouté le drone par exemple, et ben il a généré l'image à partir d'un modèle I et partir de la description. Mais la chose qui peut être intéressante effectivement, c'est se dire "Je voudrais rechercher quelque part un produit en décrivant tout simplement le produit. C'est je sais pas trop enfin ce que je recherche." Par exemple, si tu recherches un objet volant radio commandé, alors voilà, objet volant radio commandé. Hop. Et lui, qu'est-ce qu'il va le faire ? il va tout simplement aller faire une recherche qu'on appelle de similarité et il me dit "Bah voilà, dans ta base de données, tu as un drone FPV et celui-ci est similaire à 44 %. Tu as un autre drone FPV Racer." Voilà. Alors après, vous pouvez voir, c'est de la recherche de similarité. Donc effectivement, il me dit "Il y a un ballon de rugby ou un ballon de football." C'est un ballon de rugby, c'est un ballon volant. C'est un objet volant qui est commandé par des mains. Donc on peut supposer qu'effectivement il y a un peu cette similarité. Bien sûr, on peut aller directement voir le produit et éventuellement réaliser euh des des recherches similaires ou ces choses-là. Donc, c'est être capable de rajouter cette recherche finalement de mise en place. On a aussi rajouté tout simplement au niveau des clients cette même mise en place avec de la recherche similarité. Donc là, je suis pour les commandes et les clients dans une base postgresse. D'accord ? Et si je tape par exemple Paris en recherche de type ce qu'on appelle vectoriel donc de similarité, il me dit voilà Thomas Laurent il il habite dans la ville de Paris donc on peut voir que tous les gens qui sont à Paris ont une similarité et la similarité est la plus haute tout simplement. Après l'intérêt effectivement de l'application c'est de dire bah je vais être capable d'aller faire une nouvelle commande. Je vais rajouter un produit donc un drone tout simplement. Je vais rajouter un autre article, un maillot de l'Olympique de euh Marseille. Alors peut-être pas Marseille, ça c'est toujours sujet à controverse aller un maillot de de du RCV du rugby. Alors j'ai j'ai je pourrais créer un maillot de vanne effectivement. Euh voilà, mais RCV ça veut dire plus de choses. Ruby Club de Vichi, Ruby Club de Vancè, Ruby Club de Van, voilà, il faut toujours faire attention. Mais par exemple, on va dire euh livraison euh à van euh voilà et je crée ma commande. Qu'est-ce qui se passe ? Donc la commande a été créée et ici euh je l'idée hein, c'est de dire j'ai un catalogue produit, je passe des commandes et puis je vais sous-traiter la livraison, la logistique, ce qui est souvent le cas. Et donc si je vais dans la centre d'expédition ici, ben je peux voir que effectivement j'ai une commande qui a été mis en place et je vais pouvoir sélectionner un partenaire qui va s'occuper de réaliser la livraison. Je suis dans un document DB. On expliquera un petit peu plus en détail pourquoi on utilise là une base no SQL par rapport à ça pour faire cette livraison et ce dispatch. Euh voilà. Alors l'idée he c'est dire bah voilà j'ai j'ai effectivement mon ordre ici et ma livraison et qu'est-ce que je vais être capable de faire ? Ben, je vais être capable de faire différentes actions. C'est-à-dire que la commande ici, elle a été effectivement en pickup. Après, je peux lui dire qu'elle est en transit. Je vais pouvoir qu'à lui dire qu'elle a été délivrée éventuellement directement. On a aussi rajouté pour la recherche de partenaire la recherche hybride tout simplement. Si je lui dis par exemple ici, je recherche SMCF euh qui est tout simplement une faute d'orthographe et je chercherai plutôt de la SNCF, je peux voir qu'il va retrouver SNCF et c'est celui qui va avoir une recherche hybride. La alors c'est effectivement ici à de l'inverse mais j'ai cette notion et cette capacité de faire de la recherche directement. Je peux suivre mon colis, rajouter ces choses-là. Voilà, l'idée euh directement c'est de dire sur chacun des systèmes, je vais être capable de faire une recherche avec aussi une recherche pourquoi pas multilangue hein, tout simplement ici je tape quelque chose en flamant, bah il va me retrouver l'information. Euh je peux aussi utiliser l'IA pour au niveau de là plus applicatif directement dire tiens, je voudrais tout simplement tout en en espagnol et ici toute l'interface se transforme en espagnol avec Buscar Productos directement. Voilà, on on présentera ça un petit peu plus en en détail tout à l'heure mais voilà l'application. Donc un catalogue produit qui a des bases SQL dans du Postgress, on va mettre les commandes, les customers, euh les clients et puis euh la logistique. La dernière chose qu'on a mis en place effectivement, bah qu'est-ce qu'on fait ? On fait du suivi d'activité. Donc on va être capable d'aller voir quelles sont les activités par jour, avoir du détail de qui fait quoi avec des logs pour être avoir complètement le détail. Et c'est pour ça, on utilise une base Cosmos débit et on vous montrera pourquoi tout à l'heure et on expliquera tout ça. Super. Donc tu nous as montré une application, un cas d'école en quelque sorte hein où on peut utiliser l'IA pour faire de la recherche vectorielle, la recherche de similarité. Est-ce que tu peux nous montrer maintenant à l'envers du décor et en effet pourquoi tel type de base, pour quel besoin ? Voilà. Alors c'est un peu l'idée hein effectivement. Donc on utilise quatre bases de données unei intégrée mais c'est vraiment à titre plutôt pédagogique mais deux auraient suffi une OSQL et une SQL. Donc on utilise la recherche de similarité et la notion de alors on vous montrera un petit peu plus tard dans la démo. Il y a aussi d'autres choses comme le langage naturel et et du MCP. Quand on regarde un petit peu euh l'architecture, effectivement, on a une application qui va interroger plusieurs bases, mais dans chaque base, on a activé des nouvelles fonctionnalités, notamment la capacité à stocker des vecteurs. D'accord ? Tu peux nous expliquer un peu ce que un vecteur un peu plus en détail, Richard ? Oui, tout à fait. En fait, chaque base de données en fait l'ensemble des bases de données à l'heure actuelle va supporter ce qu'on appelle des bases vectorielles. Bases vectoriel, ça va être on parfois on on l'appelle vecteur ou un bendings. C'est-à-dire qu'on va utiliser un modèle pour transformer du texte ou une image en vecteur. En vecteur. Ici, on utilise un vecteur avec 1536 dimensions pour pouvoir ensuite faire des recherches de similarité. C'est-à-dire qu'on va, j'allais dire vectoriser ce que l'on a dans la base de données et ensuite en fonction de notre question, on va générer aussi un autre vecteur et on va comparer ces deux vecteurs. C'est ce qui va nous permettre de savoir ce qui est sémantiquement le plus proche. Et chacune des bases de données que ce soit SQL serveur, postgré, document DB ou consb SQL va nous permettre de stocker ces informations. Voilà ce nouveau type d'information. L'autre chose, c'est que toutes les bases ont aujourd'hui par exemple l'index puisque c'est très bien de stocker. Si j'ai 1 million de produits, 2 millions de produits, comment être efficace au niveau de ma recherche ? Dans une base de donnée, il y a pas de secret. Il faut utiliser ce qu'on appelle un index. Et là effectivement, on a des indexes de type qui permettent de d'optimiser la recherche vectorielle et notamment dis an qui a été intégré dans SQL, intégré dans PostG, intégré dans Document DB aussi dans Cosmos non SQL. Alors, on l'a pas mis parce qu'on l'utilise pas dans la démo, mais c'est tout à fait possible, hein, sachez-le. Ça c'est important. Donc, la notion de stockage de vecteur, la notion de vecteur euh qui permet de stocker les choses. Et puis bah dans Document DB, on est on utilise tout simplement une API Mongo euh et du code qui est du Mongo. Donc, on utilise Cosmosearch qui est une fonctionnalité que nous fournit l'API Mongo pour aller interroger notre base document DB. Si on regarde hein sur les bases de données, tout ont à peu près les mêmes types de fonctionnalités. Tu peux nous en dire plus ce qui a été utilisé les chars ? Oui, tout à fait. Donc tout d'abord, les fonctionnalités en terme d' vont pas être le différenciateur au niveau des bases de données. Le choix primaire va être surtout en fonction des compétences de et de la formation de vos équipes. Et les deux le l'axe va être base relationnelle ou base non relationnelle.
13:38Ensuite, au niveau des bases de données, on va retrouver comme on le disait un des nouveaux types de type vecteur, des fonctions pour calculer la distance ou le cosine entre deux vecteurs et bien sûr l'accès aussi à des modèles externes pour pouvoir générer les bending, pour pouvoir générer le vecteur et pouvoir le stocker ou voir au moment où on pose la question générer le vecteur pour pouvoir le comparer par la suite. Et là, vous allez retrouver sur l'ensemble des bases de données des fonctionnalités identiques ou très très similaires. La syntaxe va être un petit peu différente. Par exemple, pour PoseGR, on va parler d'extension pour pouvoir rajouter ces fonctionnalités là. Alors que par exemple dans SQL, ça va être native en fonction des versions. Voilà. Après l'autre chose c'est qu'il y a eu quelques nouveautés sur SQL comme notamment un driver natif Python qui a été rajouté dernièrement avant on utilisait souvent soit de l'odcb par on pass passer par des drivers intermédiaires. Donc on a utilisé ça dans l'application euh PG copy driver pour Postgress Pimongo Azure Cosmos SDK directement. Euh l'autre chose, c'est que effectivement on a pour illustrer rajouter des indexes composites pour faciliter la recherche notamment sur l'email et la date pour montrer que on n pas que des index simples dans Cosmos. Et puis euh dans document DB, on utilise la notion de vector search, notion d'agrégation qui est mis en place et on fait même du full texte et de l'hybride. Voilà, ça sachez-le, ça c'est important. C'est un ensemble de fonctionnalités finalement où la recherche de similarité ou le développement en Python peut se faire nativement en utilisant des SDK natifs sur n'importe quelle base. Et ça c'est important de retenir ça et surtout c'est un moyen de moderniser vos applications assez simplement ça avoir pour redesigner. Ah donc en gros qu'est-ce qui se passe hein quand on tape un texte ? il est envoyé à Europen qu'il le transforme en vecteur pour le stocker quand on rajoute un produit et puis ça met à jour l'index et ça va permettre effectivement de faire cette recherche là. Je tape le texte que je recherche, il envoyé Open AI, il va faire une comparaison au niveau de mes indexes de vecteur pour tous. Bah euh c'est du vecteur. Alors on peut avoir plusieurs tailles, on peut avoir plusieurs indexes mais dans SQL c'est natif. On a de la vecteur distance, on a de la distance type cosinus par exemple dans Postgress ou un vecteur search dans document DB pour faire cette recherche de similarité directement. Et ça c'est aujourd'hui c'est fourni nativement. D'accord ? Donc vous pouvez très bien dire je prends une base existante, je rajoute une colonne dans mon post grisse ou dans mon SQL, je la veux de type vecteur et voilà ce que je vais utiliser comme source pour réaliser mon vecteur. Après c'est souvent on nous pose la question qu'est-ce qu'on met qu'est-ce qu'on vectorise ? Ça dépend des recherches que vous voulez offrir d'un point de vue business, d'un point de vue fonctionnel plus que technique. Le technique aujourd'hui n'a pas de limite. La limite c'est est-ce qu'il est intéressant de rechercher par ville, par pays par exemple pour les clients ou est-ce qu'il est plus intéressant par rechercher par nom, prénom ? Et on va plutôt vectoriser ça. Voilà. Où on va vectoriser l'ensemble des choses. Faut juste faire attention à pas avoir ce qu'on appelle trop de bruit. Donc des informations qui sont pas existantes. Typiquement sur un catalogue produit en général, on vectorise la description du produit ou euh on peut imaginer sur des livre la description du livre qui va résumer ou avoir l'ensemble, l'auteur, le titre et cetera. Et arrête pas, si je me trompe, si la description est trop longue, on va chercher à faire des chunks, à savoir découper cette description pour la vectoriser et avoir peut-être plusieurs références de la même description. Ouais. Alors oui et non. C'est-à-dire que le le vecteur qui va être vectorisé, lui aura une taille fixe. Après effectivement, c'est souvent on envoie maximum, on va dire 3 4 5000 caractères. Une description d'un produit qui est fait plus de 5000 caractères, c'est assez rare. Le chunk est souvent utilisé plutôt pour la vectorisation de documents type PDF. OK. Quand je vais faire un rapport annuel par exemple où j'ai 30 40 pages, effectivement mes 30 40 pages vont pas être dans une seule chose mais je vais découper par page et faire une vectorisation par page. OK. Juste une petite précision, c'est que là on parle d'un modèle Azure Open AI, mais vous pouvez choisir le modèle que vous souhaitez puisque vous avez un accès à l'ensemble des modèles qui peuent puissent qui peut permettre de réaliser des impending. La vectorisation pour utiliser un mistral pour utiliser d'autres modèles sans aucun souci. Tout à fait très important à signaler. Et alors point de vue code, là je vois que tu nous montres la solution. C'est à quel moment que tu vas utiliser la recherche ? Voilà. Ah bah cette recherche de similarité finalement on peut le voir c'est un select tout simple d'accord sauf que dans mon select effectivement j'ai ici je vais lui dire je voudrais récupérer le customer ID le first name last name email et je lui dis je vais aller récupérer effectivement cette notion de similarity score et je vais utiliser ici alors je suis pour un postgresse au niveau du service cette notion euh ce ce ce mot clé là avec le ce qui est en biding par rapport à ma colonne vecteur et puis après effectivement je vais faire un order buy pour avoir celui qui a la plus grande similarité. Je vais être capable aussi d'avoir des des requêtes un petit peu plus complexes avec à la fois du full texte et à la fois de la similarité. D'accord ? Donc vraiment avoir cette cette capacité de jumeler de l'hybride search du full text search ou de l'hybrid search dans le code. Et ça aujourd'hui bah toutes les applications, qu'est-ce qu'elles ont ? raison au niveau de l'appar, je vais avoir exactement la même chose par exemple au niveau du SQL, d'accord ? Sauf que dans SQL, j'ai nativement un mot clé maintenant qui s'appelle vecteur distance tout simplement de type cosinus par rapport à mon vecteur et avoir ma distance. Donc pour tous, j'ai rajouté ces mots-clés au niveau du code SQL pour directement dans ma requête avoir je vais avoir la vecteur distance directement. Voilà comment ça se traduit. Emmanuel, tu nous as parlé de la similarité et qu'est-ce que tu peux nous dire au sujet du langage naturel pour pouvoir interroger une base de données ? Est-ce que c'est quelque chose qu'on peut faire simplement ? Ah, le langage naturel, c'estd qu'en gros pas dire je recherche tel produit mais être capable pour un utilisateur lambda de poser des questions langage naturel qui soient traduits quelque part en requête et exécuté. C'est ça que tu veux voir ? Vo voilà par exemple quel est le produit le plus vendu ou quel est le chiffre d'affaires sur le ter du trimestre ? Ce type de question quoi. Ouais. Par exemple clients qui on fait le plus de commandes. Est-ce que ça ça va tout à fait ça me va. Ça te va ? Et ben voilà c'est magique hein. Tu vois je pose la question ici et j'ai la réponse. Alors en gros, c'est pas si magique que ça. Qu'est-ce qui s'est passé ? Et bien tout simplement ici il a traduit cette information là. Quels sont les 10 clients avec le plus de commandes en une requête SQL qu'on peut voir ici qui a été générée en utilisant ce qu'on appelle un serveur MCP. Ce qui est intéressant c'est qu'on peut voir que ici j'ai un join. D'accord ? Donc oui, je peux faire combien de clients avons-nous ? Il va faire tout simplement une querie simple mais ici j'ai du group buy, d'accord ? J'ai de l'order buy, j'ai du join. Donc il est capable d'utiliser le modèle que je vais avoir au niveau de ma base de données et de réaliser cette requête là. Donc quels sont les clients qui sont à Paris par exemple ? Là ça va être une requête un petit peu plus simple. D'accord. Mais à pardon euh voilà, l'intérêt effectivement de ça, c'est que je vais être capable de la faire en n'importe rapport à n'importe quelle base. C'estàd que sur toutes les bases ici, on a mis un serveur ce qu'on appelle MCP. Euh, on expliquera un petit peu plus en détail qu'est-ce que c'est, mais que ça soit du Postgress, ça soit du document, que ça soit de l'Azure SQL, je vais être capable de poser les questions directement langage naturel et d'avoir la réponse. Euh pareil pour du cosmos, toutes les activités d'aujourd'hui, d'accord, il va être capable de euh me délivrer l'ensemble des activités euh par email. Euh voilà, donc je peux voir que Richard s'est connecté et ici il m'a généré ma requête par rapport à la date d'aujourd'hui. Donc il a traduit qu'aujourd'hui c'était le 27 avril euh directement. Donc combien était actif aujourd'hui ? Pareil, il va être capable de réaliser ses opérations pour du SQL, pour du document DB. L'autre chose qui est intéressante effectivement, c'est que je peux même faire ça, on va dire, dans n'importe quelle langue. Ici, je pose la question en langage naturel allemand, bah il est capable de générer directement à partir de la description que j'ai faite en allemand de l'information. Me demandez pas ce que ça veut dire ou quelle la requête que j'ai prise, s'il vous plaît. Mais voilà, c'est pour illustrer la puissance qu'on va pouvoir avoir directement. Donc être capable d'avoir cette notion là. Juste une petite question Emmanuel, si demain ton schéma change, par exemple ta table, elle change de nom ou j'allais dire il y a un S à la fin ou quelque chose comme ça, est-ce que ça continue à fonctionner ou il faut que tu recodes un certain nombre de choses ? Bah non, moi je vais appeler Richard pour qu'il recolte tout. Non non, je rigole. Bien sûr que ça peut fonctionner parce que on va vous montrer l'envers du décor. Ouais, parce que moi je vois très bien faire comment faire avec des dates à agents en fabrique, mais euh je devrais donner des instructions, je devrais aussi peut-être donner des queries d'exemples pour être sûr d'avoir le bon résultat attendu. Comment vous avez fait tout ça là ? Alors, c'est assez simple, hein. Euh, d'accord. On a créé ce qu'on appelle des serveurs MCP. Donc ici, si je vais dans mon serveur MCP Postgress, voilà le le code qui décrit mon MCP. Alors, effectivement, je peux décrire ma base de schéma, d'accord ? Et comme comme on peut l'avoir là, mais là, on l'a décrit plutôt en commentaire. L'idée d'un serveur SCP, c'est d'abord de dire, je vais aller récupérer le schéma de base et je vais être capable d'exécuter une requête. Donc, en gros, je vais avoir principalement deux méthodes qui vont être mis en place. Et qu'est-ce qui se passe ? D'accord ? Et ben ici, je vais lui dire allez récupérer le schéma de base. C'est quoi ? c'est tout simplement être capable d'aller récupérer toutes les les les tables qui sont mis en place en récupérant les colonnes name les datatypes en utilisant les tables de métadonnées du de la métatable quelque part de la base. C'est que la base a la description de ces informations et comme ça je vais récupérer ces informations.
24:51Effectivement si le nom de la colonne change, bah ça continuera à fonctionner. Ouais. Et surtout, on peut aussi aller plus loin. C'est-à-dire que des fois, on a aussi un MDM qui décrit nos données avec des descriptions et cetera. On peut aussi s'alimenter dessus pour savoir à quel à quoi correspond une colonne d'un point de vue, j'allais dire sémantique. Oui. Donner des discussions à tes objets. Voilà. Voilà. Tout à fait. Et donc j'ai ça pour mon SQL, pour mon cosmos. Pour chacun, j'ai cette notion de serveur MCP qui a été développé, qui a été mis en place et qui me permet de faire ça. Et ensuite pour aider aussi le LLM, on va pouvoir développer aussi des tools comme là on a du get database Kima, mais qui peuvent être plus spécifiques en terme de fonctionnel qui vont peut-être s'apparenter un petit peu à ce que tu disais Romain, tes exemples de requête. Mais là pour un besoin spécifique, on sait que on va le chercher comme ça, on va lui faciliter la vie même s'il est capable de le faire. Donc si on on reprend hein, qu'est-ce que on fait ou qu'est-ce qu'on a ? Bah l'idée c'est effectivement du langage naturel qui va générer une requête et exécuter la requête. Alors, l'exécution de la requête finalement c'est la partie la plus simple he mais l'idée c'est je pose ma question la question en utilisant du JPT alors là on utilisé du 40 on pourrait utiliser 52 on pourrait utiliser du mistral on pourrait utiliser du cloud on pourrait utiliser on va dire n'importe quel de vos de vos schémas même vos propres systèmes qui vont transformer soit en TSQL et me traduire soit en postgrèce directement soit en document deb en une agrégation soit en cosmos no SQL et tout ça effectivement ça va me générer la requête. Ensuite, je fais un check comme quoi par exemple c'est que du select parce que je peux c'est c'est ce que moi j'ai fait. C'est pour ça que tout à l'heure quand il a mis en place avec le créate, il a empêché cette création. C'est aussi pour des raisons de sécurité par exemple et ensuite je vais exécuter ma requête dans le contexte de l'utilisateur qui a demandé la la question. Donc je suppose que c'est sécurisé aussi par rapport à ça. Tout à fait. C'est c'est en fait ce qu'on fait c'est qu'on propage les créd jusqu'à la base de données pour que si l'utilisateur ne peut voir que l'enregistrement 1, il va pouvoir retrouver que l'enregistrement 1. Là la grosse différence c'est que avec le MCP c'est qu'on est dans le contexte de la base de données. C'està-dire que le LM va chercher les données, le les métada comme vous l'indiquez, il va pouvoir récupérer la requête mais vu qu'il peut aussi l'exécuter, si ça peut arriver, il a fait une erreur dans la génération de la requête, il voit qu'il y a une erreur et à ce moment-là en fonction du retour du code d'erreur, il est capable de la recorriger pour avoir un résultat satisfaisant. Voilà. Et donc ça c'est bah tout simplement je rajoute un serveur MCP alors qui ici a été écrit en Python, je pourrais écrire aussi dans d'autres langage qui va s'interfacer avec la database. Et puis c'est bien précisé ici hein. Donc c'est un open standard he la notion de MCP c'est un protocole. Et puis d'abord qu'est-ce que je vais faire ? Je vais aller rechercher, laisser découvrir les tables, les colonnes de telle manière effectivement à ce que si Richard me fait un altertable et rename la colonne en avec un S ou quelque chose, bah je sois capable toujours d'exécuter. Ça c'est pas du glucode hein, c'est pas du du code endure. C'est vraiment l'agent qui va découvrir et utiliser les datas. Après aussi pour la sécurité en terme de garde fou, effectivement on peut mettre un garde-fous au niveau du MCP mais surtout on va mettre des les permissions qui vont bien au niveau de la base de données. On va pas autoriser les altères, les choses comme ça pour éviter toute erreur quoi. Et alors vous avez un MCP pour l'ensemble de toutes les bases ou vous avez un MCP par base de données ? Alors la là ce qui a été développé c'est effectivement plusieurs MCP. Pourquoi aussi ? parce que bah aujourd'hui Microsoft fournit par exemple un serveur MCP postgress serveur qui n'a même pas besoin d'être écrit par moi-même et que je pourrais utiliser ou pareil pour SQL qui a un certain nombre de fonctionnalités. Là ce qu'on a fait effectivement on a quatre quatre MCP différents. Pourquoi ? parce que le code qui est généré, bah un Cosmos SQL n'a rien à voir avec un SQL standard, on va dire MCP SQL ou un Postgress pareil quoi. Donc c'est important et puis chacun pour aller récupérer le schéma de la base va utiliser les métadonnées de de chacun des des serveurs de chacun des types de base de données. Donc c'est pour ça qu'on a effectivement un serveur de type SQL MCP, un serveur de type posts, un serveur de type document DB et un serveur de type Cosmos DP. Alors, tu as utilisé document DB pour stocker les statistiques d'activité. Pourquoi document DB plus qu'une autre type de base de données pour ce besoin ? Voilà, tout à fait. On a utilisé donc des bases relationnelles et puis des bases no SQL. Les bases No SQL, donc un document DB et un Cosmos. Alors ici, par exemple, je peux avoir le journal d'activité avec le nombre d'activités par utilisateur, par jour. C'est ce que je vois. Si je vais un petit peu plus dans le détail et que je montre quel est euh le code ou comment sont stocké. Donc je sais pas si vous vous rappelez, tout à l'heure, j'ai fait une commande pour un monsieur qui s'appelait Fabrique Fabrice et j'ai fait plusieurs actions sur des events, hein. Le Delivery a été créé, il a été assigné à un partenaire, ensuite il a été dispatché et puis le package a été en transit et of delivery. Finalement, à chaque action que le partenaire va faire, ça va rajouter un nouvel événement et ça c'est typique du stockage mais en gros dans un un tableau d'événement et le no SQL est vraiment adapté à ça. Ici, je peux voir que j'ai même généré l'embediding euh du contenu, hein, qui est qui est stocké, mais cette notion de de partenaire qui est mis en place. L'autre chose que j'ai aussi et pourquoi par exemple sur les événements, bah c'est de dire voilà pour un utilisateur sur une journée finalement je vais avoir toute l'ensemble de son activité et vous pouvez voir qu'à partir de ça, je suis capable d'avoir des jolis graphiques qui me permettent de d'illustrer ça. Voilà, c'est cette idée-là de dire je vais stocker dans des
Conclusion et perspectives
31:12tableaux de sous-documents un certain nombre d'informations par jour pour optimiser le stockage et la recherche parce que finalement souvent on va se dire tiens quel quelles sont les fonctionnalités qu' a fait Emmanuel tel jour ou tel jour ou telle semaine et aller chercher beaucoup moins d'informations ou de type. Et donc là, le NO SQL est vraiment adapté à ce type de stockage euh directement et c'est pour ça qu'on a utilisé plutôt là-dessus des euh types No SQL. OK, super. Merci pour cette démonstration. Donc on revoit ici l'architecture hein avec tes différentes bases de données avec l'usage de Azure Open AI pour créer les les vecteurs, enfin plutôt les unbeding et euh les MCP serveur qui va te permettre après de contacter les différentes bases de données en connaissance ben des métadonnées, en connaissance de des fonctions peut-être qui leur sont propres. Je crois que tu as un GitHub. Vous avez un GitHub dans lequel on peut tester cette application l'art des ployé chez nous. Tout à fait tout à fait. Donc il y a un GitHub, on va vous le montrer, mais effectivement un utilisateur, il a une application flask. D'accord ? Celle-ci ensuite va se connecter à la fois au SQL, au Postgress, au document, au Cosmos. Utiliser donc quand des fois un MCP serveur si je fais une demande ou de l'open pour la partie recherche de similarité. Et effectivement le GitHub, alors hop, pardon. Le GitHub, le voici. Euh si vous allez sur mon GitHub, on mettra le lien dans les commentaires de la vidéo. Ouais. Donc sur mon GitHub, vous avez l'application Flask Multidémo avec le projet qui est expliqué, les notions de MCP, la structure du projet, euh comment le déployer directement, quels sont toutes les environnements à configurer, voilà avec la petite workflow sur l'application, les différents MCP, comment il faut intégrer. Donc vous pouvez effectivement le reproduire directement chez vous. Euh chose importante effectivement, c'est que euh d'autres parties de l'IA sont utilisées comme la génération des images. Euh donc à garder à l'esprit et l'autre chose c'est que on utilise effectivement les bases mais les images ne sont pas stockées dans une base. D'accord ? Dans la base, je vais utiliser un lien vers un un storage Azure et mes bases sont stockées dans un storage Azur. Voilà. Donc en conclusion, ben l'objectif de cette démo, c'était de vous présenter les interactions entre les bases de données existantes et de l'AI et surtout comment moderniser l'existant sans avoir à tout recoder en utilisant des fonctionnalités de type AI tel que la recherche sémantique ainsi que le langage naturel tout est-ce que là pour pouvoir générer vos requêtes et ainsi ouvrir vos données à tous les utilisateurs et non pas seulement les utilisateurs qui son technique. Ouais, on peut dire que l'I ne remplace pas les bases de données, elle les révèle que ce soit les performances, la sécurité, la gouvernance reste toujours des sujets de data, d'architecture. Mais il y a vient rajouter une nouvelle couche peut-être pour mieux comprendre, interagir et automatiser avec nos données. Si vous avez des questions, des retours d'expérience ou si vous souhaitez creuser un point en particulier, n'hésitez pas à le mettre en commentaire. Encore une fois, merci Richard Emmanuel. Super démo, super échange. Merci à vous d'avoir suivi l'épisode sur Fard Data. On vous dit à très vite et d'ici là, abonnez-vous à la chaîne. À bientôt. À bientôt.