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

Ces dernières années, les grands modèles de langage (LLM) comme GPT-4 et LLaMA ont créé tout un monde de possibilités. Cela a marqué le début d'un véritable boom des outils et applications d'IA, et ChatGPT est devenu un nom connu de tous pratiquement du jour au lendemain. Mais cet essor n'aurait pas été possible sans les outils et frameworks performants créés pour faciliter le développement de cette nouvelle génération d'applications.
L'un de ces frameworks est LangChain, qui permet de créer facilement de nouvelles applications à partir des LLM existants. Il a été développé par Harrison Chase, expert en machine learning, et lancé en 2022 en tant que projet open source. Ce framework constitue une étape majeure pour combler l'écart technique entre les modèles de langage existants et la création d'applications nouvelles et variées.
LangChain expliqué
En termes simples, LangChain est une interface standardisée qui simplifie le processus de création d'applications d'IA. Il offre une variété d'outils que vous pouvez utiliser pour connecter différents composants et créer des workflows complexes. Cela inclut les LLM et divers 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 les réponses appropriées. Il peut également utiliser des informations et des données provenant de sources externes comme un document ou une base de données pour fournir des réponses plus précises et contextuellement pertinentes.
Par exemple, lorsqu'un utilisateur pose une question, LangChain utilise le LLM pour comprendre la question et formuler une réponse. Mais il s'appuie également sur une ou plusieurs sources de données externes pour améliorer sa réponse. Votre application est ainsi beaucoup plus intelligente et capable de gérer des requêtes complexes et spécialisées.
En substance, vous augmentez les capacités du LLM en lui fournissant des données plus pertinentes pour les problèmes que vous souhaitez qu'il résolve.
Disponible sous forme de package Python et TypeScript, il offre plusieurs fonctionnalités remarquables :
Interaction avec le modèle : LangChain permet d'interagir avec n'importe quel modèle de langage, de gérer les entrées et d'extraire des informations des sorties.
Intégration efficace : il assure une intégration efficace avec des plateformes d'IA populaires comme OpenAI et Hugging Face.
Flexibilité et personnalisation : LangChain offre flexibilité, options de personnalisation et composants puissants pour créer une grande variété d'applications dans différents secteurs.
Composants principaux : le framework se compose des bibliothèques LangChain, des modèles LangChain, de LangServe et de LangSmith, qui simplifient l'ensemble du cycle de vie de l'application.
Interfaces standardisées : il fournit des interfaces standardisées, une gestion des prompts et des capacités mémoire, permettant aux modèles de langage d'interagir avec les sources de données.
Cette combinaison de fonctionnalités le rend flexible, rapide, évolutif et facile à utiliser, ce qui est une véritable aubaine pour tous les développeurs tentés de se lancer dans l'IA.
Comment fonctionne LangChain ?
LangChain est un framework modulaire qui s'intègre aux LLM. Il s'agit d'une interface standardisée qui simplifie les complexités et les difficultés liées à l'utilisation de différentes API de LLM : le processus d'intégration est identique pour GPT-4, LLaMA et tout autre LLM. LangChain propose également une sélection dynamique des LLM, permettant aux développeurs de choisir le modèle le plus adapté à la tâche spécifique qu'ils effectuent avec LangChain.
La conception modulaire facilite également le traitement et la transformation des données d'entrée en sorties exploitables. Il gère divers types de données, y compris le texte, le code et les formats multimédias, et fournit des outils pour le prétraitement, le nettoyage et la normalisation des données. L'objectif est de garantir que les données sont adaptées à l'utilisation par les LLM et peut impliquer la tokenisation, la normalisation et l'identification de la langue.
LangChain traite aussi les données de sortie du LLM, en les transformant dans des formats adaptés aux exigences spécifiques de l'application ou de la tâche. Cela inclut notamment la mise en forme du texte, la génération d'extraits de code et la fourniture de résumés de données complexes.
Concepts fondamentaux de LangChain
L'architecture de LangChain repose sur le concept de composants et de chaînes. Les composants représentent des modules réutilisables qui exécutent des tâches spécifiques, telles que le traitement de données d'entrée, la génération de formats de texte, l'accès à des informations externes ou la gestion de workflows. Les chaînes sont des séquences de composants qui fonctionnent ensemble pour atteindre un objectif plus large, comme résumer un document, générer des formats de texte créatifs ou fournir des recommandations personnalisées.
Composants et modules
Dans LangChain, les termes "composants" et "modules" sont parfois employés de manière interchangeable, mais il existe une distinction subtile entre les deux :
Les composants sont les éléments du noyau de LangChain, représentant des tâches ou des fonctionnalités spécifiques. Ces systèmes sont généralement petits et ciblés, et peuvent être réutilisés dans différentes applications et workflows.
Les modules, en revanche, combinent plusieurs composants pour former des fonctionnalités plus complexes. LangChain fournit même des interfaces standard pour certains de ses modules principaux, y compris des modules mémoire (un bloc de construction réutilisable qui stocke et gère les données pour une utilisation par de grands modèles de langage) et des agents (une unité de contrôle dynamique qui orchestre des chaînes en fonction du retour en temps réel et de l'interaction utilisateur).
De même que 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, où des séquences de composants ou de modules sont assemblées pour atteindre un objectif spécifique. Les chaînes sont fondamentales pour l'orchestration des workflows dans LangChain et sont essentielles pour créer des applications efficaces capables de gérer un large éventail de tâches.
Intégration aux LLM
LangChain s'intègre parfaitement aux LLM grâce à une interface standardisée. Mais son intégration ne se limite pas à la simple connexion : elle offre également plusieurs fonctionnalités qui optimisent l'utilisation des LLM pour le développement d'applications basées sur le langage :
Gestion des prompts : LangChain vous permet d'élaborer des prompts efficaces qui aident les LLM à comprendre la tâche et à générer une réponse utile.
Sélection dynamique des LLM : Cette fonctionnalité vous permet de sélectionner le LLM le plus approprié pour différentes tâches en fonction de facteurs tels que la complexité, les exigences de précision et les ressources de calcul.
Intégration de la gestion de la mémoire : LangChain s'intègre aux modules de mémoire, ce qui signifie que les LLM peuvent accéder à des informations externes et les traiter.
- Gestion par agents : cela vous permet d'orchestrer des workflows complexes basés sur LLM qui s'adaptent à l'évolution des circonstances et aux besoins des utilisateurs.
Gestion des workflows
Dans LangChain, la gestion des workflows consiste à orchestrer et à contrôler l'exécution des chaînes et des agents pour résoudre un problème spécifique. Il s'agit de gérer le flux de données, de coordonner l'exécution des composants et de veiller à ce que les applications répondent efficacement aux interactions des utilisateurs et à l'évolution des circonstances. Voici quelques-uns des principaux composants de la gestion des workflows :
Orchestration des chaînes : LangChain coordonne l'exécution des chaînes afin de s'assurer que les tâches sont exécutées dans le bon ordre et que les données sont correctement transmises entre les composants.
Gestion basée sur des agents : l'utilisation d'agents est simplifiée avec des modèles prédéfinis et une interface conviviale.
Gestion de l'état : LangChain suit automatiquement l'état de l'application et fournit aux développeurs une interface unifiée pour accéder aux informations d'état et les modifier.
Gestion de la simultanéité : LangChain gère les complexités de l'exécution simultanée, permettant aux développeurs de se concentrer sur les tâches et les interactions sans se soucier des problèmes de threading ou de synchronisation.
Configuration de LangChain
L'un des avantages de LangChain est qu'il ne nécessite que très peu de prérequis pour se lancer. Dans ce guide, nous utiliserons Python ; vous devrez donc avoir installé Python 3.8 ou une version ultérieure sur votre ordinateur. C'est tout !
Installation et configuration
La première étape consiste à installer le framework noyau LangChain. La façon la plus simple de le faire est d'utiliser cette commande PIP :
pip install langchainIl vous faut ensuite un LLM avec lequel LangChain pourra interagir. Dans cet exemple, nous utiliserons OpenAI, mais vous pouvez choisir n'importe quel LLM pour votre application :
pip install openaiPour qu'OpenAI fonctionne, vous avez également besoin d'une clé API pour authentifier vos requêtes. Pour en obtenir une, crées un compte OpenAI, accédez à la section des clés API, puis sélectionnez "Créer une nouvelle clé secrète". Une fois que vous avez la clé, conservez-la en lieu sûr. Vous en aurez besoin sous peu.
Enfin, créez un fichier texte appelé data.txt. Ce sera la source de données externe que vous utiliserez pour donner du contexte au 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
Place maintenant à la partie amusante !
Développer des applications avec LangChain
Pour créer cette application LangChain, ouvrez votre éditeur de texte ou IDE préféré et créez un nouveau fichier Python (.py) au même emplacement que data.txt. Vous allez créer une application très simple qui envoie un prompt au LLM GPT-3 d'OpenAI et affiche la réponse.
Vous cherchez quelque chose d'un peu plus avancé ? Consultez notre guide sur l'utilisation d'Amazon Bedrock avec Elasticsearch et Langchain.
Étape 1 : Importer la classe OpenAI depuis LangChain
En haut de votre script Python, ajoutez cette instruction d'importation pour extraire la classe OpenAI du module LLM de LangChain :
from langchain.llms import OpenAIÉtape 2 : Définir une fonction de lecture de données à partir d'un fichier texte :
Définissez la fonction de manière à ce que l'application prenne le chemin du fichier comme argument. Cela ouvrira le fichier en lecture et renverra son contenu :
def read_data_from_file(file_path):
with open(file_path, 'r') as file:
return file.read()Étape 3 : Initialiser le modèle OpenAI
Créez une instance de la classe OpenAI avec votre clé API, en remplaçant YOUR-OPENAI-KEY par la clé réelle que vous avez obtenue auprès d'OpenAI :
gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')Étape 4 : Définir une fonction pour demander une réponse à OpenAI
Écrivez une fonction qui prend un prompt comme argument et renvoie la réponse du modèle GPT-3 :
def get_response(prompt):
return gpt3(prompt)
Étape 5 : Lire les données du fichier texte
Spécifiez le chemin vers le fichier texte et utilisez la fonction que vous avez définie précédemment pour en lire le contenu. Vous stockerez ensuite les données dans la variable external_data :
file_path = 'data.txt'
external_data = read_data_from_file(file_path)Étape 6 : Créer un sujet de test
C'est ici que vous définissez le prompt que vous allez envoyer à GPT-3. Dans cet exemple, vous allez lui demander de lire le texte et de vous indiquer de quelle émission télévisée il est question dans le fichier texte :
prompt = f"Based on the following data: {external_data}, what TV show is this about?"Étape 7 : Obtenir la réponse de GPT-3 et l'insérer
Appelez une fonction qui envoie le prompt préparé, puis récupère et insère la réponse à partir de GPT-3 :
print("Response:", get_response(prompt))
Étape 8 : Lancer l'application et vérifier la réponse
Une fois que vous avez fait toutes ces opérations, vous obtenez une application Python qui ressemble à ceci :
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))Il ne reste donc plus qu'à exécuter votre application Python pour vous assurer qu'elle fonctionne ! Enregistrez le fichier, puis exécutez votre application à l'aide de cette commande dans le terminal :
python YOUR-APP-NAME.pySi tout s'est déroulé comme prévu, vous obtenez une réponse qui ressemble à ceci :
Response:
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".Cas d'utilisation
Cet exemple est une démonstration très simplifiée, mais la flexibilité de LangChain offre des possibilités infinies pour créer de nouvelles applications d'IA. Il nous serait impossible de toutes les énumérer ici, mais nous allons passer en revue quelques études de cas afin de mettre en avant les différentes applications que vous pourriez développer :
Chatbot : créer votre propre chatbot où vous pourrez poser des questions en langage naturel et conserver l'historique des conversations.
Application de questions-réponses : créer une application où vous pouvez demander les informations que vous recherchez, et elle trouvera la réponse dans les documents stockés.
Recherche de texte (BM25) : créer votre propre application de recherche de texte pour interroger de grandes quantités de données.
Recherche vectorielle : créer une application qui recherche les similarités de données et filtre les métadonnées.
Recherche hybride (texte et vectorielle) : développer une IA qui associe des documents similaires en utilisant à la fois le filtrage textuel et vectoriel.
- LangChain avec votre propre LLM : utiliser LangChain pour créer une application d'IA qui utilise votre propre LLM avec des sources de données externes.
Créer des applications basées sur LLM à l'aide de LangChain
Il devrait être clair maintenant qu'en combinant la puissance des LLM avec le contexte et les informations supplémentaires des sources de données externes, LangChain vous offre des possibilités illimitées. Il est également remarquablement facile de démarrer, comme le montre ce tutoriel sur LangChain. Cette facilité d'utilisation, combinée à la flexibilité et à la puissance de LangChain, en fait une plateforme idéale pour développer un large éventail d'applications d'IA. Que vous développiez un chatbot, une application de questions-réponses ou un moteur de recherche, LangChain peut vous aider à créer des solutions innovantes et efficaces.
Prochaines étapes conseillées
Lorsque vous êtes prêt, voici quatre méthodes qui vous aideront à révéler des informations exploitables à partir des données de votre entreprise :
Démarrez un essai gratuit et découvrez l'aide qu'Elastic peut apporter à votre entreprise.
Explorez nos produits. Découvrez le fonctionnement d'Elasticsearch Platform et comment nos solutions s'adaptent à vos besoins.
Découvrez comment intégrer l'IA générative dans votre entreprise.
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 X ou sur Facebook.
Consultez d'autres ressources sur la recherche par IA
- Exploiter le potentiel des grands modèles de langage : première contribution d'Elastic au code de LangChain
- Recherche par IA axée sur la confidentialité à l'aide de LangChain et Elasticsearch
- Créer une application avec AWS Bedrock, Elastic et LangChain
- Guide de prise en main des grands modèles de langage open source
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'IA générative tiers appartenant à leurs propriétaires respectifs qui en assurent 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. Veuillez faire preuve de prudence lorsque vous utilisez des outils d'IA avec des informations personnelles, sensibles ou confidentielles. Toute donnée que vous soumettez peut être utilisée pour entrainer 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.