Qu’est-ce que LlamaIndex ?

21 août 2024

Auteurs

Vanna Winland

AI Advocate & Technology Writer

Erika Russi

Data Scientist, IBM

LlamaIndex est un cadre d’harmonisation des données open source pour la production d’applications de grands modèles de langage (LLM). Il est disponible en Python et TypeScript et exploite un ensemble d’outils et de capacités qui simplifient le processus d’augmentation du contexte pour les cas d’utilisation de l’IA générative par le biais d’un pipeline de génération augmentée de récupération (RAG).

Design 3D de balles roulant sur une piste

Les dernières actualités et informations en matière d’IA 


La newsletter hebdomadaire Think vous apporte toute l’actualité sur l’IA, le cloud et bien d’autres sujets.

Comment fonctionne LlamaIndex ?

LlamaIndex permet aux utilisateurs de conserver et d’organiser leurs données privées ou personnalisées grâce à l’intégration de données et à l’augmentation du contexte.

Augmentation du contexte

Cette dernière consiste à fournir des données à la fenêtre contextuelle du LLM, ce qui permet d’ajouter des données privées ou externes au LLM.

Les LLM open source très répandus sont pré-entraînés sur de vastes volumes de données publiques. Ces LLM à grande échelle aident à résoudre de nombreux problèmes du monde réel. Toutefois, il faut beaucoup de temps et de ressources pour les entraîner à un cas d’utilisation spécifique. En outre, les données internes d’un modèle ne sont à jour qu’à partir du moment où il a été entraîné. Selon le modèle, l’augmentation du contexte est nécessaire pour que les modèles reflètent la connaissance en temps réel des événements actuels.

Les modèles de fondation gagnent en popularité car ces modèles d’IA flexibles et réutilisables peuvent être appliqués à pratiquement n’importe quel domaine ou n’importe quelle tâche. Les modèles de fondation semblables à la série IBM Granite sont entraînés sur des données sélectionnées. Cependant, que le modèle soit entraîné sur un grand ensemble de données ou sur un modèle de fondation pré-entraîné, il devra probablement être entraîné sur des sources externes de données spécifiques à un domaine. Ce processus est facilité par un système-cadre qui relie le LLM à des données privées afin de l’adapter au cas d’utilisation ou à l’objectif global de l’application. La partie de la pile d’applications qui facilite la connexion des LLM à des sources de données personnalisées est constituée de cadres de données tels que LlamaIndex.

Intégration des données

Les données proviennent de nombreuses sources et se présentent sous de nombreux formats. C’est au cadre de données qu’il revient de les ingérer, de les transformer et de les organiser pour qu’elles puissent être utilisées par les LLM. Les données sont souvent cloisonnées et non structurées. Pour les recueillir et les structurer, un cadre de données tel que LlamaIndex doit les faire passer par un processus communément appelé pipeline d’ingestion.

Une fois les données ingérées et converties dans un format utilisable par le LLM, l’étape suivante consiste à transformer les informations en une structure de données pour l’indexation. Pour ce faire, la procédure courante est la conversion des données non structurées en plongements vectoriels. Ce processus est appelé « création d’un plongement » dans le traitement automatique du langage naturel (NLP) mais se nomme « indexation » dans la terminologie des données.1 L’indexation est nécessaire car elle permet au LLM d’interroger et d’extraire les données ingérées grâce à l’index vectoriel. Les données peuvent être indexées en fonction de la stratégie de requête adoptée.

L’intégration des données facilite l’augmentation du contexte en intégrant des données privées dans la fenêtre contextuelle ou la « base de connaissances » du LLM. La longueur de la fenêtre contextuelle des modèles Granite 3B et 8B d’IBM a récemment été étendue à 128 000 jetons.2 Une fenêtre contextuelle plus large permet au modèle de conserver davantage de texte dans sa mémoire de travail, ce qui améliore sa capacité à suivre des détails clés tout au long de conversations prolongées et de longues bases de code. Cette capacité permet aux chatbots LLM de produire des réponses cohérentes à la fois à court terme et dans un contexte plus large.

Cependant, même avec une fenêtre contextuelle étendue, un modèle affiné peut entraîner des coûts considérables à la fois pour l’entraînement et pour l’inférence. Le réglage fin des modèles avec des données spécifiques ou privées exige des transformations de données et des systèmes qui favorisent des méthodes efficaces d’extraction de données pour les prompts LLM. La méthodologie RAG est considérée comme une option prometteuse pour faciliter la modélisation du langage en contexte long.3

Génération augmentée par récupération (RAG)

La RAG est l’une des méthodes les plus connues et les plus utilisées pour l’augmentation du contexte. Elle permet aux LLM de tirer parti d’une base de connaissances spécialisée, améliorant ainsi leur capacité à fournir des réponses plus précises aux questions posées.4 Le processus typique d’augmentation de la recherche de données se déroule en trois étapes :

  1. Fragmentation : l’entrée longue séquence est divisée en fragments.
  2. Plongement : chaque fragment est encodé dans un plongement qui peut être traité par le LLM.
  3. Récupération : les fragments intégrés les plus utiles sont récupérés en fonction de la requête.

Les cadres de données tels que LlamaIndex rationalisent le processus d’ingestion et de récupération des données en fournissant des appels API complets pour chaque étape du modèle RAG. Ce processus s’appuie sur le concept d’un moteur de requête qui permet aux utilisateurs de poser des questions sur leurs données. L’interrogation de données externes et des LLM avec des connaissances contextuelles permettent de créer des applications LLM spécifiques à un domaine.

AI Academy

Pourquoi les modèles de fondation constituent-ils un changement de paradigme pour l’IA ?

Découvrez une nouvelle catégorie de modèles IA flexibles et réutilisables, capables de générer de nouveaux revenus, de réduire les coûts et d’augmenter la productivité. Utilisez ensuite notre guide pour obtenir plus d’informations.

Workflow de données LlamaIndex

LlamaIndex emploie la RAG pour ajouter et connecter des données externes au pool de données auquel les LLM ont déjà accès. Les applications, y compris les moteurs de recherche, les chatbots et les agents, utilisent les techniques de RAG pour accomplir des tâches.5

Le workflow de LlamaIndex peut être décomposé en quelques étapes :

  1. Ingestion de données (chargement)
  2. Indexation et stockage
  3. Requête

L’objectif de ce workflow est d’aider à ingérer, structurer et permettre aux LLM d’accéder à des données privées ou spécifiques à un domaine. L’accès à des données plus pertinentes permet aux LLM de répondre avec plus de précision aux prompts, qu’il s’agisse de créer des chatbots ou des moteurs de recherche.

Ingestion de données (chargement)

L’ingestion ou le « chargement » des données est la première étape de la connexion des sources de données externes à un LLM. LlamaIndex se réfère à l’ingestion de données comme étant le chargement des données pour l’utilisation de l’application. La plupart des données privées ou personnalisées peuvent être stockées dans des formats tels que les interfaces de programmation des applications (API), les PDF, les images et les bases de données en langage de requête structuré (SQL). LlamaIndex peut charger plus de 160 formats de données différents, y compris des jeux de données structurées, semi-structurées et non structurées.

Également appelés « chargeurs » de données, les connecteurs de données récupèrent et intègrent les données à partir de leur source d’origine. Les données recueillies sont converties en une collection de données et de métadonnées. Ces collections sont appelées « Documents » dans LlamaIndex. Les connecteurs de données (ou « lecteurs » dans LlamaIndex) ingèrent et chargent divers formats de données. LlamaIndex dispose d’un lecteur intégré qui convertit tous les fichiers de chaque répertoire en documents, y compris Markdown, PDF, documents Word, présentations PowerPoint, images, fichiers audio et vidéos.6 Pour tenir compte d’autres formats de données non inclus dans la fonctionnalité intégrée, des connecteurs de données sont disponibles via LlamaHub, un registre de chargeurs de données open source. Cette étape du workflow établit une base de connaissances pour former des index sur les données afin qu’elles puissent être interrogées et utilisées par les LLM.

Indexation et stockage

Une fois les données ingérées, le cadre de données doit les transformer et les organiser dans une structure qui peut être récupérée par le LLM. Les index de données structurent les données en représentations que les LLM peuvent exploiter. LlamaIndex propose divers types d’index qui viennent appuyer la stratégie d’interrogation de l’application, tels que les index de base de données vectorielle, les index sommaires et les index de diagramme de connaissances.

Une fois les données chargées et indexées, elles peuvent être stockées. LlamaIndex prend en charge de nombreuses bases de données vectorielles qui varient en termes d’architecture, de complexité et de coût. Par défaut, LlamaIndex stocke toutes les données indexées uniquement en mémoire.

Index de base de données vectorielle

L’index de base de données vectorielle est fréquemment employé dans les applications LLM qui suivent le modèle RAG, car il excelle dans le traitement des requêtes en langage naturel. La précision de l’extraction à partir de requêtes en langage naturel dépend de la recherche sémantique, ou de la recherche basée sur le sens plutôt que sur la correspondance des mots-clés.7 La recherche sémantique est possible en convertissant les données d’entrée en plongements vectoriels. Un plongement vectoriel est une représentation numérique de la sémantique des données que le LLM peut traiter. La relation mathématique entre les plongements permet aux LLM d’extraire des données en fonction de la signification des termes de la requête, ce qui permet d’obtenir des réponses plus riches en contexte.

Le `VectorStoreIndex` prend les collections de données ou les objets `Document` et les divise en `Node`, des unités atomiques de données qui représentent un « fragment » des données source (`Document`). Une fois la collection de données divisée en plusieurs fragments, des plongements vectoriels de chaque fragment de données sont créés. Les données intégrées sont maintenant dans un format sur lequel le LLM peut exécuter des requêtes. Ces index vectoriels peuvent être stockés pour éviter la réindexation. La manière la plus simple de stocker des données est de les conserver sur disque, mais LlamaIndex s’intègre à plusieurs bases de données vectorielles et modèles de plongement.8

Pour rechercher des plongements, la requête de l’utilisateur est d’abord convertie en un plongement vectoriel. Un processus mathématique est ensuite appliqué pour classer tous les plongements en fonction de leur similarité sémantique avec la requête.

L’index de base de données vectorielle fait appel à la récupération sémantique top-k pour renvoyer les plongements les plus similaires sous la forme des fragments de texte qui leur correspondent. LlamaIndex est conçu pour faciliter la création et la gestion d’index à grande échelle en vue d’une récupération efficace des informations.

Requête

La dernière étape du workflow est la mise en œuvre de moteurs de requête pour gérer les appels de prompt aux LLM. La requête se déroule en trois phases : l’extraction, le post-traitement et la synthèse de la réponse. Lors de l’extraction, les documents les plus pertinents sont récupérés et renvoyés à partir de l’index vectoriel. Le post-traitement consiste à réadapter les fragments de plongement ou `Nodes` récupérés en les classant à nouveau, en les transformant ou en les filtrant. La synthèse de la réponse est le moment où les données les plus pertinentes et le prompt sont regroupés et envoyés au LLM pour qu’il fournisse une réponse.

Moteurs de requête

Les moteurs de requête permettent aux utilisateurs de poser des questions sur leurs données, en acceptant une requête en langage naturel et en renvoyant une réponse riche en contexte.9 Les moteurs de requête sont composés d’un ou de plusieurs index et outils de récupération. Plusieurs moteurs de requête peuvent être employés simultanément pour des collections de données avec de multiples types d’index. LlamaIndex propose différents moteurs de requête pour les données structurées et semi-structurées, par exemple un moteur de requête JSON pour l’interrogation de documents JSON.

Agents de données

Les agents de données sont des agents d’IA pilotés par LLM, capables d’effectuer une série de tâches sur les données, y compris des fonctions de lecture et d’écriture.10 Les agents de données de LlamaIndex sont des outils de connaissance alimentés par LLM et pouvant exécuter les tâches suivantes :

  • Recherche et récupération automatisées sur différents types de données (non structurées, semi-structurées et structurées)
  • Appels API à des services externes qui peuvent être traités immédiatement, indexés ou mis en cache
  • Stockage de l’historique des conversations
  • Exécution de tâches simples et complexes liées aux données

Les agents d’IA peuvent interagir avec leur environnement externe grâce à un ensemble d’API et d’outils. LlamaIndex prend en charge l’agent OpenAI Function (développé à partir de l’API OpenAI Function) et l’agent ReAct. Les composants essentiels des agents de données sont une « boucle de raisonnement » ou le paradigme de raisonnement de l’agent et des « abstractions d’outils » qui sont les outils eux-mêmes.

Boucle de raisonnement

Les agents se servent d’une boucle de raisonnement (ou paradigme r) pour résoudre des problèmes à plusieurs étapes. Dans LlamaIndex, les agents OpenAI Function et ReAct suivent un modèle similaire pour décider des outils à utiliser, ainsi que de la séquence et des paramètres d’appel de chaque outil. Ce schéma de raisonnement est appelé ReAct ou raisonnement et action. Ce processus peut être soit un simple processus de sélection d’outils en une seule étape, soit un processus plus complexe dans lequel plusieurs outils sont sélectionnés à chaque étape.

Abstractions d’outils des agents

Les abstractions d’outils décrivent la manière dont l’agent accède aux outils et s’en sert. LlamaIndex propose des outils et des ToolSpecs, une classe Python qui représente une spécification API complète avec laquelle un agent peut interagir. L’abstraction d’outil de base définit une interface générique qui peut recevoir une série d’arguments et renvoyer un conteneur de sortie d’outil générique qui peut saisir n’importe quelle réponse. LlamaIndex fournit des abstractions d’outils qui s’enroulent autour des moteurs de requête de données existants et des abstractions de fonctions qui peuvent être employées par la classe de spécification d’outils.

  • FunctionTool : convertit n’importe quelle fonction en un outil exploitable par les agents.
  • QueryEngineTool : permet aux agents d’utiliser la recherche et la récupération à l’aide d’un moteur de requête.

Une spécification d’outil permet aux utilisateurs de définir des services complets plutôt que des outils individuels qui gèrent des tâches spécifiques. Ainsi, la spécification de l’outil Gmail permet à l’agent de lire et de préparer des e-mails.11 Voici un exemple de définition approximative de ce service :

class GmailToolSpec(BaseToolSpec):
    “””Charger les e-mails du compte de l’utilisateur”””
    spec_functions = [“load_data”,“create_draft”, “send_email”]
    def load_data(self) -> List[Document]:
...

def create_draft(
    self,
    to: List[str],
    subject: [str],
    message: [str],
) -> str: “Créer et insérer un brouillon d’e-mail”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Envoyer un brouillon d’e-mail”

Chaque fonction est convertie en outil à l’aide de l’abstraction `FunctionTool`.

LlamaIndex utilise le référentiel d’outils de LlamaHub, qui comprend plus de 15 spécifications d’outils avec lesquelles les agents peuvent interagir. Cette liste est composée de services destinés à améliorer et à enrichir la capacité des agents à effectuer différentes actions. Voici quelques-unes des spécifications figurant dans le référentiel :

  • Spécifications de la base de données vectorielle SQL +
  • Spécifications Gmail
  • Ollama
  • LLM LangChain

Outils utilitaires

LlamaIndex propose des outils utilitaires qui peuvent augmenter les capacités des outils existants :

  • OnDemandLoaderTool : transforme tout chargeur de données LlamaIndex existant en un outil exploitable par un agent.
  • LoadAndSearchToolSpec : accepte les outils existants en entrée et produit un outil de chargement et un outil de recherche en sortie.

Intégration avec les LLM

LlamaIndex fonctionne avec des modèles de fondation open source tels que la série IBM Granite, Llama2 et OpenAI et d’autres cadres LLM, notamment LangChain et Ollama. Les LLM peuvent être employés d’une myriade de façons en tant que modules autonomes ou intégrés à d’autres modules de base de LlamaIndex.12 Les LLM peuvent également être utilisés pour inciter des agents d’IA à agir comme des travailleurs du savoir qui suivent des workflows autonomes.

Agents d'AI

LlamaIndex a étoffé ses fonctionnalités afin d’inclure l’utilisation d’agents d’IA pilotés par des LLM pour agir en tant que travailleurs du savoir. Les agents d’IA de LlamaIndex suivent un modèle de comportement ReAct (raisonnement et action). Les agents ReAct adoptent un paradigme de raisonnement qui demande à l’agent de planifier et de raisonner tout en améliorant ses réponses de manière itérative. Ce type d’agent d’IA peut être interprété comme une forme d’incitation par chaîne de pensée. Les agents peuvent faire appel à des outils pour s’intégrer à d’autres LLM, tels que la collection LlamaHub de connecteurs de données et d’outils d’agents.

Cas d’utilisation

LlamaIndex propose plusieurs exemples de cas d’utilisation dans sa documentation, avec des liens vers des tutoriels.13

  • Chatbots : LlamaIndex fournit une analogie avec un moteur de requête appelé moteur de chat. Un moteur de chat fournit une interface de haut niveau pour les conversations (interactions réciproques plutôt qu’une seule question et une seule réponse). Les moteurs de chat peuvent être considérés comme une version plus personnalisée d’une application ChatGPT. Les implémentations du moteur de chat incluent un mode qui utilise un agent ReAct. LlamaIndex propose un tutoriel pour créer un chatbot qui emploie un agent de données.
  • Incitation : LlamaIndex utilise l’intégration LLM et les workflows comme abstractions orientées événements pour enchaîner les appels de prompt. L’incitation est fondamentale pour toute application LLM.
  • Réponse aux questions (RAG) : LlamaIndex offre la possibilité d’effectuer des RAG sur des documents non structurés avec des requêtes en langage naturel. LlamaIndex permet également d’interroger des données structurées à l’aide de Text-to-SQL et Text-to-Pandas.14
  • Extraction de données structurées : les LLM traitent le langage naturel et extraient les détails sémantiquement significatifs tels que les noms, les dates, les adresses et les chiffres pour les présenter dans un format cohérent et structuré, quelle que soit la source d’origine. Une fois les données structurées, elles peuvent être envoyées à une base de données ou analysées plus en détail à l’aide d’outils tels que LlamaParse.
  • Agents autonomes : les agents d’IA peuvent être employés pour diverses applications LLM. Ainsi, les utilisateurs peuvent concevoir une application RAG agentique en créant un assistant de recherche contextualisé à partir de leurs données, qui répond à des questions simples ou à des tâches de recherche complexes.15
Solutions connexes
Modèles de fondation

Explorez la bibliothèque de modèles de fondation d’IBM dans le portefeuille watsonx pour déployer l’IA générative dans votre entreprise en toute confiance.

Découvrir watsonx.ai
Solutions d’intelligence artificielle

Mettez l’IA au service de votre entreprise en vous appuyant sur l’expertise de pointe d’IBM dans le domaine de l’IA et sur son portefeuille de solutions.

Découvrir les solutions d’IA
Conseils et services en matière d’IA

Réinventez les workflows et les opérations critiques en ajoutant l’IA pour optimiser les expériences, la prise de décision et la valeur métier en temps réel.

Découvrir les services d’IA
Passez à l’étape suivante

Explorez la bibliothèque de modèles de fondation d’IBM dans le portefeuille IBM watsonx pour déployer l’IA générative dans votre entreprise en toute confiance.

Découvrir watsonx.ai Découvrir les solutions d’IA
Notes de bas de page

1 Elena Lowery, « Use Watsonx.Ai with LlamaIndex to Build Rag Applications », Use Watsonx.ai with LlamaIndex to build RAG applications, 28 mai 2024, https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica.

2 Matt Stallone et al., « Scaling Granite Code Models to 128K Context », arXiv.org, 18 juillet 2024, https://arxiv.org/abs/2407.13739.

3 Matt Stallone et al., « Scaling Granite Code Models to 128K Context ».

4 Kim Martineau, « What Is Retrieval-Augmented Generation (Rag)? », IBM Research, 1er mai 2024, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.

5 « High-Level Concepts », LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.

6 « Loading Data (Ingestion) », LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.

7 Elena Lowery, « Use Watsonx.Ai with LlamaIndex to Build Rag Applications ».

8 Elena Lowery, « Use Watsonx.Ai with LlamaIndex to Build Rag Applications ».

9 « Query Engine », LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.

10 Jerry Liu, « Data Agents », Medium, 13 juillet 2023, https://medium.com/llamaindex-blog/data-agents-eed797d7972f.

11 « Google », LlamaIndex, https://docs.llamaindex.ai/en/stable/api_reference/tools/google/.

12 « Using LLMs », LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.

13 « Use Cases », LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.

14 « Question-Answering (RAG) », LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.

15 « Agents », LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/agents/.