Tutoriel sur LangChain : guide pour créer des applications basées sur les LLM

139686_-_Elastic_-_Headers_-_V1_2.jpg

Ces dernières années, les grands modèles de langage (LLM) comme GPT-4 et LLaMA ont ouvert un nouveau monde de possibilités. On a assisté à une véritable explosion des outils et des applications d'IA, et le nom de ChatGPT s'est répandu comme une traînée de poudre quasiment du jour au lendemain. Toutefois, ce boom n'aurait pas été possible s'il n'y avait pas eu des outils et des frameworks puissants créés pour étayer cette nouvelle génération d'applications. 

Parmi ces frameworks se trouve LangChain, qui facilite la conception de nouvelles applications à l'aide de LLM existants. Développé par Harrison Chase, expert en Machine Learning, il a été lancé en 2022 sous forme de projet open source. Techniquement parlant, ce framework représente une grande avancée pour combler le fossé entre les grands modèles de langage et la création d'applications diverses et variées.

LangChain : qu'est-ce que c'est ?

Pour le dire simplement, LangChain est une interface standardisée qui simplifie la création d'applications d'IA. Ce framework met à votre disposition un éventail d'outils pour connecter différents composants et créer des workflows complexes. On retrouve notamment les LLM et plusieurs types de sources de données. Lorsqu'un utilisateur interagit avec l'application, LangChain utilise ses connexions à un LLM pour traiter la requête et générer une réponse appropriée. Il peut également se servir d'informations et de données venant de sources externes, comme un document ou une base de données, pour fournir des réponses plus précises et pertinentes en contexte.

Par exemple, si un utilisateur pose une question, LangChain s'appuiera sur le LLM pour comprendre la question et formuler une réponse. Mais il puisera aussi dans une ou plusieurs sources de données externes pour améliorer sa réponse. Votre application devient alors plus intelligente et capable de gérer des requêtes complexes et spécialisées.

Sur le fond, vous renforcez les capacités du LLM en lui fournissant des données qui sont plus pertinentes pour les problèmes que vous souhaitez qu'il résolve.

Disponible en tant que package Python et TypeScript, ce framework propose plusieurs fonctionnalités particulièrement intéressantes :

  • Interaction avec le modèle : LangChain permet d'interagir avec n'importe quel modèle de langage, en gérant les entrées et en extrayant des informations des sorties.

  • Intégration efficace : il permet une intégration efficace aux plateformes d'IA populaires, comme OpenAI et HuggingFace.

  • Flexibilité et personnalisation : LangChain offre de la flexibilité, des options de personnalisation et des composants puissants pour créer un vaste panel d'applications dans différents secteurs.

  • Principaux composants : le framework est composé de bibliothèques LangChain, de modèles LangChain, de LangServe et de LangSmith, ce qui simplifie l'ensemble du cycle de vie des applications. 

  • Interfaces standardisées : il fournit des interfaces standardisées, assure une gestion des invites et propose des capacités de gestion de la mémoire, ce qui permet aux modèles de langage d'interagir avec les sources de données.

Grâce à cette combinaison de fonctionnalités, il est flexible, rapide, scalable et facile à utiliser, en bref, une petite pépite pour les développeurs souhaitant se lancer avec l'IA. 

Fonctionnement de LangChain

LangChain est un framework modulaire qui s'intègre aux LLM. Il s'agit d'une interface standardisée qui gomme les complexités liées à l'utilisation de différentes API de LLM. Que vous souhaitiez utiliser GPT-4, LLaMA ou n'importe quel LLM, c'est le même processus ! Il propose aussi une sélection dynamique des LLM, qui permet aux développeurs de sélectionner le LLM le plus approprié selon la tâche qu'ils exécutent avec LangChain.

Sa conception modulaire facilite aussi le traitement et la transformation des données d'entrée en sorties exploitables. Elle gère différents types de données, notamment du texte, du code et des formats multimédia, et elle fournit des outils pour préparer, nettoyer et normaliser les données. Le but est de s'assurer que les données soient appropriées lors de leur utilisation par les LLM. Cela peut passer par une conversion en tokens, une normalisation et une identification de la langue.

LangChain traite aussi les sorties des LLM et les convertit dans des formats qui sont adaptés aux exigences de l'application ou de la tâche concernée. Dans cette optique, il peut par exemple mettre un texte en forme, générer des extraits de code ou résumer des données complexes.

Principaux concepts de LangChain

L'architecture de LangChain est basée sur des composants et des chaînes. Les composants représentent des modules réutilisables qui exécutent des tâches spécifiques : traitement des données d'entrée, génération de formats texte, accès à des informations externes, gestion des workflows, etc. Les chaînes sont des séquences de composants qui fonctionnent ensemble pour atteindre un objectif plus vaste, par exemple : résumer un document, générer des textes créatifs ou fournir des recommandations personnalisées.

Composants et modules

Dans LangChain, les termes "composants" et "modules" sont parfois utilisés de manière interchangeable, mais il y a une distinction subtile entre les deux : 

  • Les composants sont les principaux constituants de LangChain et représentent des tâches ou fonctionnalités spécifiques. Ils sont généralement de petite taille, dédiés et réutilisables d'une application et d'un workflow à l'autre. 

  • Les modules, quant à eux, combinent plusieurs composants pour former des fonctionnalités plus complexes. LangChain propose même des interfaces standard pour quelques-uns de ses modules principaux, notamment les modules de gestion de la mémoire (constituant réutilisable qui stocke et gère les données pour qu'elles soient utilisées par les grands modèles de langage) et les agents (unité de contrôle dynamique qui orchestre les chaînes en fonction du feedback en temps réel et des interactions avec l'utilisateur). 

Tout comme les composants, les modules sont réutilisables et peuvent être combinés pour créer des workflows encore plus complexes. C'est ce qu'on appelle une chaîne, dans laquelle des séquences de composants ou de modules sont rassemblées pour atteindre un but spécifique. Les chaînes jouent un rôle essentiel pour orchestrer les workflows dans LangChain et pour créer des applications efficaces capables de gérer une grande variété de tâches.

Intégration aux LLM

LangChain s'intègre facilement aux LLM grâce à son interface standardisée. Mais lorsque LangChain s'intègre aux LLM, ce n'est pas uniquement pour fournir un mécanisme de connexion. Il offre aussi plusieurs fonctionnalités qui optimisent l'utilisation des LLM pour créer des applications basées sur un langage :

  • Gestion des invites : LangChain vous aide à créer des invites efficaces qui aident les LLM à comprendre la tâche et à générer une réponse utile.

  • Sélection dynamique des LLM : vous pouvez ainsi sélectionner le LLM le plus approprié selon la tâche à partir de différents facteurs (p. ex. complexité, exigences de précision, ressources de calcul).

  • Intégration de la gestion de la mémoire : LangChain intègre des modules de gestion de la mémoire, ce qui signifie que les LLM peuvent consulter et traiter des informations externes.

  • Gestion basée sur des agents : vous pouvez orchestrer des workflows complexes basés sur des LLM, qui s'adaptent aux changements de circonstances et aux besoins de l'utilisateur.

Gestion des workflows

Dans LangChain, la gestion des workflows est le processus qui consiste à orchestrer et à contrôler l'exécution des chaînes et des agents pour résoudre un problème spécifique. Elle implique de gérer le flux de données, de coordonner l'exécution des composants et de vérifier que les applications répondent efficacement aux interactions avec l'utilisateur et aux changements de circonstances. Voici quelques composants principaux de la gestion des workflows :

  • Orchestration des chaînes : LangChain coordonne l'exécution des chaînes pour veiller à ce que les tâches soient réalisés dans le bon ordre et que les données soient correctement transférées d'un composant à l'autre.

  • Gestion basée sur des agents : l'utilisation d'agents est simplifiée grâce à des modèles prédéfinis et une interface conviviale.

  • Gestion des incidents : LangChain suit automatiquement l'état de l'application et fournit aux développeurs une interface unifiée pour consulter et modifier les informations relatives à l'état.

  • Gestion de la simultanéité : LangChain gère les complexités liées à l'exécution simultanée, ce qui permet aux développeurs de se consacrer à des tâches et à des interactions sans avoir à se préoccuper des problèmes de threading et de synchronisation.

Configuration de LangChain

L'un des avantages de LangChain, c'est qu'il y a peu de prérequis pour pouvoir se lancer. Dans ce guide, nous allons utiliser Python. Vous devrez donc avoir Python 3.8 ou une version supérieure sur votre ordinateur. C'est tout !

Installation et configuration

La première étape consiste à installer le framework LangChain principal. Le plus simple, c'est d'exécuter la commande PIP suivante :

pip install langchain

Vous avez besoin ensuite d'un LLM qui interagira avec LangChain. Dans cet exemple, nous allons utiliser OpenAI, mais vous pouvez utiliser le LLM de votre choix pour votre application :

pip install openai

Pour qu'OpenAI fonctionne, vous aurez également besoin d'une clé d'API pour authentifier vos requêtes. Vous pouvez en obtenir une en créant un compte OpenAI, en accédant à la section des clés d'API et en sélectionnant "Create new secret key" (Créer une clé secrète). Une fois la clé en votre possession, conservez-la en toute sécurité dans un endroit approprié. Vous en aurez besoin très rapidement.

Pour finir, créez un fichier texte appelé data.txt. Il s'agira de la source de données externe que vous utiliserez pour donner du contexte à votre LLM :

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

Et maintenant, place à l'action !

Développement d'applications avec LangChain

Pour créer cette application LangChain, ouvrez l'éditeur de texte ou l'environnement de développement de votre choix, puis créez un nouveau fichier Python (.py) au même endroit que le fichier data.txt. Vous allez créer une application très simple, qui envoie une invite au LLM GPT-3 d'OpenAI et imprime la réponse.

Vous cherchez quelque chose d'un peu plus technique ? Consultez notre guide sur l'utilisation d'Amazon Bedrock avec Elasticsearch et Langchain.

Étape 1 : importez la classe OpenAI à partir de LangChain

En haut de votre script Python, ajoutez cette instruction d'importation pour collecter la classe OpenAI à partir du module LLM de LangChain :

from langchain.llms import OpenAI

Étape 2 : définissez des données de lecture fonctionnelle à partir d'un fichier texte

Définissez la fonction, afin que l'application prenne le chemin du fichier comme argument. Cela permettra d'ouvrir le fichier pour lecture et d'en retourner le contenu :

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

Étape 3 : initialisez le modèle OpenAI

Créez une instance de la classe OpenAI avec votre clé d'API, en remplaçant YOUR-OPENAI-KEY par la clé réelle que vous avez obtenue avec OpenAI :

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

Étape 4 : définissez une fonction pour demander une réponse d'OpenAI

Écrivez une fonction qui prenne une invite comme argument et qui renvoie la réponse à partir du modèle GPT-3 :

def get_response(prompt):
    return gpt3(prompt)

Étape 5 : lisez les données à partir du fichier texte

Indiquez le chemin menant au fichier texte et utilisez la fonction que vous avez définie précédemment pour en lire le contenu. Stockez ensuite les données dans la variable external_data :

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

Étape 6 : créez une invite test

C'est à ce stade que vous définissez l'invite que vous allez envoyer à GPT-3. Dans cet exemple, vous allez lui demander de lire le texte et de vous indiquer de quelle émission le fichier parle :

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

Étape 7 : obtenez la réponse de GPT-3 et imprimez-la

Invoquez une fonction qui envoie l'invite préparée, puis récupère et imprime la réponse de GPT-3 :

print("Response:", get_response(prompt))

Étape 8 : exécutez l'application et vérifiez la réponse

Une fois toutes les étapes précédentes réalisées, vous disposez d'une application Python semblable à celle qui suit :

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

Maintenant, tout ce qu'il vous reste à faire, c'est exécuter votre application Python pour vous assurer qu'elle fonctionne. Enregistrez le fichier et exécutez votre application à l'aide de la commande ci-dessous dans le terminal :

python YOUR-APP-NAME.py

Si tout s'est déroulé comme prévu, vous obtenez une réponse qui ressemble à la suivante :

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

Cas d'utilisation

Nous avons vu ici une démonstration extrêmement simplifiée. Ce qui reste immuable, c'est la flexibilité de LangChain, qui vous offre des possibilités illimitées pour créer de nouvelles applications d'IA. Nous n'aurions pas la place de toutes les répertorier ici, mais nous allons aborder quelques cas d'utilisation pour vous donner des idées sur ce que vous pourriez créer :

  • Chatbot : créez votre propre chatbot, dans lequel vous pourrez poser des questions en langage naturel et maintenir un historique des conversation. 

  • Application de questions-réponses : créez une application dans laquelle vous pourrez demander les informations que vous recherchez et qui trouvera la réponse dans les documents stockés.

  • Recherche textuelle (BM25) : créez votre propre application de recherche textuelle pour interroger de grands volumes de données.

  • Recherche vectorielle : créez une application qui recherche des similarités dans les données et qui filtre les métadonnées.

  • Recherche hybride (textuelle et vectorielle) : développez une IA qui met en correspondance les documents similaires à l'aide d'un filtrage textuel et vectoriel.

  • LangChain avec votre propre LLM : utilisez LangChain pour créer une application d'IA qui utilise votre propre LLM avec des sources de données externes.

Création d'applications basées sur des LLM avec LangChain

Il devrait être clair à présent que, en combinant la puissance des LLM au contexte et aux informations supplémentaires qui se trouvent dans les sources de données externes, LangChain vous offre des possibilités illimitées. C'est également très facile de se lancer avec LangChain, comme nous avons pu le voir dans ce tutoriel. La facilité d'utilisation, la flexibilité et la puissance de LangChain en font une plateforme idéale pour développer un vaste éventail d'applications d'IA. Chatbot, application de questions-réponses ou encore moteur de recherche... Peu importe ce que vous créez, LangChain est là pour vous aider à concevoir des solutions innovantes et efficaces.

Prochaines étapes conseillées

Pour aller plus loin, voici quatre méthodes qui vous aideront à révéler des informations exploitables à partir des données de votre entreprise :

  1. Démarrez un essai gratuit et découvrez l'aide qu'Elastic peut apporter à votre entreprise.

  2. Faites le tour de nos offres afin de savoir comment Elasticsearch Platform fonctionne et comment nos solutions s'adaptent à vos besoins.

  3. Découvrez comment intégrer l'IA générative dans votre entreprise.

  4. Partagez cet article avec une personne de votre réseau qui pourrait être intéressée par son contenu. Partagez cet article par e-mail, sur LinkedIn, sur Twitter ou sur Facebook.

La publication et la date de publication de toute fonctionnalité ou fonction décrite dans le présent article restent à la seule discrétion d'Elastic. Toute fonctionnalité ou fonction qui n'est actuellement pas disponible peut ne pas être livrée à temps ou ne pas être livrée du tout.

Dans cet article, nous sommes susceptibles d'avoir utilisé ou mentionné des outils d'intelligence artificielle générative tiers appartenant à leurs propriétaires respectifs qui en assurent aussi le fonctionnement. Elastic n'a aucun contrôle sur les outils tiers et n'est en aucun cas responsable de leur contenu, de leur fonctionnement, de leur utilisation, ni de toute perte ou de tout dommage susceptible de survenir à cause de l'utilisation de tels outils. Lorsque vous utilisez des outils d'IA avec des informations personnelles, sensibles ou confidentielles, veuillez faire preuve de prudence. Toute donnée que vous saisissez dans ces solutions peut être utilisée pour l'entraînement de l'IA ou à d'autres fins. Vous n'avez aucune garantie que la sécurisation ou la confidentialité des informations renseignées sera assurée. Vous devriez vous familiariser avec les pratiques en matière de protection des données personnelles et les conditions d'utilisation de tout outil d'intelligence artificielle générative avant de l'utiliser. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine et les marques associées sont des marques commerciales, des logos ou des marques déposées d'Elasticsearch N.V. aux États-Unis et dans d'autres pays. Tous les autres noms de produits et d'entreprises sont des marques commerciales, des logos ou des marques déposées appartenant à leurs propriétaires respectifs.