À l'ère de l'intelligence artificielle (IA), il est devenu essentiel pour les entreprises comme pour les particuliers de pouvoir extraire des connaissances utiles à partir de vastes ensembles de données. C'est là qu'intervient la génération augmentée de récupération (RAG), une percée qui a décuplé les capacités de l'IA, en permettant aux systèmes non seulement de générer du texte semblable au langage humain, mais également d'extraire des informations pertinentes en temps réel. Cette fusion produit des réponses au contexte riche et aux détails précis.
Alors que nous embarquons pour ce voyage passionnant à travers le vaste océan de l'intelligence artificielle (IA), il est essentiel de comprendre les trois piliers qui seront les étoiles pour nous guider : l'IA générative, les grands modèles de langage (LLM, Large Language Models), LangChain, Hugging Face et l'application utile sur cette RAG (génération augmentée de récupération).
Au cœur de notre voyage se trouvent les grands modèles de langage (LLM) et l'IA générative, deux puissants moteurs faisant avancer le navire de l'innovation.
Les LLM, tels que Qwen et GPT, entre autres, sont les titans en matière de texte, grâce à leur capacité à comprendre et à générer un langage semblable au langage humain à grande échelle. Ces modèles ont été entraînés à partir de vastes corpus de données textuelles, leur permettant de prédire et de produire des chaînes de texte cohérentes et contextuellement pertinentes. Ils sont la clé de voûte de nombreuses tâches de traitement du langage naturel, de la traduction à la création de contenu.
L'IA générative est en quelque sorte l'assistant futé de la création dans le domaine de l'IA. Elle englobe des technologies qui génèrent de nouvelles instances de données ressemblant aux données d'entraînement, telles que des images, de la musique et, le plus important pour notre voyage, du texte. Dans notre contexte, l'IA générative fait référence à la capacité de l'IA à créer des réponses, des histoires ou des idées innovantes et informatives n'ayant jamais été vues auparavant. Elle permet à l'IA non seulement d'imiter le passé, mais aussi d'inventer, d'innover et d'inspirer.
LangChain joue le rôle d'architecte de notre flux de travail IA, concevant méticuleusement la structure qui permet une intégration et une interaction fluides entre divers composants de l'IA. Ce cadre simplifie le processus complexe de chaînage des flux de données à partir de sous-systèmes intelligents, y compris les LLM et les systèmes de récupération, rendant des tâches telles que l'extraction d'informations et la compréhension du langage naturel plus accessibles que jamais.
Hugging Face est une métropole animée où prospèrent les modèles d'IA. Ce hub central propose une vaste gamme de modèles préformés, offrant un terrain fertile pour l'exploration et l'application de l'apprentissage automatique. Pour accéder à ce hub et à ses ressources, vous devez créer un compte Hugging Face. Une fois que vous avez franchi cette étape, les portes d'un vaste monde d''IA s'ouvrent à vous. Il vous suffit de vous rendre sur Hugging Face pour vous inscrire et démarrer votre aventure.
La génération augmentée de récupération (RAG) est une technique d'IA sophistiquée qui allie la puissance inventive de l'IA générative à la précision de la récupération des connaissances, créant un système non seulement articulé mais aussi riche en informations. Pour libérer le plein potentiel et l'efficacité de la RAG, ce système intègre des bases de données vectorielles, qui sont un outil puissant pour passer rapidement au crible de vastes référentiels d'informations. Voici une explication détaillée du fonctionnement de la RAG avec les bases de données vectorielles:
L'intégration de bases de données vectorielles est la clé de l'efficacité de la RAG. Les méthodes traditionnelles de recherche de métadonnées peuvent être plus lentes et moins précises, mais les bases de données vectorielles facilitent la récupération quasi instantanée d'informations contextuellement pertinentes, même à partir d'ensembles de données extrêmement volumineux. Cette approche permet non seulement de gagner un temps précieux, mais garantit également que les réponses de l'IA sont fondées sur les informations les plus appropriées et les plus récentes disponibles.
Les prouesses de la RAG sont particulièrement avantageuses dans des applications telles que les chatbots, les assistants numériques et les outils de recherche sophistiqués, et partout où la production d'informations précises, fiables et fondées sur un contexte est cruciale. Il ne s'agit pas simplement d'élaborer des réponses convaincantes ; il s'agit de générer du contenu fermement basé sur des données vérifiables et des connaissances du monde réel.
Forts d'une compréhension enrichie de LangChain, de Hugging Face, des LLM, de GenAI et de la RAG améliorée par les bases de données vectorielles, nous sommes sur le point d'embarquer pour une aventure de programmation qui donnera vie à ces technologies. Le script Python dans lequel nous allons plonger représente la synergie de ces éléments, en montrant un système d'IA capable de répondre non seulement avec créativité et contexte, mais aussi avec une profondeur de compréhension autrefois considérée comme appartenant au domaine de la science-fiction. Préparez-vous à programmer et à découvrir le pouvoir transformatif de la RAG avec des bases de données vectorielles.
Avant de nous lancer dans cette odyssée technologique, assurons-nous que vous soyez bien préparé :
Vous avez tout ? Formidable ! Mettons la main à la pâte (au sens figuré, bien sûr).
En gérant soigneusement vos dépendances Python, vous vous assurez que votre projet d'IA repose sur une base stable et fiable. Une fois les dépendances en place et l'environnement configuré correctement, vous êtes prêt à exécuter le script et à observer la puissance de la RAG et de LangChain à l'œuvre.
Maintenant, vous pouvez exécuter le script Python pour voir la RAG en action.
Avant de pouvoir nous lancer dans notre exploration de l'IA avec le cadre LangChain et la bibliothèque Transformers de Hugging Face, il est essentiel d'établir un environnement sécurisé et bien configuré. Cette préparation implique l'importation des bibliothèques nécessaires et la gestion des informations sensibles, telles que les clés API, via des variables d'environnement.
from torch import cuda
from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from transformers import AutoModelForCausalLM, AutoTokenizer
from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline
from transformers import pipeline
from dotenv import load_dotenv
load_dotenv()
Lorsque vous travaillez avec des modèles d'IA de Hugging Face, vous avez souvent besoin d'accéder à l'API de Hugging Face, qui nécessite une clé API. Cette clé est votre identifiant unique lorsque vous envoyez des demandes aux services Hugging Face et elle vous permet de charger des modèles à utiliser dans vos applications.
Voici ce que vous devez faire pour configurer votre environnement en toute sécurité:
HUGGINGFACE_API_KEY=votre_clé_api_ici
Remplacez votre_clé_api_ici par la clé API réelle que vous avez reçue de Hugging Face.
modelPath = "sentence-transformers/all-mpnet-base-v2"
device = 'cuda' if cuda.is_available() else 'cpu'
model_kwargs = {'device': device}
Ici, nous avons défini le chemin vers le modèle préformé qui sera utilisé pour les enchâssements. Nous configurons également le réglage du périphérique, en utilisant une carte GPU si disponible pour un calcul plus rapide, ou en utilisant le CPU par défaut.
embeddings = HuggingFaceEmbeddings(
model_name=modelPath,
model_kwargs=model_kwargs,
)
# Made up data, just for fun, but who knows in a future
vectorstore = FAISS.from_texts(
["Harrison worked at Alibaba Cloud"], embedding=embeddings
)
retriever = vectorstore.as_retriever()
Nous initialisons une instance d'enchâssements Hugging Face (HuggingFaceEmbeddings) avec le modèle et la configuration de notre choix. Ensuite, nous créons un magasin de vecteurs en utilisant FAISS, ce qui nous permet d'effectuer des recherches de similitude efficaces dans des espaces de grande dimension. Nous instancions également un récupérateur, qui récupérera des informations basées sur les enchâssements.
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
Ici, nous définissons un modèle d'invite de chat qui sera utilisé pour structurer l'interaction avec l'IA. Il comprend des espaces réservés pour le contexte et une question, qui seront remplis dynamiquement lors de l'exécution de la chaîne.
Dans le monde de l'IA et du traitement du langage naturel, le tokenizer et le modèle de langage sont le duo dynamique qui transforme le texte en action concrète. Le tokenizer décompose le langage en éléments que le modèle peut comprendre, tandis que le modèle de langage prédit et génère un langage basé sur ces entrées. Au cours de notre voyage, nous allons utiliser les classes AutoTokenizer et AutoModelForCausalLM de Hugging Face pour tirer parti de ces capacités. Il est toutefois important de se rappeler qu'il n'y a pas de modèle universel lorsqu'il s'agit de choisir un modèle de langage.
La taille du modèle est un facteur primordial qu'il faut prendre en compte. Les modèles plus grands, comme Qwen-72B, disposent de plus de paramètres, ce qui signifie généralement qu'ils peuvent comprendre et générer un texte plus nuancé. Cependant, ils nécessitent également plus de puissance informatique. Si vous disposez de cartes GPU haut de gamme et d'une mémoire suffisante, vous pouvez opter pour ces modèles plus grands pour tirer le meilleur parti de leurs capacités.
D'un autre côté, les modèles plus petits, comme Qwen-1.8B, sont beaucoup plus gérables pour les environnements informatiques standard. Même ce petit modèle devrait pouvoir fonctionner sur l'IdO et les appareils mobiles. Bien qu'ils ne capturent peut-être pas les subtilités du langage aussi bien que leurs homologues plus grands, les petits modèles offrent tout de même d'excellentes performances et sont plus accessibles pour ceux qui n'ont pas de matériel spécialisé.
La nature de votre tâche est un autre point à prendre en compte. Si vous construisez une IA conversationnelle, l'utilisation d'un modèle spécifique au chat, tel que Qwen-7B-Chat, peut donner de meilleurs résultats, car ces modèles sont affinés pour les dialogues et peuvent mieux gérer les nuances de la conversation que les modèles de base.
Les modèles plus grands exigent non seulement plus de votre matériel, mais peuvent également entraîner des coûts plus élevés si vous utilisez des services basés sur le cloud pour exécuter vos modèles. Chaque inférence nécessite du temps de traitement et des ressources, qui peuvent s'additionner si vous travaillez avec un modèle massif.
Lorsque vous décidez du modèle à utiliser, évaluez les avantages d'un modèle plus grand par rapport aux ressources disponibles et aux exigences spécifiques de votre projet. Si vous débutez tout juste ou développez à plus petite échelle, un modèle plus petit pourrait être le meilleur choix. À mesure que vos besoins augmentent, ou si vous avez besoin de capacités plus grandes, envisagez de passer à un modèle plus grand.
N'oubliez pas que la série Qwen est en accès libre ; vous pouvez donc expérimenter différents modèles pour voir lequel correspond le mieux à votre projet. Voici à quoi pourrait ressembler la partie de sélection de modèle du script si vous décidiez d'utiliser un modèle différent:
# This can be changed to any of the Qwen models based on your needs and resources
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)
model_name_or_path = "Qwen/Qwen-7B"
model = AutoModelForCausalLM.from_pretrained(model_name_or_path,
device_map="auto",
trust_remote_code=True)
Nous chargeons un tokenizer et un modèle de langage causal à partir de Hugging Face avec les classes AutoTokenizer et AutoModelForCausalLM, respectivement. Ces composants sont essentiels pour traiter les entrées en langage naturel et générer des résultats.
Ce pipeline est conçu pour générer du texte à l'aide d'un modèle de langage et d'un tokenizer qui ont été précédemment chargés. Examinons les paramètres en détails pour comprendre leurs rôles dans le contrôle du comportement de la génération de texte :
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=8192,
do_sample=True,
temperature=0.7,
top_p=0.95,
top_k=40,
repetition_penalty=1.1
)
hf = HuggingFacePipeline(pipeline=pipe)
Après avoir mis en place le pipeline avec les paramètres souhaités, la prochaine ligne de code est comme suit :
hf = HuggingFacePipeline(pipeline=pipe)
Encapsule l'objet pipe dans un HuggingFacePipeline. Cette classe fait partie du cadre LangChain et permet au pipeline d'être intégré de manière fluide dans le flux de travail de LangChain pour la création d'applications d'IA. En encapsulant le pipeline, nous pouvons maintenant l'utiliser en conjonction avec d'autres composants de LangChain, tels que les récupérateurs et les analyseurs, pour créer des systèmes d'IA plus complexes.
La sélection minutieuse de ces paramètres vous permet d'affiner le comportement de la génération de texte en fonction des besoins spécifiques de votre application, que vous recherchiez des résultats plus créatifs et variés ou que vous visiez un texte toujours cohérent et ciblé.
L'extrait de code ci-dessous représente un système RAG complet de bout en bout où la question initiale déclenche une recherche des informations pertinentes, qui sont ensuite utilisées pour améliorer le processus de génération, résultant en une réponse éclairée et contextuellement pertinente à la question d'entrée.
1. Construction de la chaîne:
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| hf
| StrOutputParser()
)
Voici ce qui se passe dans cette partie du code :
L'utilisation de l'opérateur | (pipe) suggère que ce code utilise un style de programmation fonctionnel, spécifiquement le concept de composition en fonction ou un modèle de pipeline où la sortie d'une fonction devient l'entrée de la suivante.
2. Invocation de la chaîne:
results = chain.invoke("Where did Harrison work?")
Dans cette ligne, la chaîne est invoquée avec une question spécifique :_"Where did Harrison work?"_ Cette invocation déclenche toute la séquence d'opérations définie dans la chaîne. Le récupérateur recherche les informations pertinentes, qui sont ensuite transmises avec la question via l'invite et dans le modèle Hugging Face. Le modèle génère une réponse basée sur les entrées qu'il reçoit.
3. Affichage des résultats :
print(results)
La réponse générée est ensuite analysée par le StrOutputParser() et renvoyée comme résultat final, qui est ensuite copié sur la console ou une autre sortie.
Enfin, nous construisons la chaîne RAG en reliant le récupérateur, le modèle d'invite, le pipeline Hugging Face et l'analyseur de sortie. Nous invoquons la chaîne avec notre question, et les résultats sont affichés.
Vous venez de faire un pas de géant dans le monde de l'IA avec la RAG et LangChain. En comprenant et en exécutant ce code, vous débloquez le potentiel de créer des systèmes intelligents capables de raisonner et d'interagir avec les informations d'une manière sans précédent.
Cet article a été initialement rédigé en anglais. Consultez l'article original ici.
El inicio de la revolución de la IA: un viaje con RAG y LangChain
Memicu Revolusi AI - Sebuah Perjalanan dengan RAG dan LangChain
89 posts | 3 followers
FollowRegional Content Hub - March 25, 2024
Regional Content Hub - April 28, 2024
Regional Content Hub - April 1, 2024
Alibaba Clouder - October 12, 2020
Farruh - February 26, 2024
Alibaba Cloud Vietnam - June 7, 2024
89 posts | 3 followers
FollowTop-performance foundation models from Alibaba Cloud
Learn MoreOffline SDKs for visual production, such as image segmentation, video segmentation, and character recognition, based on deep learning technologies developed by Alibaba Cloud.
Learn MoreSelf-service network O&M service that features network status visualization and intelligent diagnostics capabilities
Learn MoreA one-stop generative AI platform to build intelligent applications that understand your business, based on Qwen model series such as Qwen-Max and other popular models
Learn MoreMore Posts by Regional Content Hub