#Generative AI (GenAI)

0 Abonnés · 11 Publications

IA générative désigne les algorithmes et les modèles en intelligence artificielle qui sont capables de générer de nouvelles données ou un contenu similaire à des données existantes. Ces modèles sont formés sur de vastes ensembles de données et apprennent à générer de nouveaux exemples qui imitent les modèles et les caractéristiques des données d'origine.

Annonce Irène Mykhailova · Sept 29, 2025

Bonjour à la communauté,

Nous sommes ravis de vous présenter un tout nouveau tutoriel Instruqt :

🧑‍🏫 RAG avec InterSystems IRIS Vector Search

Ce laboratoire pratique vous guide dans la création d'un chatbot IA basé sur la génération augmentée de récupération (RAG) et optimisé par InterSystems IRIS Vector Search. Vous découvrirez comment la recherche vectorielle peut être exploitée pour fournir des réponses actualisées et précises, en combinant les atouts d'IRIS et de l'IA générative.

✨ Pourquoi l'essayer ?

0
0 21
Article Sylvain Guilbaud · Sept 25, 2025 7m read

artisan cover

Si vous avez jamais observé un véritable artisan, qu'il s'agisse d'un potier transformant de l'argile en chef-d'œuvre ou d'un luthier donnant vie à un morceau de bois brut pour en faire une magnifique guitare, vous savez que la magie ne réside pas dans les matériaux, mais dans le soin, le savoir-faire et le traitement. Je le sais d'expérience : ma guitare électrique faite à la main est une source d'inspiration quotidienne, mais je dois avouer que créer quelque chose de ce genre est un don qui me manque.

Pourtant, dans le monde numérique, je vois souvent des gens qui espèrent que l'IA générative leur apporte une "solution miracle" en leur proposant des instructions vagues et hors contexte telles que "créez une application". Les résultats sont généralement décevants, sans aucune finesse ni créativité. Trop de gens attendent de l'IA qu'elle fasse des miracles sans contexte ni structure. Voilà ce qui nous a poussés à créer dc-artisan, un outil destiné aux artisans du prompt numérique. Notre objectif est de permettre à quiconque de transformer des prompts approximatifs et vagues en chefs-d'œuvre efficaces, fonctionnels et riches en contexte..

Tout comme lorsqu'on observe un grand artisan transformer des matières premières en œuvres d'art, créer avec GenAI est une question d'intention, de préparation et de travail minutieux. Le problème ne réside pas dans l'IA en soi, mais dans la manière dont nous l'utilisons. Tout comme un luthier doit sélectionner et façonner chaque morceau de bois avec soin, une ingénierie efficace des prompts nécessite un contexte, une structure et une intention bien définis.

Nous pensons que le monde mérite mieux que des "suggestions magiques" qui mènent à la déception. Une IA générative puissante est le fruit d'un accompagnement humain minutieux : un contexte précis, des objectifs concrets et une structure élaborée. Aucun artisan ne crée de la beauté par hasard : pour être fiables, les résultats d'une IA doivent être préparés avec soin.

dc-artisan aborde l'ingénierie rapide comme un véritable artisanat : de manière systématique, didactique et vérifiable. Il offre une boîte à outils complète pour aller au-delà des essais, des erreurs et des conjectures.

La première chose que fait dc-artisan est de chercher à comprendre votre prompt comme le ferait un collaborateur attentif. Lorsque vous commencez à rédiger, l'outil interagit directement avec vos entrées:

  • Questions de clarification: dc-artisan analyse votre demande initiale et vous pose des questions pertinentes afin de déterminer votre objectif principal, votre audience cible, le format souhaité et tout élément manquant. Par exemple:
    • “Quel type de résultat attendez-vous : un résumé textuel, un code ou des données structurées?”
    • “Quelle est l'audience cible?”
    • “Avec quel type de données ou d'informations ce prompt sera-t-il utilisé?”

prompt enhance

Ces interactions vous aident à clarifier non seulement ce que vous voulez que votre prompt dise, mais aussi pourquoi il le fait.

Une fois votre intention claire, dc-artisan examine la structure et propose des suggestions personnalisées afin d'améliorer la clarté, le ton et de compléter les détails manquants essentiels à un résultat riche en contexte et prêt à l'emploi.

Le meilleur dans tout ça? Vous pouvez utiliser toutes ces fonctionnalités directement dans votre éditeur préféré, VS Code ! Vous pouvez insérer des variables directement dans votre prompt (comme {task} ou {audience}) pour plus de flexibilité et de réutilisabilité, et prévisualiser instantanément le résultat final avec différentes substitutions. Vous voyez ainsi exactement comment cela fonctionnera dans la pratique.

Mais ce n'est pas tout. dc-artisan prend en charge le réglage rapide des prompts pour des performances optimales. Téléchargez un fichier CSV contenant des cas de test afin d'évaluer automatiquement la cohérence, la qualité des résultats et l'impact de la structure de vos prompts sur des entrées variées. dc-artisan évalue chaque réponse et génère des rapports complets avec des scores de qualité et des mesures de similarité, afin que vous puissiez mesurer et optimiser l'efficacité de vos prompts en toute confiance.

testing

Promouvoir sans contexte n'est pas un art, c'est du chaos

L'ingénierie des prompts sans structure revient à sculpter du bois les yeux bandés. Vous obtiendrez peut-être quelque chose, mais cela ne produira probablement pas un air mélodieux.

De nombreuses personnes ont recours à des prompts vagues ou surchargés, c'est-à-dire des commandes courtes et ambiguës ou des pages de contenu brut sans structure. Soit le modèle n'a aucune idée de ce que vous voulez, soit il se perd dans un marécage de bruit.

Lorsque le contexte du prompt devient trop long ou trop confus, même les LLM avancés peuvent se perdre. Au lieu de raisonner ou de générer de nouvelles stratégies, ils se laissent souvent déconcentrer, répétant le contenu précédent ou s'en tenant à des schémas familiers issus du début de l'historique des prompts. Ironiquement, les modèles plus volumineux avec des fenêtres contextuelles plus grandes (comme 32 000 tokens) sont encore plus sensibles à ce phénomène. Le simple fait de fournir plus de contexte (plus de documents, des prompts plus longs, des bases de connaissances entières) se retourne souvent contre vous, entraînant une surcharge contextuelle, des objectifs manqués et des résultats confus.

C'est précisément cette lacune que le RAG ( Génération augmentée par la récupération) vise à remplir : non pas en donnant plus d'informations aux LLM, mais en leur fournissant les connaissances les plus pertinentes au bon moment.

Comment dc-artisan et le mode pipeline RAG peuvent vous aider

dc-artisan unifie la création rapide de prompts et la gestion du contexte. Il vous aide non seulement à rédiger de meilleurs prompts, mais garantit également que votre IA reçoit des informations pertinentes et sélectionnées, et non un flot incessant d'informations futiles.

Avec le mode pipeline RAG vous pouvez:

  • 📄 Téléchargement et fragmentation des documents: PDF, DOCX, Markdown, TXT — à intégrer facilement dans votre base de données vectorielle.
  • 🧬 Inspection des fragments: à visualiser avec précision chaque unité atomique du texte intégré.
  • 🗑️ Nettoyage intelligent: à supprimer directement les contenus indésirables ou obsolètes depuis l'extension, afin que la base de connaissances de votre IA reste organisée et pertinente.

rag

Ce flux de travail est inspiré par le portail InterSystems Ideas Portal (see DPI-I-557)

Voici comment vous pouvez intégrer en toute simplicité une nouvelle section sur l'architecture backend de dc-artisan juste avant la section "Conclusion", en mettant en avant l'intégration avec l'interopérabilité InterSystems IRIS et notre adaptateur liteLLM personnalisé.

Ce qui distingue vraiment dc-artisan, c'est son backend robuste, conçu pour offrir à la fois interopérabilité et flexibilité. Le moteur de l'extension fonctionne sur L'interopérabilité InterSystems IRIS, en utilisant un adaptateur liteLLM personnalisé que nous avons développé.

Cette architecture signifie que vous n'êtes pas lié à un seul fournisseur de modèles linguistiques de grande taille (LLM). Au contraire, vous pouvez vous connecter et passer de manière transparente entre une large gamme de plateformes LLM de premier plan, notamment OpenAI, Gemini, Claude, Azure OpenAI, et bien d'autres, toutes gérées à partir d'un backend unifié de niveau entreprise.

Conclusion

De plus en plus de développeurs découvrent que la suggestion ne consiste pas à deviner les "mots magiques". Il s'agit plutôt de définir des objectifs réfléchis, d'utiliser un langage clair et de fournir un contexte pertinent, en rédigeant des prompts comme des ingénieurs, et non comme des magiciens. Tout comme les luthiers façonnent le bois pour créer des instruments dotés d'une âme, vous pouvez façonner des prompts pour créer des flux de travail IA à la fois fiables et riches en contexte à l'aide d'outils conçus spécialement pour votre métier.

dc-artisan est plus qu'un outil, c'est un changement de mentalité qui passe du codage intuitif à la clarté, la précision et au véritable art numérique.

🎸 Prêt à créer vos propres prompts?
⚙️ Lancez VS Code, installez dc-artisan et commencez à façonner votre IA comme un artisan, pas comme un magicien.

🗳️ Et si vous aimez ce que nous avons créé, votez pour nous dans le cadre du concours InterSystems IRIS Dev Tools Contest. Votre soutien compte beaucoup pour nous!

dc-artisan

0
0 21
Article Lorenzo Scalese · Mai 7, 2025 6m read

Introduction

À mesure que l'automatisation pilotée par l'IA devient un élément essentiel des systèmes d'information modernes, l'intégration des capacités d'IA dans les plateformes existantes doit être transparente et efficace. Le projet IRIS Agent montre comment l'IA générative peut fonctionner sans effort avec InterSystems IRIS, grâce à son puissant cadre d'interopérabilité, sans qu'il soit nécessaire d'apprendre Python ou de créer des workflows d'IA distincts à partir de zéro.
Ce projet examine la manière dont ChatGPT et Anthropic Claude, deux modèles d'IA parmi les plus avancés, peuvent interagir avec IRIS à l'aide de GPT personnalisés et du protocole MCP (Model Context Protocol). Plutôt que de créer des pipelines d'IA isolés, IRIS Agent traite l'IA comme un service d'interopérabilité, permettant ainsi aux organisations d'améliorer l'automatisation, la prise de décision et le traitement des données sans perturber leur architecture existante.
En s'appuyant sur des outils d'interopérabilité natifs d'IRIS, les développeurs peuvent intégrer des modèles d'IA de manière transparente, comme n'importe quel autre composant du système. Cette approche garantit la stabilité, la sécurité, l'évolutivité et l'auditabilité, tout en permettant une interaction en langage naturel, la récupération de données en temps réel et l'administration automatisée du système, le tout dans l'environnement familier d'IRIS.

Technologies sous-jacentes à IRIS Agent

Le projet IRIS Agent s'appuie sur un ensemble de technologies puissantes pour garantir efficacité, évolutivité et intégration transparente:

  • InterSystems IRIS – Une plateforme robuste dédiée au développement d'applications et à l'intégration de données, qui utilise ObjectScript pour le code côté serveur.
  • Custom GPT Bot – Un assistant IA personnalisé conçu pour rationaliser les interactions avec le système, basé sur ChatGPT.
  • Claude AI Desktop – Facilite la communication avec le serveur via le protocole MCP (Model Context Protocol).
  • Node.js – Gère les communications avec le serveur MCP
  • OpenAPI – Documentation API standardisée.
  • Docker – Compartimente l'application pour simplifier le déploiement et la gestion des dépendances.

Présentation interne

Voici à quoi ressemble notre projet sous le capot IRIS:

La Production comprend les éléments suivants:

  • LanguageModelIn: un service qui reçoit une requête API et la redirige vers l'opération responsable.
  • Meds: une opération qui recherche des médicaments sur une API tierce.
  • Metrics: une opération qui recherche des informations OPS telles que les journaux, les erreurs et les messages dans le système Iris.
  • Namespaces: une opération qui répertorie, recherche et modifie les espaces de noms dans le système Iris.
  • Users: une opération qui répertorie, recherche, crée et supprime des utilisateurs dans le système Iris.

Le fonctionnement du service est particulièrement visible dans l'afficheur de messages et les traces. Il peut nous aider à suivre les opérations et à diagnostiquer les problèmes, par exemple les requêtes:

…et les réponses:


L'un des points forts de ce projet réside dans le fait que le service LanguageModelIn génère automatiquement une documentation API ouverte pour les opérations métier dans le cadre de la production IRIS Interoperability. Cette API  nous permet de connecter facilement les GPT personnalisés à ChatGPT et au serveur MCP (Model Context Protocol) à Claude AI Desktop. 

Intégration avec ChatGPT 

Après avoir terminé tous les processus d'installation et de configuration, que vous trouverez dans notre fichier ReadMe, ReadMe, demandons à notre agent IRIS GPT d'OpenAI quelles sont ses fonctionnalités actuelles:

  

Et créez un nouvel utilisateur…

   


Vérification des mises à jour...

   

Intégration avec des Sources de données externes

L'une des fonctionnalités remarquables de l'agent IRIS est sa capacité à interroger de manière transparente non seulement les données stockées dans la base de données InterSystems IRIS, mais également des sources de données externes. Dans notre exemple, l'agent s'intègre à l'OpenFDA API pour fournir des informations en temps réel sur les médicaments. Cela permet aux utilisateurs de rechercher des informations sur les médicaments, des rapports de sécurité et des données de conformité réglementaire directement dans le système. 
Dans notre projet, l'API offre la possibilité de rechercher des médicaments par leur nom. Recherchons donc les médicaments dont le nom contient le mot "flu".

   

Si vous souhaitez l'essayer dès maintenant, suivez le lien et engagez une conversation avec notre IRIS Agent démo.

Intégration avec Claude AI Desktop

L'une des fonctionnalités clés de l'agent IRIS est sa capacité à interagir avec Claude AI Desktop, un assistant IA local développé par Anthropic. L'intégration est assurée par le protocole MCP (Model Context Protocol), qui facilite la communication entre Claude et les applications externes. Pour ce faire, l'agent IRIS utilise un serveur MCP Node.js dédié qui sert d'intermédiaire, traitant les requêtes entrantes et les acheminant entre Claude et le système IRIS.
Cette configuration permet aux utilisateurs d'interagir directement avec l'agent IRIS via l'interface Claude, en émettant des commandes en langage naturel pour récupérer des données système, gérer les configurations et exécuter des tâches administratives. Le serveur MCP garantit un échange de données fluide, tout en maintenant l'efficacité et la sécurité, et fournit aux administrateurs un assistant puissant basé sur l'IA pour la gestion du système.

         

Conclusion

Le projet IRIS Agent présente le potentiel de l'automatisation pilotée par l'IA dans les environnements d'entreprise modernes. En intégrant de manière transparente InterSystems IRIS, Claude AI et Custom GPT, il simplifie la gestion des systèmes, améliore l'efficacité et ouvre la voie à de futures innovations. Notre projet démontre également que vous êtes déjà prêt pour la révolution de l'IA avec InterSystems IRIS!


Si vous avez apprécié la découverte d'IRIS Agent et de ses fonctionnalités et que vous souhaitez nous soutenir, veuillez prendre quelques instants pour voter pour notre application ici https://openexchange.intersystems.com/contest/40. Je vous remercie!


Développeurs de projet:

Banksia Global est une société de conseil technologique de premier plan qui aide les organisations à exploiter pleinement le potentiel des solutions modernes de gestion des données. En mettant l'accent sur la plateforme InterSystems IRIS, Banksia Global fournit des conseils stratégiques, des services d'intégration de systèmes et de développement de logiciels personnalisés à des clients issus de divers secteurs. Son expertise réside dans la fourniture de solutions hautement performantes et évolutives qui permettent aux entreprises de stimuler l'innovation, de rationaliser leurs opérations et de saisir de nouvelles opportunités. Réputée pour son approche collaborative et agile, Banksia Global travaille en étroite collaboration avec ses clients afin de s'assurer que chaque solution est adaptée à leurs besoins spécifiques, favorisant ainsi des partenariats à long terme et une croissance durable.

0
0 59
Annonce Irène Mykhailova · Mars 14, 2025

Bonjour à tous,

Voici le premier concours de programmation de l'année, et une surprise vous attend ! Lisez la suite !

🏆 Concours de programmation InterSystems IA : Recherche vectorielle, GenAI et agents IA 🏆

Durée : du 17 mars au 6 avril 2025

Prix : 12 000 $ + une chance d'être invité au Sommet mondial 2025 !


0
0 27
Article Rahul Singhal · Mars 3, 2025 6m read

Introduction

Pour atteindre des performances optimisées en matière d'IA, une explicabilité robuste, une adaptabilité et une efficacité dans les solutions de santé, InterSystems IRIS sert de fondation centrale pour un projet au sein du cadre multi-agent x-rAI. Cet article offre une analyse approfondie de la manière dont InterSystems IRIS permet le développement d'une plateforme d'analyse de données de santé en temps réel, permettant des analyses avancées et des informations exploitables. La solution exploite les points forts d'InterSystems IRIS, notamment le SQL dynamique, les capacités natives de recherche vectorielle, la mise en cache distribuée (ECP) et l'interopérabilité FHIR. Cette approche innovante s'aligne directement sur les thèmes du concours « Utilisation du SQL dynamique et SQL intégré », « GenAI, recherche vectorielle » et « FHIR, DME », démontrant une application pratique d'InterSystems IRIS dans un contexte critique de santé.

Architecture du système

L'Agent Santé dans x-rAI repose sur une architecture modulaire intégrant plusieurs composants :

Couche d'ingestion des données : Récupère les données de santé en temps réel à partir de dispositifs portables via l'API Terra.

Couche de stockage des données : Utilise InterSystems IRIS pour stocker et gérer les données de santé structurées.

Moteur analytique : Exploite les capacités de recherche vectorielle d'InterSystems IRIS pour l'analyse de similarité et la génération d'informations.

Couche de mise en cache : Implémente la mise en cache distribuée via le protocole Enterprise Cache Protocol (ECP) d'InterSystems IRIS pour améliorer l'évolutivité.

Couche d'interopérabilité : Utilise les normes FHIR pour s'intégrer aux systèmes externes de santé comme les DME.

Voici un diagramme d'architecture à haut niveau :

text [Dispositifs portables] --> [API Terra] --> [Ingestion des données] --> [InterSystems IRIS] --> [Moteur analytique] ------[Couche de mise en cache]------ ----[Intégration FHIR]----- Mise en œuvre technique

  1. Intégration des données en temps réel avec SQL dynamique

L'Agent Santé ingère des métriques de santé en temps réel (par exemple, fréquence cardiaque, pas effectués, heures de sommeil) depuis des dispositifs portables via l'API Terra. Ces données sont stockées dans InterSystems IRIS à l'aide du SQL dynamique pour une flexibilité dans la génération des requêtes.

Implémentation du SQL dynamique

Le SQL dynamique permet au système de construire adaptativement des requêtes basées sur les structures des données entrantes.

text def index_health_data_to_iris(data): conn = iris_connect() if conn is None: raise ConnectionError("Échec de la connexion à InterSystems IRIS.") try: with conn.cursor() as cursor: query = """ INSERT INTO HealthData (user_id, heart_rate, steps, sleep_hours) VALUES (?, ?, ?, ?) """ cursor.execute(query, ( data['user_id'], data['heart_rate'], data['steps'], data['sleep_hours'] )) conn.commit() print("Données indexées avec succès dans IRIS.") except Exception as e: print(f"Erreur lors de l'indexation des données : {e}") finally: conn.close() Avantages du SQL dynamique

Permet une construction flexible des requêtes basée sur les schémas des données entrantes.

Réduit la charge de développement en évitant les requêtes codées en dur.

Facilite l'intégration transparente de nouvelles métriques sans modifier le schéma de la base.

  1. Analytique avancée avec recherche vectorielle

Le type natif vector et les fonctions de similarité d'InterSystems IRIS ont été utilisés pour effectuer une recherche vectorielle sur les données de santé. Cela permet au système d’identifier les dossiers historiques similaires aux métriques actuelles d’un utilisateur.

Flux de travail pour la recherche vectorielle

Convertir les métriques de santé (par exemple, fréquence cardiaque, pas effectués, heures de sommeil) en une représentation vectorielle.

Stocker ces vecteurs dans une colonne dédiée dans la table HealthData.

Effectuer des recherches basées sur la similarité à l'aide de VECTOR_SIMILARITY().

Requête SQL pour la recherche vectorielle

text SELECT TOP 3 user_id, heart_rate, steps, sleep_hours, VECTOR_SIMILARITY(vec_data, ?) AS similarity FROM HealthData ORDER BY similarity DESC; Intégration Python

text def iris_vector_search(query_vector): conn = iris_connect() if conn is None: raise ConnectionError("Échec de la connexion à InterSystems IRIS.") try: with conn.cursor() as cursor: query_vector_str = ",".join(map(str, query_vector)) sql = """ SELECT TOP 3 user_id, heart_rate, steps, sleep_hours, VECTOR_SIMILARITY(vec_data, ?) AS similarity FROM HealthData ORDER BY similarity DESC; """ cursor.execute(sql, (query_vector_str,)) results = cursor.fetchall() return results except Exception as e: print(f"Erreur lors de la recherche vectorielle : {e}") return [] finally: conn.close() Avantages de la recherche vectorielle

Permet des recommandations personnalisées grâce à l’identification des tendances historiques.

Améliore l’explicabilité en reliant les métriques actuelles à des cas passés similaires.

Optimisé pour des analyses rapides grâce aux opérations SIMD (Single Instruction Multiple Data).

  1. Mise en cache distribuée pour l’évolutivité

Pour gérer efficacement le volume croissant des données, l’Agent Santé utilise le protocole Enterprise Cache Protocol (ECP) d’InterSystems IRIS. Ce mécanisme réduit la latence et améliore l’évolutivité.

Caractéristiques clés

Mise en cache locale sur les serveurs applicatifs pour minimiser les requêtes vers la base centrale.

Synchronisation automatique garantissant la cohérence entre tous les nœuds du cache.

Évolutivité horizontale permettant l’ajout dynamique de serveurs applicatifs.

Avantages du caching

Réduction des temps de réponse grâce à la mise en cache locale.

Amélioration de l’évolutivité grâce à la répartition des charges entre plusieurs nœuds.

Réduction des coûts d’infrastructure grâce à une moindre sollicitation du serveur central.

  1. Intégration FHIR pour l’interopérabilité

Le support d’InterSystems IRIS pour FHIR (Fast Healthcare Interoperability Resources) garantit une intégration fluide avec les systèmes externes comme les DME.

Flux FHIR

Les données issues des dispositifs portables sont transformées en ressources compatibles FHIR (par exemple Observation, Patient).

Ces ressources sont stockées dans InterSystems IRIS et accessibles via des API RESTful.

Les systèmes externes peuvent interroger ou mettre à jour ces ressources via des points d’accès standard FHIR.

Avantages

Assure la conformité avec les normes d’interopérabilité en santé.

Facilite un échange sécurisé des données entre systèmes.

Permet une intégration avec les flux et applications existants dans le domaine médical.

IA explicable grâce aux informations en temps réel

En combinant les capacités analytiques d’InterSystems IRIS avec le cadre multi-agent x-rAI, l’Agent Santé génère des informations exploitables et explicables. Par exemple :

« L’utilisateur 123 avait des métriques similaires (Fréquence cardiaque : 70 bpm ; Pas : 9 800 ; Sommeil : 7 h). Sur la base des tendances historiques, il est recommandé de maintenir vos niveaux actuels d’activité. »

Cette transparence renforce la confiance dans les applications IA dédiées à la santé en offrant un raisonnement clair derrière chaque recommandation.

Conclusion

L’intégration d’InterSystems IRIS dans l’Agent Santé du cadre x-rAI illustre son potentiel comme plateforme robuste pour construire des systèmes IA intelligents et explicables dans le domaine médical. En exploitant le SQL dynamique, la recherche vectorielle, la mise en cache distribuée et l’interopérabilité FHIR, ce projet fournit des informations exploitables et transparentes—ouvrant ainsi la voie à des applications IA plus fiables dans des domaines critiques comme celui de la santé.

0
0 45
Article Guillaume Rongier · Nov 6, 2024 7m read

Nous poursuivons cette série d'articles sur les applications LLM et RAG et dans cet article nous traiterons de la partie encadrée en rouge du diagramme ci-dessous:

Lors de la création d'une application RAG, il est tout aussi important de choisir un modèle LLM qui réponde à vos besoins (formation dans le domaine correspondant, coût, rapidité, etc.) que de définir clairement le contexte que vous souhaitez lui fournir. Commençons par définir le terme afin d'être clair sur ce que nous entendons par contexte.

Qu'est-ce que le contexte?

Le contexte fait référence à des informations supplémentaires obtenues à partir d'une source externe, telle qu'une base de données ou un système de recherche, afin de compléter ou d'améliorer les réponses générées par un modèle linguistique. Le modèle linguistique utilise ces informations externes pertinentes pour générer des réponses plus précises et plus détaillées plutôt que de s'appuyer uniquement sur ce qu'il a appris au cours de sa formation. Le contexte permet d'actualiser les réponses et de les aligner sur le sujet spécifique de la requête.

Ce contexte peut provenir d'informations stockées dans une base de données avec un outil similaire à celui montré par notre cher membre de la communauté @José Pereira вйты суе article ou d'informations non structurées sous la forme de fichiers texte que nous alimenterons avec le LLM, ce qui sera le cas que nous allons discuter ici.

Comment générer le contexte de notre application RAG?

Tout d'abord, la chose la plus indispensable est évidemment de disposer de toutes les informations que nous considérons comme pertinentes pour les éventuelles requêtes qui seront formulées à l'encontre de notre demande. Une fois ces informations organisées de manière à être accessibles depuis notre application, nous devons être en mesure d'identifier, parmi tous les documents disponibles dans notre contexte, ceux qui se rapportent à la question spécifique posée par l'utilisateur. Dans notre exemple, nous disposons d'une série de documents PDF (notices de médicaments) que nous voulons utiliser comme contexte possible pour les questions posées par les utilisateurs de notre application.

Cet aspect est essentiel au succès d'une application RAG ; il est tout aussi mauvais pour la confiance d'un utilisateur de répondre par des généralisations et des affirmations vagues typiques d'un LLM que de répondre avec un contexte complètement erroné. C'est là qu'interviennent nos précieuses bases de données vectorielles.

Bases de données vectorielles

Vous avez probablement entendu parler des "bases de données vectorielles" comme s'il s'agissait d'un nouveau type de base de données, telles que les bases de données relationnelles ou documentaires, mais rien n'est plus faux. Les bases de données vectorielles sont des bases de données qui supportent les types de données vectorielles et les opérations qui leur sont liées. Voyons dans le projet associé à l'article comment ce type de données sera représenté:

Voyons maintenant à quoi ressemble un enregistrement:

Bases de données vectorielles... Pourquoi faire?

Comme nous l'avons expliqué dans l'article précédent sur les LLM, l'utilisation des vecteurs est essentielle dans les modèles de langage, car ils permettent de représenter les concepts et les relations entre eux dans un espace multidimensionnel. Dans notre cas, cette représentation multidimensionnelle sera la clé pour identifier les documents de notre contexte qui seront pertinents pour la question posée.

Parfait, nous avons notre base de données vectorielle et les documents qui fourniront le contexte, il ne nous reste plus qu'à enregistrer le contenu de ces documents dans notre base de données, mais.... Avec quels critères?

Modèles pour la vectorisation

Eh bien... il n'est pas nécessaire d'ennuyer notre LLM pour vectoriser nos informations contextuelles, nous pouvons utiliser des modèles de langage plus petits qui conviennent mieux à nos besoins pour cette tâche, tels que les modèles entraînés pour détecter les similarités entre les phrases. Vous pouvez en trouver une myriade dans Hugging Face,  chacun étant entraîné avec un ensemble de données spécifique qui nous permettra d'améliorer la vectorisation de nos données.

Et si cela ne vous convainc pas d'utiliser l'un de ces modèles pour la vectorisation, sachez qu'en général ce type de modèles...

Voyons dans notre exemple comment nous invoquons le modèle choisi pour ces vectorisations:

ifnot os.path.isdir('/app/data/model/'):
    model = sentence_transformers.SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')            
    model.save('/app/data/model/')

Ici, nous téléchargeons le modèle choisi pour notre cas sur notre ordinateur local. Ce mini-LM est multi-langues, nous pourrons donc vectoriser en espagnol et en anglais sans aucun problème.

Chunking

Si vous avez déjà joué avec des modèles de langue, vous avez probablement déjà été confronté au défi du découpage en morceaux - ou "chunking". Qu'est-ce que chunking ? Il s'agit tout simplement de la division d'un texte en fragments plus petits susceptibles de contenir un sens pertinent. Grâce à ce découpage de notre contexte, nous pouvons effectuer des requêtes sur notre base de données vectorielle afin d'extraire les documents de notre contexte qui peuvent être pertinents pour la question posée.

Quels sont les critères de ce découpage ? Il n'y a pas vraiment de critère magique qui nous permette de savoir quelle doit être la longueur de nos morceaux pour qu'ils soient aussi précis que possible. Dans notre exemple, nous utilisons une bibliothèque Python fournie par langchain pour effectuer ce découpage, bien que toute autre méthode ou bibliothèque puisse être utilisée:

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 700,
    chunk_overlap  = 50,
)
path = "/app/data"
loader = PyPDFDirectoryLoader(path)
docs_before_split = loader.load()
docs_after_split = text_splitter.split_documents(docs_before_split)

Comme vous pouvez le constater, la taille choisie est de 700 caractères, avec un chevauchement de 50 pour éviter de couper des mots. Ce sont ces fragments extraits de nos documents que nous allons vectoriser et insérer dans notre base de données.

Ce processus de découpage peut être optimisé à volonté au moyen de la « lemmatisation », qui permet de transformer les mots en leur lemme correspondant (sans les temps des verbes, les pluriels, le genre, etc.) et d'éliminer ainsi une partie du bruit pour la génération du vecteur, mais nous n'allons pas nous étendre sur ce point, vous pouvez voir une explication plus détaillée sur cette page .

Vectorisation des fragments

Très bien, nous avons extrait nos fragments de chacun de nos documents, il est temps de les vectoriser et de les insérer dans notre base de données, jetons un coup d'œil au code pour comprendre comment nous pourrions le faire.

for doc in docs_after_split:
    embeddings = model.encode(doc.page_content, normalize_embeddings=True)
    array = np.array(embeddings)
    formatted_array = np.vectorize('{:.12f}'.format)(array)
    parameters = []
    parameters.append(doc.metadata['source'])
    parameters.append(str(doc.page_content))
    parameters.append(str(','.join(formatted_array)))
    cursorIRIS.execute("INSERT INTO LLMRAG.DOCUMENTCHUNK (Document, Phrase, VectorizedPhrase) VALUES (?, ?, TO_VECTOR(?,DECIMAL))", parameters)
connectionIRIS.commit()

Comme vous pouvez le constater, nous allons suivre les étapes suivantes: 

  1. Nous parcourons la liste de tous les fragments obtenus à partir de tous les documents qui vont former notre contexte.
  2. Pour chaque fragment, nous vectorisons le texte (en utilisant la bibliothèque sentence_transformers). 
  3. Nous créons un tableau à l'aide de la bibliothèque numpy avec le vecteur formaté et le transformons en chaîne de caractères.
  4. Nous enregistrons les informations du document avec son vecteur associé dans notre base de données. Comme vous pouvez le voir, nous exécutons la commande TO_VECTOR qui transformera la chaîne du vecteur que nous avons passé au format approprié.

Conclusion

Dans cet article nous avons vu la nécessité d'avoir une base de données vectorielle pour la création du contexte nécessaire dans notre application RAG, nous avons aussi vu comment découper et vectoriser l'information de notre contexte pour son enregistrement dans cette base de données.

Dans le prochain article, nous verrons comment interroger notre base de données vectorielles à partir de la question que l'utilisateur envoie au modèle LLM et comment, à l'aide d'une recherche de similarité, nous assemblerons le contexte que nous transmettrons au modèle. Ne manquez pas cet article!

0
0 460
Article Guillaume Rongier · Nov 4, 2024 5m read

L'année dernière, vous avez probablement beaucoup entendu parler du LLM ( Large Language Model) et du développement associé des applications RAG ( Retrieval Augmented Generation). Dans cette série d'articles, nous expliquerons les bases de chaque terme utilisé et nous verrons comment développer une application RAG simple.

Qu'est-ce qu'un LLM?

Les modèles LLM font partie de ce que nous appelons l'IA générative et se basent sur la vectorisation d'énormes quantités de texte. Cette vectorisation permet d'obtenir un espace vectoriel dans lequel les mots ou termes apparentés sont plus proches les uns des autres que des mots moins apparentés.

Bien que la manière la plus simple de le visualiser soit un graphique à trois dimensions comme celui de l'image précédente, le nombre de dimensions peut être aussi grand que souhaité, plus les dimensions sont grandes, plus la précision des relations entre les termes et les mots est forte et plus la consommation de ressources est importante.

Ces modèles sont entraînés avec des ensembles de données massives qui leur permettent d'avoir suffisamment d'informations pour pouvoir générer des textes liés à la demande qui est faite, mais... Comment le modèle sait-il quels termes sont en rapport avec la question posée ? Très simplement, par ce que l'on appelle la "similarité" entre les vecteurs, qui n'est rien d'autre qu'un calcul mathématique permettant d'élucider la distance entre deux vecteurs. Les calculs les plus courants sont les suivants:

Par ce calcul, le LLM sera capable d'assembler une réponse cohérente basée sur des termes proches de la question posée en relation avec son contexte.

C'est bien beau, mais les LLM sont limités dans leur application à des usages spécifiques car les informations avec lesquelles ils sont formés sont souvent assez "générales". Si nous voulons qu'un modèle LLM soit adapté aux besoins spécifiques de notre entreprise, deux options s'offrent à nous:

Technique Fine tuning

Le Fine tuning est une technique qui permet de ré-entraîner les modèles LLM avec des données relatives à un sujet spécifique (langage procédural, terminologie médicale, etc.). Grâce à cette technique, il est possible d'avoir des modèles mieux adaptés à nos besoins sans avoir à entraîner un modèle à partir de zéro.

Le principal inconvénient de cette technique est qu'il faut toujours fournir au LLM une grande quantité d'informations pour ce recyclage, ce qui peut parfois ne pas répondre aux attentes d'une entreprise donnée.

Génération de récupération augmentée (Retrieval Augmented Generation)

RAG est une technique qui permet au LLM d'inclure le contexte nécessaire pour répondre à une question donnée sans qu'il soit nécessaire d'entraîner ou de réentraîner spécifiquement le modèle avec les informations pertinentes.

Comment inclure le contexte nécessaire à notre LLM ? Très simplement, lorsque nous envoyons la question au modèle, nous lui demandons explicitement de prendre en considération les informations pertinentes attachées à la réponse à la requête, et pour ce faire, nous utilisons des bases de données vectorielles à partir desquelles nous pouvons extraire le contexte lié à la question envoyée.

Quelle est la meilleure option pour mon problème, Fine tuning ou RAG?

Les deux options ont leurs avantages et leurs inconvénients. D'une part, le Fine tuning vous permet d'inclure toutes les informations relatives au problème que vous souhaitez résoudre dans le modèle LLM, sans avoir besoin de technologies tierces telles qu'une base de données vectorielle pour stocker les contextes, mais d'autre part, cela vous lie au modèle recyclé, et si celui-ci ne répond pas à vos attentes, la migration vers un nouveau modèle peut s'avérer assez fastidieuse.

D'autre part, RAG a besoin de fonctionnalités telles que les recherches vectorielles afin de savoir quel est le contexte le plus précis pour la question que nous transmettons à notre LLM. Ce contexte doit être stocké dans une base de données vectorielle et ensuite recherché pour extraire cette information. Le principal avantage (à part le fait de dire explicitement au LLM d'utiliser le contexte que nous lui fournissons) est que nous ne sommes pas attachés au modèle LLM, et que nous pouvons le changer pour un autre qui est plus adapté à nos besoins.

Comme nous l'avons indiqué au début de l'article, nous nous concentrerons sur le développement d'un exemple d'application dans RAG (sans grandes prétentions, juste pour montrer comment vous pouvez commencer).

Architecture d'un projet RAG

Examinons brièvement l'architecture requise pour un projet RAG:

D'une part, nous aurons les acteurs suivants:

  • Utilisateurs : qui interagissent avec le LLM en envoyant des requêtes.
  • Contexte : préalablement fourni pour être inclus dans les requêtes des utilisateurs.
  • Modèle de vectorisation : pour vectoriser les différents documents associés au contexte.
  • Base de données vectorielle : dans ce cas, il s'agira d'IRIS, qui stockera les différentes parties vectorisées des documents contextuels.
  • LLM : modèle LLM qui recevra les requêtes, pour cet exemple nous avons choisi MISTRAL.
  • Application Python : destinée à interroger la base de données vectorielle pour l'extraction du contexte et son inclusion dans la requête LLM.

Pour ne pas alourdir le schéma, j'ai laissé de côté l'application responsable de la capture des documents de contexte, de leur découpage, puis de leur vectorisation et de leur insertion. Dans l'application associée, vous pouvez consulter cette étape ainsi que l'étape suivante relative à la requête d'extraction, mais ne vous inquiétez pas, nous la verrons plus en détail dans les prochains articles.

En association avec cet article vous avez le projet qui nous servira de référence pour expliquer en détail chaque étape, ce projet est contenu dans Docker et vous pouvez y trouver une application Python utilisant Jupyter Notebook et une instance d'IRIS. Vous aurez besoin d'un compte in MISTRAL AI pour inclure la clé API qui vous permet de lancer des requêtes.

Dans le prochain article, nous verrons comment enregistrer notre contexte dans une base de données vectorielle. Restez connectés!

1
0 532
Article Guillaume Rongier · Juin 3, 2024 4m read

L'intelligence artificielle a un potentiel transformateur pour générer de la valeur et des informations à partir des données. Alors que nous nous dirigeons vers un univers où presque toutes les applications seront pilotées par l'IA, les développeurs qui créent ces applications auront besoin des outils adéquats pour créer des expériences à partir de ces applications. C'est pourquoi nous sommes heureux d'annoncer que la recherche vectorielle a été ajoutée à la plate-forme de données InterSystems IRIS.

0
0 64