Accéder au contenu principal

LlamaIndex : ajouter des données personnelles aux LLMs

LlamaIndex est votre allié données pour créer des applications basées sur des LLMs. Ingestez, gérez et retrouvez aisément des données privées et spécifiques à votre domaine en langage naturel.
· 10 min lire

Explorez l'IA

LlamaIndex est un framework de données pour des applications basées sur des grands modèles de langage (LLMs). Des LLMs comme GPT-4 sont préentraînés sur d’immenses jeux de données publics, ce qui leur confère d’emblée des capacités remarquables de traitement du langage naturel. Toutefois, leur utilité reste limitée sans accès à vos propres données privées.

LlamaIndex vous permet d’ingérer des données depuis des API, des bases de données, des PDF, et plus encore, via des connecteurs flexibles. Ces données sont indexées en représentations intermédiaires optimisées pour les LLMs. LlamaIndex autorise ensuite des requêtes et des conversations en langage naturel avec vos données via des moteurs de requête, des interfaces de chat et des agents pilotés par LLM. Il permet à vos LLMs d’accéder à des données privées et de les interpréter à grande échelle, sans réentraîner le modèle sur des données plus récentes.

Que vous soyez débutant et cherchiez un moyen simple d’interroger vos données en langage naturel, ou utilisateur avancé nécessitant une personnalisation poussée, LlamaIndex fournit les bons outils. L’API de haut niveau permet de démarrer en cinq lignes de code, tandis que les API de bas niveau offrent un contrôle total sur l’ingestion, l’indexation, la recherche, et plus encore.

Comment fonctionne LlamaIndex ?

LlamaIndex s’appuie sur des systèmes de génération augmentée par la recherche (RAG) qui combinent de grands modèles de langage à une base de connaissances privée. Cela comprend généralement deux étapes : l’indexation et l’interrogation.

Image des concepts de haut niveau

Image tirée des concepts de haut niveau

Phase d’indexation

Lors de la phase d’indexation, LlamaIndex indexe efficacement les données privées dans un index vectoriel. Cette étape permet de créer une base de connaissances interrogeable, propre à votre domaine. Vous pouvez fournir des documents texte, des enregistrements de base de données, des graphes de connaissances, et d’autres types de données.

Concrètement, l’indexation convertit les données en vecteurs numériques (embeddings) qui capturent leur sens sémantique. Cela autorise des recherches par similarité rapides dans le contenu.

Phase d’interrogation

Pendant la phase d’interrogation, le pipeline RAG recherche les informations les plus pertinentes à partir de la requête de l’utilisateur. Ces informations sont ensuite fournies au LLM, avec la requête, pour produire une réponse précise.

Ce processus donne au LLM accès à des informations actuelles et mises à jour qui n’ont pas nécessairement été incluses lors de son entraînement initial.

Le principal défi à cette étape consiste à récupérer, organiser et raisonner sur potentiellement plusieurs bases de connaissances.

Pour en savoir plus sur RAG, suivez notre code-along Retrieval Augmented Generation with PineCone.

Configuration de LlamaIndex

Avant d’entrer dans le tutoriel et le projet LlamaIndex, nous devons installer le package Python et configurer l’API.

Nous pouvons simplement installer LlamaIndex avec pip.

pip install llama-index

Par défaut, LlamaIndex utilise le modèle OpenAI GPT-3 text-davinci-003. Pour utiliser ce modèle, vous devez définir une variable OPENAI_API_KEY. Vous pouvez créer un compte gratuit et obtenir une clé API en vous connectant au nouveau jeton d’API d’OpenAI.

import os

os.environ["OPENAI_API_KEY"] = "INSERT OPENAI KEY"

Assurez-vous également d’avoir installé le package openai.

pip install openai

Ajouter des données personnelles aux LLMs avec LlamaIndex

Dans cette section, nous allons utiliser LlamaIndex pour créer un lecteur de CV. Vous pouvez télécharger votre CV depuis votre page de profil LinkedIn, en cliquant sur Plus, puis Enregistrer en PDF.

Notez que nous utilisons DataLab pour exécuter le code Python. Vous pouvez accéder à tout le code et aux sorties dans le workbook LlamaIndex : ajouter des données personnelles aux LLMs ; vous pouvez facilement créer votre propre copie pour tout exécuter sans rien installer sur votre ordinateur !

Avant toute exécution, nous devons installer llama-index, openai et pypdf. Nous installons pypdf pour pouvoir lire et convertir des fichiers PDF.

%pip install llama-index openai pypdf

Charger les données et créer l’index

Nous avons un répertoire nommé « Private-Data » qui contient un seul fichier PDF. Nous allons utiliser SimpleDirectoryReader pour le lire puis le convertir en index à l’aide de TreeIndex.

from llama_index import TreeIndex, SimpleDirectoryReader

resume = SimpleDirectoryReader("Private-Data").load_data()
new_index = TreeIndex.from_documents(resume)

Exécuter une requête

Une fois les données indexées, vous pouvez commencer à poser des questions avec as_query_engine(). Cette fonction vous permet d’interroger des informations précises au sein du document et d’obtenir une réponse correspondante avec l’aide du modèle OpenAI GPT-3 text-davinci-003.

Remarque : vous pouvez configurer l’API OpenAI dans DataLab en suivant le tutoriel Utiliser GPT-3.5 et GPT-4 via l’API OpenAI en Python.

Comme on peut le voir, le modèle LLM a répondu avec précision à la requête. Il a parcouru l’index et trouvé l’information pertinente.

query_engine = new_index.as_query_engine()
response = query_engine.query("When did Abid graduated?")
print(response)
Abid graduated in February 2014.

Nous pouvons poser une autre question sur la certification. Il semble que LlamaIndex ait bien compris le profil du candidat, ce qui peut être précieux pour des entreprises à la recherche de profils spécifiques.

response = query_engine.query("What is the name of certification that Abid received?")
print(response)
Data Scientist Professional

Sauvegarder et recharger le contexte

Créer un index peut prendre du temps. Nous pouvons éviter de le reconstruire en sauvegardant le contexte. Par défaut, la commande suivante enregistre le magasin d’index dans le répertoire ./storage.

new_index.storage_context.persist()

création d’un index

Une fois cela fait, nous pouvons rapidement recharger le contexte de stockage et recréer un index.

from llama_index import StorageContext, load_index_from_storage

storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)

Pour vérifier que tout fonctionne, nous allons poser au moteur de requête une question issue du CV. Il semble que nous ayons bien rechargé le contexte.

query_engine = index.as_query_engine()
response = query_engine.query("What is Abid's job title?")
print(response)
Abid's job title is Technical Writer.

Chatbot

Plutôt qu’un simple questions-réponses, nous pouvons aussi utiliser LlamaIndex pour créer un chatbot personnel. Il suffit d’initialiser l’index avec la fonction as_chat_engine().

Nous allons poser une question simple.

query_engine = index.as_chat_engine()
response = query_engine.chat("What is the job title of Abid in 2021?")
print(response)
Abid's job title in 2021 is Data Science Consultant.

Et sans fournir de contexte supplémentaire, nous allons poser des questions de suivi.

response = query_engine.chat("What else did he do during that time?")
print(response)
In 2021, Abid worked as a Data Science Consultant for Guidepoint, a Writer for Towards Data Science and Towards AI, a Technical Writer for Machine Learning Mastery, an Ambassador for Deepnote, and a Technical Writer for Start It Up.

Il est manifeste que le moteur de chat fonctionne parfaitement.

Après avoir créé votre application de langage, la prochaine étape de votre feuille de route consiste à lire les avantages et inconvénients de l’utilisation de LLMs dans le cloud versus leur exécution en local. Cela vous aidera à déterminer l’approche la mieux adaptée à vos besoins.

Créer une lecture vocale de textes Wikipedia avec LlamaIndex

Notre prochain projet consiste à développer une application capable de répondre à des questions issues de Wikipedia et de les convertir en parole.

Le code source et des informations complémentaires sont disponibles dans ce workbook DataLab.

Web scraping d’une page Wikipedia

Nous allons d’abord extraire les données de la page Italy - Wikipedia et les enregistrer dans un fichier italy_text.txt dans le dossier data.

from pathlib import Path

import requests

response = requests.get(
    "https://en.wikipedia.org/w/api.php",
    params={
        "action": "query",
        "format": "json",
        "titles": "Italy",
        "prop": "extracts",
        # 'exintro': True,
        "explaintext": True,
    },
).json()
page = next(iter(response["query"]["pages"].values()))
italy_text = page["extract"]

data_path = Path("data")

if not data_path.exists():
    Path.mkdir(data_path)

with open("data/italy_text.txt", "w") as fp:
    fp.write(italy_text)

import du texte Italy

Charger les données et construire l’index

Ensuite, nous devons installer les packages nécessaires. Le package elevenlabs nous permet de convertir facilement du texte en parole via une API.

%pip install llama-index openai elevenlabs

À l’aide de SimpleDirectoryReader, nous allons charger les données et convertir le fichier TXT en magasin vectoriel avec VectorStoreIndex.

from llama_index import VectorStoreIndex, SimpleDirectoryReader
from IPython.display import Markdown, display
from llama_index.tts import ElevenLabsTTS
from IPython.display import Audio

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)

Requête

Notre objectif est de poser une question générale sur le pays et de recevoir une réponse du query_engine du LLM.

query = "Tell me an interesting fact about the country?"
query_engine = index.as_query_engine()
response = query_engine.query(query)

display(Markdown(f"<b>{query}</b>"))
display(Markdown(f"<p>{response}</p>"))

Invite et sortie

Texte en parole

Ensuite, nous utiliserons le module llama_index.tts pour accéder à l’API ElevenLabsTTS. Vous devez fournir une clé API ElevenLabs pour lancer la génération audio. Vous pouvez obtenir une clé API gratuitement sur le site ElevenLabs.

import os

elevenlabs_key = os.environ["ElevenLabs_key"]
tts = ElevenLabsTTS(api_key=elevenlabs_key)

Nous allons passer la réponse à la fonction generate_audio pour générer une voix naturelle. Pour écouter l’audio, nous utiliserons la fonction Audio de IPython.display.

audio = tts.generate_audio(str(response))
Audio(audio)

sortie audio

Ceci est un exemple simple. Vous pouvez combiner plusieurs modules pour créer votre assistant, comme Siri, qui répond à vos questions en s’appuyant sur vos données privées. Pour plus d’informations, reportez-vous à la documentation LlamaIndex.

En complément de LlamaIndex, LangChain permet également de créer des applications basées sur des LLMs. Vous pouvez aussi lire Introduction à LangChain pour l’ingénierie des données et les applications data pour une vue d’ensemble de ce que vous pouvez faire avec LangChain, y compris les problèmes que LangChain résout et des cas d’usage data.

Cas d’usage de LlamaIndex

LlamaIndex fournit une boîte à outils complète pour créer des applications basées sur le langage. En plus, vous pouvez exploiter divers chargeurs de données et outils d’agent depuis Llama Hub afin de développer des applications complexes aux multiples fonctionnalités.

Vous pouvez connecter des sources de données personnalisées à votre LLM avec un ou plusieurs plugins Data Loaders.

Data Loaders de Llama Hub

Data Loaders depuis Llama Hub

Vous pouvez également utiliser des Agent tools pour intégrer des outils et API tiers.

Agent Tools de Llama Hub

Agent Tools depuis Llama Hub

En bref, vous pouvez utiliser LlamaIndex pour créer :

  • Questions-réponses sur des documents
  • Chatbots
  • Agents
  • Données structurées
  • Application web full-stack
  • Déploiement privé

Pour approfondir ces cas d’usage, consultez la documentation LlamaIndex.

Conclusion

LlamaIndex propose une boîte à outils puissante pour construire des systèmes de génération augmentée par la recherche, combinant la force des grands modèles de langage et des bases de connaissances personnalisées. Il permet de créer un magasin indexé de données spécifiques à un domaine et de l’exploiter à l’inférence pour fournir au LLM le contexte pertinent et générer des réponses de haute qualité.

Dans ce tutoriel, nous avons découvert LlamaIndex et son fonctionnement. Nous avons également construit un lecteur de CV et un projet de synthèse vocale avec seulement quelques lignes de code Python. Créer une application LLM avec LlamaIndex est simple, et vous bénéficiez d’une vaste bibliothèque de plugins, chargeurs de données et agents.

Pour devenir un expert du développement LLM, la prochaine étape naturelle est de vous inscrire au cours Master Large Language Models Concepts. Ce cours vous apportera une compréhension approfondie des LLMs, de leurs applications, de leurs méthodes d’entraînement, des considérations éthiques et des dernières avancées de la recherche.

Abid Ali Awan

Auteur

Abid Ali Awan

En tant que data scientist certifié, je suis passionné par l'utilisation des technologies de pointe pour créer des applications innovantes d'apprentissage automatique. Avec une solide expérience en reconnaissance vocale, en analyse de données et en reporting, en MLOps, en IA conversationnelle et en NLP, j'ai affiné mes compétences dans le développement de systèmes intelligents qui peuvent avoir un impact réel. En plus de mon expertise technique, je suis également un communicateur compétent, doué pour distiller des concepts complexes dans un langage clair et concis. En conséquence, je suis devenu un blogueur recherché dans le domaine de la science des données, partageant mes idées et mes expériences avec une communauté grandissante de professionnels des données. Actuellement, je me concentre sur la création et l'édition de contenu, en travaillant avec de grands modèles linguistiques pour développer un contenu puissant et attrayant qui peut aider les entreprises et les particuliers à tirer le meilleur parti de leurs données.

Sujets

Contenus associés