Intelligence artificielle
LlamaIndex: Augmentez vos applications LLM avec des données personnalisées facilement

Les grands modèles de langage (LLM) comme la série GPT d’OpenAI ont été formés sur une grande variété de données accessibles publiquement, démontrant des capacités remarquables dans la génération de texte, la synthèse, la réponse à des questions et la planification. Malgré leur polyvalence, une question fréquemment posée concerne l’intégration sans heurts de ces modèles avec des données personnalisées, privées ou propriétaires.
Les entreprises et les individus sont inondés de données uniques et personnalisées, souvent hébergées dans diverses applications telles que Notion, Slack et Salesforce, ou stockées dans des fichiers personnels. Pour exploiter les LLM pour ces données spécifiques, plusieurs méthodologies ont été proposées et expérimentées.
Fine-tuning représente une telle approche, qui consiste à ajuster les poids du modèle pour incorporer des connaissances à partir de jeux de données particuliers. Cependant, ce processus n’est pas sans défis. Il exige des efforts importants dans la préparation des données, couplés à une procédure d’optimisation difficile, nécessitant un certain niveau d’expertise en apprentissage automatique. De plus, les implications financières peuvent être importantes, en particulier lorsqu’il s’agit de grands jeux de données.
L’apprentissage en contexte est apparu comme une alternative, en donnant la priorité à l’élaboration d’entrées et de invites pour fournir au LLM le contexte nécessaire pour générer des sorties précises. Cette approche atténue la nécessité d’un réentraînement extensif du modèle, offrant un moyen plus efficace et accessible d’intégrer des données privées.
Mais l’inconvénient de cette approche est sa dépendance à l’habileté et à l’expertise de l’utilisateur en prompt engineering. De plus, l’apprentissage en contexte peut ne pas toujours être aussi précis ou fiable que le fine-tuning, en particulier lorsqu’il s’agit de données hautement spécialisées ou techniques. La formation préalable du modèle sur une large gamme de textes Internet ne garantit pas une compréhension de jargon ou de contexte spécifiques, ce qui peut conduire à des sorties inexactes ou non pertinentes. C’est particulièrement problématique lorsque les données privées proviennent d’un domaine de niche ou d’une industrie.
De plus, la quantité de contexte qui peut être fournie dans une invite unique est limitée, et les performances du LLM peuvent se dégrader à mesure que la complexité de la tâche augmente. Il y a également le défi de la confidentialité et de la sécurité des données, car les informations fournies dans l’invite pourraient potentiellement être sensibles ou confidentielles.
Alors que la communauté explore ces techniques, des outils comme LlamaIndex gagnent de l’attention.
Il a été lancé par Jerry Liu, un ancien scientifique de recherche d’Uber. Alors qu’il expérimentait avec GPT-3 l’automne dernier, Liu a remarqué les limites du modèle concernant la gestion de données privées, telles que des fichiers personnels. Cette observation a conduit au lancement du projet open-source LlamaIndex.
L’initiative a attiré des investisseurs, obtenant $8,5 millions lors d’un récent cycle de financement initial.
LlamaIndex facilite l’augmentation des LLM avec des données personnalisées, comblant le fossé entre les modèles pré-formés et les cas d’utilisation de données personnalisées. Grâce à LlamaIndex, les utilisateurs peuvent exploiter leurs propres données avec les LLM, débloquant la génération de connaissances et la raison avec des informations personnalisées.
Les utilisateurs peuvent fournir sans heurts aux LLM leurs propres données, créant un environnement où la génération de connaissances et la raison sont profondément personnalisées et éclairées. LlamaIndex répond aux limites de l’apprentissage en contexte en fournissant une plate-forme plus conviviale et sécurisée pour l’interaction avec les données, garantissant que même ceux ayant une expertise limitée en apprentissage automatique puissent exploiter pleinement le potentiel des LLM avec leurs données privées.
Concepts et idées de haut niveau
1. Retrieval Augmented Generation (RAG) :
RAG est un processus à deux volets conçu pour coupler les LLM avec des données personnalisées, améliorant ainsi la capacité du modèle à fournir des réponses plus précises et éclairées. Le processus comprend :
- Étape d’indexation : Il s’agit de la phase préparatoire où les fondements de la création d’une base de connaissances sont posés.
- Étape de requête : Ici, la base de connaissances est parcourue pour trouver le contexte pertinent pour aider les LLM à répondre aux requêtes.
Parcours d’indexation avec LlamaIndex :
- Connecteurs de données : Pensez aux connecteurs de données comme au passeport de vos données vers LlamaIndex. Ils aident à importer des données à partir de sources et de formats variés et les encapsulent dans une représentation simpliste de « Document ». Les connecteurs de données peuvent être trouvés dans LlamaHub, un référentiel open-source rempli de chargeurs de données. Ces chargeurs sont conçus pour une intégration facile, permettant une expérience plug-and-play avec n’importe quelle application LlamaIndex.
- Documents / Nœuds : Un document est comme une valise générique qui peut contenir divers types de données — qu’il s’agisse d’un PDF, d’une sortie d’API ou de données de base de données. D’un autre côté, un nœud est un extrait ou un « morceau » d’un document, enrichi de métadonnées et de relations avec d’autres nœuds, garantissant une base solide pour une récupération de données précise plus tard.
- Index de données : Après l’ingestion des données, LlamaIndex aide à indexer ces données dans un format récupérable. Derrière les scènes, il divise les documents bruts en représentations intermédiaires, calcule les embeddings vectoriels et déduit les métadonnées. Parmi les index, « VectorStoreIndex » est souvent le choix par défaut.
Types d’index dans LlamaIndex : clé pour des données organisées
LlamaIndex propose différents types d’index, chacun pour différents besoins et cas d’utilisation. Au cœur de ces indices se trouvent les « nœuds » mentionnés ci-dessus. Essayons de comprendre les indices LlamaIndex avec leurs mécanismes et applications.
1. Index de liste :
- Mécanisme : Un index de liste aligne les nœuds de manière séquentielle comme une liste. Après avoir divisé les données d’entrée en nœuds, ils sont disposés de manière linéaire, prêts à être interrogés soit de manière séquentielle, soit via des mots clés ou des embeddings.
- Avantage : Ce type d’index brille lorsque la nécessité est de requêter de manière séquentielle. LlamaIndex garantit l’utilisation de toutes les données d’entrée, même si elles dépassent la limite de jetons du LLM, en interrogeant intelligemment le texte à partir de chaque nœud et en affinant les réponses à mesure qu’il navigue dans la liste.
2. Index de magasin de vecteurs :
- Mécanisme : Ici, les nœuds se transforment en embeddings vectoriels, stockés soit localement, soit dans une base de données vectorielle spécialisée comme Milvus. Lorsqu’il est interrogé, il récupère les nœuds les plus similaires, les acheminant vers le synthétiseur de réponses.
- Avantage : Si votre flux de travail dépend de la comparaison de texte pour la similarité sémantique via la recherche vectorielle, cet index peut être utilisé.
3. Index d’arbre :
- Mécanisme : Dans un index d’arbre, les données d’entrée évoluent en une structure d’arbre, construite de bas en haut à partir de nœuds feuilles (les morceaux de données d’origine). Les nœuds parents émergent comme des résumés de nœuds feuilles, créés à l’aide de GPT. Lors d’une requête, l’index d’arbre peut parcourir de la racine aux nœuds feuilles ou construire des réponses directement à partir de nœuds feuilles sélectionnés.
- Avantage : Avec un index d’arbre, l’interrogation de longs extraits de texte devient plus efficace, et l’extraction d’informations à partir de divers segments de texte est simplifiée.
4. Index de mots clés :
- Mécanisme : Une carte de mots clés à nœuds forme le cœur d’un index de mots clés. Lorsqu’il est interrogé, les mots clés sont extraits de la requête, et seuls les nœuds mappés sont mis en évidence.
- Avantage : Lorsque vous avez des requêtes d’utilisateur claires, un index de mots clés peut être utilisé. Par exemple, la recherche de documents de santé devient plus efficace lorsqu’on se concentre uniquement sur les documents pertinents pour le COVID-19.
Installation de LlamaIndex
L’installation de LlamaIndex est un processus simple. Vous pouvez choisir de l’installer directement à partir de Pip ou à partir de la source. (Assurez-vous d’avoir Python installé sur votre système ou vous pouvez utiliser Google Colab)
1. Installation à partir de Pip :
- Exécutez la commande suivante :
pip install llama-index
- Remarque : Pendant l’installation, LlamaIndex peut télécharger et stocker des fichiers locaux pour certains packages comme NLTK et HuggingFace. Pour spécifier un répertoire pour ces fichiers, utilisez la variable d’environnement « LLAMA_INDEX_CACHE_DIR ».
2. Installation à partir de la source :
- Tout d’abord, clonez le référentiel LlamaIndex à partir de GitHub :
git clone https://github.com/jerryjliu/llama_index.git
- Une fois cloné, accédez au répertoire du projet.
- Vous aurez besoin de Poetry pour gérer les dépendances de package.
- Maintenant, créez un environnement virtuel à l’aide de Poetry :
poetry shell - Enfin, installez les exigences de package principales avec :
poetry install
Configuration de votre environnement pour LlamaIndex
1. Configuration OpenAI :
- Par défaut, LlamaIndex utilise OpenAI’s
gpt-3.5-turbopour la génération de texte ettext-embedding-ada-002pour la récupération et les embeddings. - Pour utiliser cette configuration, vous aurez besoin d’une
OPENAI_API_KEY. Obtenez-en une en vous inscrivant sur le site Web d’OpenAI et en créant un nouveau jeton d’API. - Vous avez la flexibilité de personnaliser le LLM sous-jacent en fonction de vos besoins de projet. Selon votre fournisseur de LLM, vous pourriez avoir besoin de clés et de jetons d’environnement supplémentaires.
2. Configuration de l’environnement local :
- Si vous préférez ne pas utiliser OpenAI, LlamaIndex bascule automatiquement vers des modèles locaux –
LlamaCPPetllama2-chat-13Bpour la génération de texte, etBAAI/bge-small-enpour la récupération et les embeddings. - Pour utiliser
LlamaCPP, suivez le guide d’installation fourni. Assurez-vous d’installer le packagellama-cpp-python, idéalement compilé pour prendre en charge votre GPU. Cette configuration utilisera environ 11,5 Go de mémoire sur le CPU et le GPU. - Pour les embeddings locaux, exécutez
pip install sentence-transformers. Cette configuration locale utilisera environ 500 Mo de mémoire.
Avec ces configurations, vous pouvez adapter votre environnement pour soit exploiter le pouvoir d’OpenAI, soit exécuter des modèles localement, en fonction de vos besoins de projet et de vos ressources.
Un cas d’utilisation simple : interrogation de pages Web avec LlamaIndex et OpenAI
Voici un script Python simple pour démontrer comment vous pouvez interroger une page Web pour des informations spécifiques :
!pip install llama-index html2text
import os
from llama_index import VectorStoreIndex, SimpleWebPageReader
# Entrez votre clé OpenAI ci-dessous :
os.environ["OPENAI_API_KEY"] = ""
# URL que vous souhaitez charger dans votre magasin de vecteurs ici :
url = "http://www.paulgraham.com/fr.html"
# Chargez l'URL dans des documents (plusieurs documents possibles)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])
# Créez un magasin de vecteurs à partir des documents
index = VectorStoreIndex.from_documents(documents)
# Créez un moteur de requête pour que nous puissions poser des questions :
query_engine = index.as_query_engine()
# Posez autant de questions que vous le souhaitez contre les données chargées :
response = query_engine.query("Quels sont les 3 meilleurs conseils de Paul pour lever des fonds ?")
print(response)
Les trois meilleurs conseils de Paul pour lever des fonds sont : 1. Commencez avec un nombre faible lorsque vous commencez à lever des fonds. Cela permet une flexibilité et augmente les chances de lever davantage de fonds à long terme. 2. Viser à être rentable si possible. Avoir un plan pour atteindre la rentabilité sans compter sur un financement supplémentaire rend le démarrage d'entreprise plus attractif pour les investisseurs. 3. N'optimisez pas pour la valorisation. Même si la valorisation est importante, elle n'est pas le facteur le plus crucial dans le financement. Concentrez-vous sur l'obtention des fonds nécessaires et la recherche de bons investisseurs.
Avec ce script, vous avez créé un outil puissant pour extraire des informations spécifiques d’une page Web en posant simplement une question. C’est juste un aperçu de ce qui peut être réalisé avec LlamaIndex et OpenAI lors de l’interrogation de données Web.
LlamaIndex vs Langchain : choix basé sur votre objectif
Votre choix entre LlamaIndex et Langchain dépendra de l’objectif de votre projet. Si vous souhaitez développer un outil de recherche intelligent, LlamaIndex est un choix solide, excellent en tant que mécanisme de stockage intelligent pour la récupération de données. D’un autre côté, si vous souhaitez créer un système comme ChatGPT avec des capacités de plug-in, Langchain est votre choix. Il ne facilite pas seulement plusieurs instances de ChatGPT et de LlamaIndex, mais étend également la fonctionnalité en permettant la construction d’agents multi-tâches. Par exemple, avec Langchain, vous pouvez créer des agents capables d’exécuter du code Python tout en effectuant une recherche Google simultanément. En résumé, tandis que LlamaIndex excelle dans la gestion des données, Langchain orchestre plusieurs outils pour offrir une solution holistique.

LlamaIndex Logo Artwork created using Midjourney


















