Accéder au contenu principal

RAG avec Llama 3.1 8B, Ollama et Langchain : Tutoriel

Apprenez à construire une application RAG avec Llama 3.1 8B en utilisant Ollama et Langchain en configurant l'environnement, en traitant des documents, en créant des embeddings et en intégrant un retriever.
Actualisé 16 janv. 2025  · 12 min de lecture

La publication par Meta de Llama 3.1 est une avancée importante dans les modèles LLM à poids ouverts.

Avec des options allant jusqu'à 405 milliards de paramètres, Llama 3.1 est sur un pied d'égalité avec les meilleurs modèles à code source fermé tels que GPT-4o d'OpenAI, Claude 3 d'Anthropicd'Anthropic, et Google Gemini.

Dans ce tutoriel, nous allons apprendre à mettre en œuvre une application de génération augmentée par récupération (RAG) en utilisant le modèle Llama 3.1 8B. Nous apprendrons pourquoi Llama 3.1 est idéal pour RAG, comment télécharger et accéder localement à Llama 3.1 à l'aide d'Ollama. et accéder à Llama 3.1 localement en utilisant Ollamaet comment s'y connecter en utilisant Langchain pour construire l'ensemble de l'application RAG. Nous découvrirons également les différents cas d'utilisation et les applications réelles de Llama 3.1.

Développer des applications d'IA

Apprenez à créer des applications d'IA à l'aide de l'API OpenAI.
Commencez À Upskiller Gratuitement

Pourquoi choisir Llama 3.1 pour RAG ?

Llama 3.1 est un bon choix pour RAG, une technique qui combine les systèmes de recherche avec les capacités de génération de texte des modèles de langage afin de garantir des résultats plus précis et plus pertinents.

Dans le système RAG, un système de recherche examine d'abord de vastes ensembles de données pour trouver les informations les plus pertinentes, que le modèle linguistique utilise ensuite pour générer la réponse finale. Ceci est particulièrement utile pour des tâches telles que répondre à des questions, créer des chatbots et traiter des tâches à forte teneur en informations, pour lesquelles les modèles de langage traditionnels peuvent donner des réponses obsolètes ou non pertinentes.

Avec sa capacité à gérer jusqu'à 128K tokens et la prise en charge de plusieurs langues, Llama 3.1 améliore la qualité et la fiabilité du contenu généré par l'IA dans les systèmes RAG.

Résultats de l'analyse comparative de l'ordinateur llama 3

Source : Le troupeau de modèles Llama 3

En outre, Llama 3.1 se distingue dans les applications RAG par rapport aux modèles à source fermée tels que GPT-4o et Claude 3.5 Sonnet. Ses fortes capacités de raisonnement et son aptitude à traiter des textes plus longs lui permettent de mieux traiter les questions complexes et de fournir des réponses plus pertinentes.

Dans le benchmark "Needle-in-a-Haystack" (NIH), qui teste la capacité d'un modèle à trouver des éléments d'information spécifiques ("aiguilles") dans de grands volumes de texte ("bottes de foin"), Llama 3.1 excelle avec un taux d'extraction presque parfait pour toutes les tailles de modèles. Cela démontre sa capacité à gérer des tâches de recherche complexes, ce qui le rend idéal pour les systèmes RAG qui doivent extraire des informations précises à partir de grands ensembles de données.

Le modèle a également obtenu d'excellents résultats dans le test de référence "Multi-needle", qui exige la récupération précise de plusieurs éléments d'information. Les résultats quasi parfaits obtenus lors de ce test prouvent une fois de plus sa capacité à gérer des tâches de recherche complexes.

Comment implémenter RAG avec Llama 3.1 en utilisant Ollama et Langchain

Pour mettre en place une application RAG avec Llama 3.1, plusieurs étapes sont nécessaires. Il s'agit notamment de télécharger le modèle Llama 3.1 sur votre machine locale, de configurer l'environnement, de charger les bibliothèques nécessaires et de créer un mécanisme de récupération. Enfin, nous combinerons ces éléments avec un modèle linguistique pour créer une application complète.

Vous trouverez ci-dessous un guide clair, étape par étape, qui vous aidera à mettre en œuvre une application RAG à l'aide de Llama 3.1.

Étape 1 : Installer Ollama

Tout d'abord, installez l'application Ollama, qui nous permet d'exécuter Llama 3.1 et d'autres modèles de langage open-source sur votre machine locale. Vous pouvez télécharger l'application Ollama à partir de leur site officiel.

Une fois que vous avez installé et ouvert Ollama, l'étape suivante consiste à télécharger le modèle Llama 3.1 sur votre machine locale. Pour ce tutoriel, nous utiliserons la version du paramètre 8B. Pour le télécharger, ouvrez votre terminal et exécutez la ligne de commande suivante :

ollama run llama3.1

Une fois le téléchargement du modèle terminé, nous serons prêts à le connecter à l'aide de Langchain, ce que nous vous montrerons dans les sections suivantes.

Étape 2 : Mise en place de l'environnement

Avant de commencer, assurez-vous que les bonnes bibliothèques Python sont installées. Nous aurons besoin de bibliothèques telles que langchain, langchain_community, langchain-ollama, langchain_openai. Si vous ne les avez pas encore installés, vous pouvez le faire en utilisant pip avec cette commande :

pip install langchain langchain_community langchain-openai scikit-learn langchain-ollama

Étape 3 : Chargement et préparation des documents

La première étape de la création de votre système RAG consiste à charger les documents que nous voulons utiliser comme base de connaissances. Dans cet exemple, nous utiliserons des pages web comme source.

Voici comment procéder :

from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# List of URLs to load documents from
urls = [
    "<https://lilianweng.github.io/posts/2023-06-23-agent/>",
    "<https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/>",
    "<https://lilianweng.github.io/posts/2023-10-25-adv-attack-llm/>",
]
# Load documents from the URLs
docs = [WebBaseLoader(url).load() for url in urls]
docs_list = [item for sublist in docs for item in sublist]

Ici, WebBaseLoader est utilisé pour récupérer le contenu de chaque URL fournie. Les listes imbriquées de documents qui en résultent sont ensuite combinées en une seule liste plate appelée docs_list, ce qui nous donne une liste de documents.

Étape 4 : Diviser les documents en morceaux

Pour rendre le processus de recherche plus efficace, nous divisons les documents en morceaux plus petits à l'aide de RecursiveCharacterTextSplitter. Cela permet au système de traiter et de rechercher le texte plus efficacement.

Nous pouvons configurer le séparateur de texte en spécifiant la taille des morceaux et le chevauchement. Par exemple, dans le code ci-dessous, nous configurons un séparateur de texte avec une taille de bloc de 250 caractères et sans chevauchement.

# Initialize a text splitter with specified chunk size and overlap
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=250, chunk_overlap=0
)
# Split the documents into chunks
doc_splits = text_splitter.split_documents(docs_list)

Étape 5 : Créer un magasin vectoriel

Ensuite, nous devons convertir les morceaux de texte en enregistrementsqui sont ensuite stockés dans un magasin de vecteurs, ce qui permet une recherche rapide et efficace basée sur la similarité.

Pour ce faire, nous utilisons le site OpenAIEmbeddings pour générer des enchâssements pour chaque morceau de texte, qui sont ensuite stockés dans un site SKLearnVectorStore. Le magasin de vecteurs est configuré pour renvoyer les 4 documents les plus pertinents pour une requête donnée en le configurant avec as_retriever(k=4).

from langchain_community.vectorstores import SKLearnVectorStore
from langchain_openai import OpenAIEmbeddings
# Create embeddings for documents and store them in a vector store
vectorstore = SKLearnVectorStore.from_documents(
    documents=doc_splits,
    embedding=OpenAIEmbeddings(openai_api_key="api_key"),
)
retriever = vectorstore.as_retriever(k=4)

Étape 6 : Configurer le modèle de LLM et d'invite

Dans cette étape, nous allons configurer le LLM et créer un modèle d'invite pour générer des réponses basées sur les documents récupérés.

Tout d'abord, nous devons définir un modèle d'invite qui indique au mécanisme d'apprentissage tout au long de la vie comment formuler ses réponses. Ce modèle indique au candidat qu'il doit utiliser les documents fournis pour répondre aux questions de manière concise, en trois phrases maximum. Si le modèle ne trouve pas de réponse, il doit simplement indiquer qu'il ne sait pas.

from langchain_ollama import ChatOllama
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
# Define the prompt template for the LLM
prompt = PromptTemplate(
    template="""You are an assistant for question-answering tasks.
    Use the following documents to answer the question.
    If you don't know the answer, just say that you don't know.
    Use three sentences maximum and keep the answer concise:
    Question: {question}
    Documents: {documents}
    Answer:
    """,
    input_variables=["question", "documents"],
)

Ensuite, nous nous connectons au modèle Llama 3.1 en utilisant ChatOllama de Langchain, que nous avons configuré avec une température de 0 pour des réponses cohérentes.

# Initialize the LLM with Llama 3.1 model
llm = ChatOllama(
    model="llama3.1",
    temperature=0,
)

Enfin, nous créons une chaîne qui combine le modèle d'invite avec le LLM et utilise StrOutputParser pour s'assurer que la sortie est une chaîne simple et propre adaptée à l'affichage.

# Create a chain combining the prompt template and LLM
rag_chain = prompt | llm | StrOutputParser()

Étape 7 : Intégrer le retriever et le LLM dans une application RAG

Dans cette étape, nous combinerons le récupérateur et la chaîne RAG pour créer une application RAG complète. Pour ce faire, nous créerons une classe appelée RAGApplication qui s'occupera à la fois de la recherche de documents et de la génération de réponses.

La classe RAGApplication possède la méthode run qui prend en compte la question de l'utilisateur, utilise le moteur de recherche pour trouver les documents pertinents, puis extrait le texte de ces documents. Il transmet ensuite la question et le texte du document à la chaîne RAG pour générer une réponse concise.

# Define the RAG application class
class RAGApplication:
    def __init__(self, retriever, rag_chain):
        self.retriever = retriever
        self.rag_chain = rag_chain
    def run(self, question):
        # Retrieve relevant documents
        documents = self.retriever.invoke(question)
        # Extract content from retrieved documents
        doc_texts = "\\n".join([doc.page_content for doc in documents])
        # Get the answer from the language model
        answer = self.rag_chain.invoke({"question": question, "documents": doc_texts})
        return answer

Étape 8 : Testez l'application

Enfin, nous sommes prêts à tester notre application RAG avec quelques exemples de questions pour nous assurer qu'elle fonctionne correctement. Vous pouvez ajuster le modèle d'invite ou les paramètres d'extraction pour améliorer les performances ou adapter l'application à des besoins spécifiques.

# Initialize the RAG application
rag_application = RAGApplication(retriever, rag_chain)
# Example usage
question = "What is prompt engineering"
answer = rag_application.run(question)
print("Question:", question)
print("Answer:", answer)
Question: What is prompt engineering
Answer: Prompt engineering refers to methods for communicating with Large Language Models (LLMs) to steer their behavior towards desired outcomes without updating the model weights. It's an empirical science that requires experimentation and heuristics, aiming at alignment and model steerability. The goal is to optimize prompts to achieve specific results, often using techniques like iterative prompting or external tool use.

Llama 3.1 avec RAG : Applications dans le monde réel

Les fonctionnalités avancées de Llama 3.1 et la prise en charge de RAG en font un outil idéal pour plusieurs applications à fort impact.

Pour développement de chatbotsL'intégration de Llama 3.1 avec RAG permet aux chatbots de fournir des réponses plus précises et contextuelles en accédant à des bases de données externes ou à des bases de connaissances. Cela garantit que les informations fournies aux utilisateurs sont actuelles et pertinentes, ce qui est particulièrement important dans des domaines tels que le service à la clientèle, où des réponses précises et opportunes peuvent grandement améliorer la satisfaction et l'efficacité des utilisateurs. La prise en charge de plusieurs langues par Llama 3.1 lui permet également de servir une base d'utilisateurs diversifiée.

Dans les systèmes de réponse aux questions, Llama 3.1 répond aux limites des modèles de langage traditionnels qui reposent uniquement sur leurs ensembles de données internes. En utilisant RAG pour accéder à des informations actualisées provenant de sources externes, Llama 3.1 améliore la précision et la fiabilité de ses réponses. Ceci est particulièrement utile dans des domaines tels que les soins de santé et l'éducation l'éducationoù des informations précises et actuelles sont essentielles.

Par exemple, un assistant médical d'IA alimenté par Llama 3.1 peut fournir aux professionnels de la santé les dernières recherches ou directives de traitement en interrogeant des bases de données médicales en temps réel, contribuant ainsi à une meilleure prise de décision clinique.

Llama 3.1 est également très efficace pour les tâches à forte intensité de connaissances, telles que la production de rapports détaillés ou la réalisation de recherches approfondies. En utilisant RAG pour puiser dans un large éventail de sources, les modèles Llama 3.1 peuvent fournir des analyses plus complètes et plus nuancées, ce qui en fait des outils précieux pour les professionnels dans des domaines tels que la recherche, la finance et la planification stratégique.

Conclusion

La mise en œuvre d'une application RAG avec Llama 3.1 en utilisant Ollama et Langchain offre une bonne solution pour créer des modèles de langage avancés et sensibles au contexte.

En suivant les étapes décrites - configuration de l'environnement, chargement et traitement des documents, création d'enchâssements et intégration du récupérateur dans le LLM - vous pouvez construire un système RAG fonctionnel capable de récupérer des informations pertinentes et de fournir des réponses précises.

L'intégration de Llama 3.1 avec RAG est particulièrement précieuse pour les applications réelles telles que les chatbots, les systèmes de réponse aux questions et les outils de recherche, où l'accès à des informations externes actualisées est important.

Obtenez une certification de haut niveau en matière d'IA

Démontrez que vous pouvez utiliser l'IA de manière efficace et responsable.

Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan est un data scientist de premier plan spécialisé dans la création d'applications d'IA utilisant des LLM. Il est candidat au doctorat en traitement du langage naturel et graphes de connaissances à l'Imperial College de Londres, où il a également obtenu une maîtrise en informatique. En dehors de la science des données, il rédige une lettre d'information hebdomadaire Substack, The Limitless Playbook, dans laquelle il partage une idée exploitable provenant des plus grands penseurs du monde et écrit occasionnellement sur les concepts fondamentaux de l'IA.

Sujets

Apprenez à créer des applications d'intelligence artificielle !

Certification disponible

cours

Développer des applications LLM avec LangChain

3 hr
8.6K
Découvrez comment créer des applications alimentées par l'IA en utilisant des LLM, des invites, des chaînes et des agents dans LangChain.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

See MoreSee More