Comme je l’ai mentionné dans l’article précédent, le développement de Fabrice AI s’est avéré bien plus complexe que prévu, me forçant à explorer de nombreuses approches différentes.
L’approche initiale : Index des lamas – Recherche vectorielle
Ma première incursion dans l’amélioration des capacités de recherche de Fabrice AI a consisté à utiliser l’index Llama pour la recherche vectorielle. Le concept était simple : prendre le contenu de mon blog, le convertir en documents Langchain, et ensuite les transformer en documents Llama. Ces documents Llama seraient alors stockés dans un index vectoriel, me permettant d’interroger cet index pour trouver des informations pertinentes.
Cependant, lorsque j’ai commencé à tester le système, il est devenu évident que cette approche ne produisait pas les résultats que j’espérais. Plus précisément, lorsque j’interrogeais le système avec des questions très contextuelles telles que “Quelles sont les plus grosses erreurs commises par les fondateurs de places de marché ?”, l’IA ne parvenait pas à fournir des réponses pertinentes. Au lieu d’extraire le contenu nuancé que je savais intégré dans les données, elle renvoyait des réponses non pertinentes ou incomplètes.
Ce premier échec m’a amené à reconsidérer mon approche. J’ai réalisé qu’il ne suffisait pas de stocker le contenu dans un index vectoriel ; le mécanisme de recherche devait comprendre le contexte et les nuances des questions posées. Cette prise de conscience fut la première des nombreuses leçons qui allaient façonner l’évolution de Fabrice AI.
Stockage des connaissances : Stockage et récupération de documents MongoDB
En gardant à l’esprit les limites de l’approche de l’index des lamas, j’ai ensuite envisagé de stocker les documents des lamas dans MongoDB. Le schéma flexible de MongoDB et sa structure orientée vers les documents semblaient être une solution prometteuse pour gérer les divers types de contenu que j’avais accumulés au fil des ans.
L’objectif était de créer une expérience de recherche plus dynamique et réactive. Toutefois, cette approche s’est rapidement heurtée à des problèmes. La fonctionnalité de recherche, que j’avais prévue plus robuste, n’a pas fonctionné comme prévu. Les requêtes qui auraient dû renvoyer des documents pertinents n’ont produit aucun résultat ou un contenu non pertinent.
Ce revers était frustrant, mais il soulignait également une leçon essentielle : la méthode de stockage est tout aussi importante que la stratégie d’extraction. J’ai commencé à envisager d’autres options, comme l’utilisation de MongoDB Atlas pour les recherches vectorielles, qui pourrait potentiellement fournir la précision et l’évolutivité dont j’avais besoin. Toutefois, avant de m’engager dans cette voie, j’ai voulu explorer d’autres approches pour déterminer s’il existait une solution plus efficace.
Récupérateur de métadonnées et magasin de vecteurs : A la recherche de la spécificité
L’une des prochaines pistes que j’ai explorées était l’utilisation d’un récupérateur de métadonnées combiné à un magasin de vecteurs. L’idée derrière cette approche était de catégoriser la vaste gamme d’informations au sein de Fabrice AI et ensuite de récupérer des réponses basées sur ces catégories. En structurant les données avec des métadonnées, j’espérais améliorer la capacité de l’IA à fournir des réponses spécifiques et ciblées.
Mais cette méthode a aussi ses limites. Alors qu’elle semblait prometteuse à première vue, l’IA a eu du mal à fournir des réponses précises à tous les types de questions. Par exemple, lorsque j’ai demandé “L’auteur est-il optimiste ?”, le système n’a pas interprété la question dans le contexte du contenu pertinent. le système n’a pas interprété la question dans le contexte du contenu pertinent. Au lieu de fournir une analyse perspicace basée sur les métadonnées, il a renvoyé des réponses vagues ou n’en a donné aucune.
Cette approche m’a appris une leçon précieuse sur l’importance du contexte dans l’IA. Il ne suffit pas de catégoriser l’information ; l’IA doit également comprendre comment ces catégories interagissent et se chevauchent pour former une compréhension cohérente du contenu. Sans cette compréhension approfondie, même les méthodes de recherche les plus sophistiquées peuvent s’avérer insuffisantes.
Structurer la connaissance : L’index de l’arbre de synthèse
Alors que je continuais à affiner Fabrice AI, j’ai expérimenté la création d’un SummaryTreeIndex. Cette approche visait à résumer tous les documents sous forme d’arbre, permettant à l’IA de naviguer à travers ces résumés et de retrouver des informations pertinentes basées sur la structure du contenu.
L’idée était qu’en résumant les documents, l’IA pourrait rapidement identifier les points clés et répondre aux requêtes avec des informations concises et précises. Toutefois, cette méthode s’est heurtée à des difficultés importantes. L’IA a eu du mal à fournir des réponses pertinentes à des questions complexes, telles que “Comment prendre des décisions importantes dans la vie ?”. Au lieu de puiser dans le contenu riche et nuancé des résumés, les réponses de l’IA étaient souvent superficielles ou incomplètes.
Cette expérience a mis en évidence la difficulté d’équilibrer l’étendue et la profondeur de l’IA. Si les résumés peuvent fournir une vue d’ensemble de haut niveau, ils manquent souvent du contexte détaillé nécessaire pour répondre à des questions plus complexes. J’ai réalisé que toute solution efficace devrait intégrer à la fois un contenu détaillé et des résumés de haut niveau, permettant à l’IA de puiser dans les deux en fonction des besoins.
C’est pourquoi dans la version de Fabrice AI qui est actuellement en ligne, je fais en sorte que l’IA donne d’abord un résumé de la réponse, avant d’entrer dans les détails.
Élargir les horizons : Index du graphique des connaissances
Reconnaissant les limites des méthodes précédentes, je me suis tourné vers une approche plus sophistiquée : l’index du graphe de connaissances. Cette approche implique la construction d’un graphe de connaissances à partir d’un texte non structuré, permettant à l’IA de s’engager dans des requêtes basées sur des entités. Le but était de créer une compréhension plus dynamique et interconnectée du contenu, permettant à Fabrice AI de répondre plus efficacement à des questions complexes et contextuelles.
Malgré ses promesses, l’index du Knowledge Graph s’est heurté à d’importants obstacles. L’IA a eu du mal à produire des résultats précis, en particulier pour les requêtes qui nécessitaient une compréhension approfondie du contexte. Par exemple, à la question “Quelles sont les justes valorisations de la phase d’amorçage et de la phase A ?”, l’IA n’a pas réussi à fournir une réponse pertinente, soulignant ainsi la difficulté d’intégrer un texte non structuré dans un graphe de connaissances cohérent.
Cette approche, bien qu’elle ait finalement échoué, a fourni des informations importantes sur les défis posés par l’utilisation des graphes de connaissances dans l’IA. La complexité des données et la nécessité d’un contexte précis signifient que même un graphe de connaissances bien construit peut avoir du mal à fournir les résultats souhaités. Un autre inconvénient de l’index des graphes de connaissance est sa lenteur. Le temps de réponse pour obtenir des documents connexes était très élevé par rapport à un index vectoriel.
Réévaluation des données : Gémeaux
Après plusieurs échecs, j’ai décidé d’adopter une approche différente en tirant parti de l’IA de Google, Gemini. L’idée était de créer des ensembles de données à partir de fichiers JSON-CSV, puis d’entraîner un modèle LLM personnalisé à l’aide de ces données. J’espérais qu’en utilisant des données structurées et un modèle d’entraînement robuste, je pourrais surmonter certains des défis qui avaient entravé les tentatives précédentes.
Cependant, cette approche a également rencontré des difficultés. Le processus de formation a été interrompu en raison d’un formatage incorrect des données, ce qui a empêché la formation efficace du modèle. Cet échec a mis en évidence l’importance de l’intégrité des données dans la formation à l’IA. Sans données correctement formatées et structurées, même les modèles les plus avancés peuvent ne pas donner les résultats escomptés.
Cette expérience m’a amené à considérer le potentiel de l’utilisation de BigQuery pour stocker des données JSON, fournissant une plateforme plus évolutive et plus fiable pour gérer les grands ensembles de données nécessaires pour entraîner efficacement Fabrice AI.
Combiner les forces : Les documents Langchain avec Pinecone
Malgré les défis rencontrés jusqu’à présent, j’étais déterminé à trouver une solution qui permettrait à Fabrice AI de stocker et de récupérer efficacement les connaissances. Cette détermination m’a conduit à expérimenter les documents Langchain et Pinecone. L’approche consistait à créer un entrepôt de vecteurs Pinecone en utilisant des documents Langchain et des embeddings OpenAI, puis à récupérer les documents les plus similaires en fonction de la requête.
Cette méthode s’est révélée prometteuse, en particulier lorsque la requête comprenait le titre du document. Par exemple, à la question “Quelle est la clé du bonheur ?”, l’IA a été en mesure de retrouver et de résumer le contenu pertinent avec précision. Toutefois, des limites subsistent, notamment lorsque la requête ne comporte pas de mots-clés ou de titres spécifiques.
Cette approche a démontré le potentiel de la combinaison de différentes technologies pour améliorer les performances de l’IA. En intégrant les documents Langchain au magasin de vecteurs de Pinecone, j’ai pu améliorer la pertinence et la précision des réponses de l’IA, bien qu’avec certaines limites.
La cohérence au rendez-vous : Bâtisseur GPT OpenAI
Après avoir exploré différentes méthodes et technologies, je me suis tourné vers le GPT Builder d’Open AI pour consolider et affiner les connaissances stockées dans Fabrice AI. En téléchargeant tout le contenu dans une base de connaissances GPT, j’ai cherché à créer une plateforme plus cohérente et plus fiable pour récupérer et interagir avec mes connaissances.
Cette approche s’est avérée l’une des plus fructueuses, l’IA étant en mesure de fournir de meilleurs résultats pour toute une série de requêtes. La clé de ce succès a été l’intégration de toutes les connaissances dans un système unique et cohérent, permettant à l’IA de s’appuyer sur l’ensemble du contenu pour répondre aux questions.
Comme je l’ai mentionné dans mon précédent article, je n’arrivais pas à le faire fonctionner sur mon site web et il n’était disponible que pour les abonnés payants du Chat GPT, ce qui me semblait trop restrictif. De plus, même si c’était mieux, je n’aimais toujours pas la qualité des réponses et je n’étais pas à l’aise pour les rendre publiques.
Raffinement final : Assistants GPT utilisant le modèle 4o
La dernière pièce du puzzle dans le développement de Fabrice AI est venue avec l’introduction des assistants GPT utilisant le modèle 4o. Cette approche représentait l’aboutissement de tout ce que j’avais appris tout au long du projet. En utilisant une base de données vectorielle et en affinant les messages-guides, j’ai cherché à atteindre le plus haut niveau possible de précision et de compréhension contextuelle dans les réponses de l’IA.
Cette méthode a consisté à télécharger toutes les connaissances que j’avais accumulées dans une base de données vectorielle, qui a ensuite été utilisée comme base pour les interactions de l’IA. La base de données vectorielle a permis à l’IA d’effectuer des recherches plus sophistiquées, en récupérant des informations sur la base de la signification sémantique des requêtes plutôt qu’en s’appuyant uniquement sur la correspondance des mots-clés. Il s’agit d’une avancée significative par rapport aux approches précédentes, qui permet à l’IA de mieux comprendre les questions complexes et nuancées et d’y répondre.
L’une des principales innovations de cette approche a consisté à affiner soigneusement les messages-guides.
En élaborant et en testant méticuleusement différentes questions, j’ai pu guider l’IA pour qu’elle fournisse des réponses plus précises et plus pertinentes.
Il s’agissait non seulement de modifier la formulation des questions, mais aussi d’expérimenter différentes façons de structurer les requêtes pour obtenir les meilleures réponses possibles.
Les résultats ont été impressionnants.
L’IA était désormais capable de traiter un large éventail de requêtes avec une grande précision, même lorsque les questions étaient ouvertes ou nécessitaient une compréhension approfondie du contexte.
Par exemple, à la question “Comment prendre les décisions les plus importantes de votre vie ?”, l’IA a fourni une réponse complète et perspicace.
l’IA a fourni une réponse complète et perspicace, en s’appuyant sur une variété de sources et de perspectives pour fournir une réponse bien équilibrée.
Ce succès est l’aboutissement de centaines d’heures de travail et d’innombrables expériences. Il a démontré qu’avec la bonne combinaison de technologie et de raffinement, il était possible de créer une IA capable non seulement de stocker et de récupérer des informations de manière efficace, mais aussi d’interagir avec elles de manière significative. Le développement des assistants GPT à l’aide du modèle 4o a marqué le moment où l’IA de Fabrice s’est vraiment imposée, atteignant le niveau de sophistication et de précision que j’avais envisagé dès le départ. L’API GPT Assistants a ensuite été intégrée à mon blog pour permettre aux utilisateurs finaux d’interagir avec Fabrice AI de la manière dont vous le voyez sur le blog en ce moment.
Réflexion sur le voyage
Le processus de développement de Fabrice AI a mis en évidence la complexité du travail avec l’IA, en particulier lorsqu’il s’agit de comprendre et de contextualiser l’information. Cela m’a appris qu’il n’y a pas de raccourcis dans le développement de l’IA – chaque étape, chaque itération et chaque expérience est une partie nécessaire du voyage vers la création de quelque chose de vraiment efficace.
Pour l’avenir, je suis enthousiaste à l’idée de continuer à affiner et à développer Fabrice AI. Comme mentionné dans le dernier billet, je vais revoir les questions posées pour compléter la base de connaissances là où il y a des lacunes. J’espère aussi sortir une version interactive qui me ressemble et à qui vous pouvez parler.