AGI
Construire des agents LLM pour RAG à partir de zéro et au-delà : Un guide complet
Les LLM comme GPT-3, GPT-4 et leurs homologues open-source ont souvent du mal à récupérer des informations à jour et peuvent parfois générer des hallucinations ou des informations incorrectes.
La génération augmentée de récupération (RAG) est une technique qui combine la puissance des LLM avec la récupération de connaissances externes. RAG nous permet de fonder les réponses des LLM sur des informations factuelles et à jour, améliorant ainsi considérablement la précision et la fiabilité du contenu généré par l’IA.
Dans cet article de blog, nous allons explorer comment construire des agents LLM pour RAG à partir de zéro, en plongeant dans l’architecture, les détails d’implémentation et les techniques avancées. Nous allons couvrir tout, des bases de RAG à la création d’agents sophistiqués capables de raisonnement complexe et d’exécution de tâches.
Avant de plonger dans la construction de notre agent LLM, comprenons ce qu’est RAG et pourquoi il est important.
RAG, ou Génération Augmentée de Récupération, est une approche hybride qui combine la récupération d’informations avec la génération de texte. Dans un système RAG :
- Une requête est utilisée pour récupérer des documents pertinents à partir d’une base de connaissances.
- Ces documents sont ensuite alimentés dans un modèle de langage avec la requête d’origine.
- Le modèle génère une réponse basée à la fois sur la requête et les informations récupérées.
Cette approche présente plusieurs avantages :
- Précision améliorée : En fondant les réponses sur des informations récupérées, RAG réduit les hallucinations et améliore la précision factuelle.
- Informations à jour : La base de connaissances peut être mise à jour régulièrement, permettant au système d’accéder à des informations actuelles.
- Transparence : Le système peut fournir des sources pour ses informations, augmentant la confiance et permettant la vérification des faits.
Comprendre les agents LLM
Lorsque vous rencontrez un problème sans réponse simple, vous devez souvent suivre plusieurs étapes, réfléchir soigneusement et vous souvenir de ce que vous avez déjà essayé. Les agents LLM sont conçus pour ces types de situations dans les applications de modèle de langage. Ils combinent une analyse de données approfondie, une planification stratégique, une récupération de données et la capacité d’apprendre de leurs actions passées pour résoudre des problèmes complexes.
Qu’est-ce qu’un agent LLM ?
Un agent LLM est un système d’IA avancé conçu pour créer du texte complexe qui nécessite un raisonnement séquentiel. Il peut anticiper, se souvenir de conversations passées et utiliser différents outils pour ajuster ses réponses en fonction de la situation et du style nécessaire.
Considérons une question dans le domaine juridique telle que : “Quelles sont les conséquences juridiques potentielles d’une violation de contrat spécifique en Californie ?” Un LLM de base avec un système RAG peut récupérer les informations nécessaires à partir de bases de données juridiques.
Pour un scénario plus détaillé : “À la lumière des nouvelles lois sur la protection des données, quels sont les défis juridiques courants auxquels les entreprises sont confrontées et comment les tribunaux ont-ils abordé ces questions ?” Cette question creuse plus profondément que la simple recherche de faits. Il s’agit de comprendre les nouvelles règles, leur impact sur les différentes entreprises et les réponses des tribunaux. Un agent LLM décomposerait cette tâche en sous-tâches, telles que la récupération des dernières lois, l’analyse des cas historiques, la synthèse des documents juridiques et la prévision des tendances en fonction des modèles.
Composants d’un agent LLM
Un agent LLM se compose généralement de quatre composants :
- Agent/Cerveau : Le modèle de langage de base qui traite et comprend le langage.
- Planification : La capacité de raisonner, de décomposer les tâches et de développer des plans spécifiques.
- Mémoire : Maintient des dossiers des interactions passées et en apprend.
- Utilisation d’outils : Intègre diverses ressources pour exécuter des tâches.
Agent/Cerveau
Au cœur d’un agent LLM se trouve un modèle de langage qui traite et comprend le langage en fonction de grandes quantités de données sur lesquelles il a été formé. Vous commencez par lui donner une invite spécifique, en guidant l’agent sur la façon de répondre, quels outils utiliser et quels objectifs viser. Vous pouvez personnaliser l’agent avec une personnalité adaptée à des tâches ou interactions particulières, améliorant ainsi ses performances.
Mémoire
Le composant mémoire aide les agents LLM à gérer des tâches complexes en conservant un enregistrement des actions passées. Il existe deux principaux types de mémoire :
- Mémoire à court terme : Agit comme un bloc-notes, en suivant les discussions en cours.
- Mémoire à long terme : Fonctionne comme un journal, en stockant des informations d’interactions passées pour apprendre des modèles et prendre de meilleures décisions.
En combinant ces types de mémoire, l’agent peut offrir des réponses plus personnalisées et se souvenir des préférences de l’utilisateur au fil du temps, créant ainsi une interaction plus connectée et pertinente.
Planification
La planification permet aux agents LLM de raisonner, de décomposer les tâches en parties gérables et d’adapter les plans à mesure que les tâches évoluent. La planification implique deux principales étapes :
- Formulation du plan : Décomposition d’une tâche en sous-tâches plus petites.
- Réflexion sur le plan : Examen et évaluation de l’efficacité du plan, en intégrant les commentaires pour affiner les stratégies.
Des méthodes comme la Chaîne de Pensée (CoT) et l’Arbre de Pensée (ToT) aident dans ce processus de décomposition, permettant aux agents d’explorer différents chemins pour résoudre un problème.
Pour plonger plus profondément dans le monde des agents d’IA, y compris leurs capacités actuelles et leur potentiel, envisagez de lire “Auto-GPT & GPT-Engineer : Un guide approfondi sur les principaux agents d’IA d’aujourd’hui”
Configuration de l’environnement
Pour construire notre agent RAG, nous devons configurer notre environnement de développement. Nous allons utiliser Python et plusieurs bibliothèques clés :
- LangChain : Pour orchestrer notre LLM et les composants de récupération
- Chroma : En tant que magasin de vecteurs pour les embeddings de documents
- Les modèles GPT d’OpenAI : En tant que LLM de base (vous pouvez le remplacer par un modèle open-source si vous le préférez)
- FastAPI : Pour créer une API simple pour interagir avec notre agent
Commençons par configurer notre environnement :
# Créez un nouvel environnement virtuel python -m venv rag_agent_env source rag_agent_env/bin/activate # Sur Windows, utilisez `rag_agent_env\Scripts\activate` # Installez les packages requis pip install langchain chromadb openai fastapi uvicorn
Maintenant, créons un nouveau fichier Python appelé rag_agent.py et importons les bibliothèques nécessaires :
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter from langchain.llms import OpenAI from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader import os # Définissez votre clé API OpenAI os.environ["OPENAI_API_KEY"] = "votre-clé-api-ici"
Construire un système RAG simple
Maintenant que nous avons configuré notre environnement, construisons un système RAG de base. Nous allons commencer par créer une base de connaissances à partir d’un ensemble de documents, puis l’utiliser pour répondre à des requêtes.
Étape 1 : Préparer les documents
Tout d’abord, nous devons charger et préparer nos documents. Pour cet exemple, supposons que nous avons un fichier texte appelé knowledge_base.txt contenant des informations sur l’IA et l’apprentissage automatique.
# Chargez le document
loader = TextLoader("knowledge_base.txt")
documents = loader.load()
# Divisez les documents en morceaux
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# Créez des embeddings
embeddings = OpenAIEmbeddings()
# Créez un magasin de vecteurs
vectorstore = Chroma.from_documents(texts, embeddings)
Étape 2 : Créez une chaîne de questions-réponses basée sur la récupération
Maintenant que nous avons notre magasin de vecteurs, nous pouvons créer une chaîne de questions-réponses basée sur la récupération :
# Créez une chaîne de questions-réponses basée sur la récupération qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())
Étape 3 : Interrogez le système
Nous pouvons maintenant interroger notre système RAG :
query = "Quelles sont les principales applications de l'apprentissage automatique ?" result = qa.run(query) print(result)
Étape 4 : Création d’un agent LLM
Alors que notre système RAG simple est utile, il est assez limité. Améliorons-le en créant un agent LLM qui peut effectuer des tâches plus complexes et raisonner sur les informations qu’il récupère.
Un agent LLM est un système d’IA qui peut utiliser des outils et prendre des décisions sur les actions à entreprendre. Nous allons créer un agent qui peut non seulement répondre à des questions mais également effectuer des recherches sur le Web et des calculs de base.
Tout d’abord, définissons quelques outils pour notre agent :
from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun
from langchain.tools import BaseTool
from langchain.agents import initialize_agent
from langchain.agents import AgentType
# Définissez un outil de calcul
class CalculatorTool(BaseTool):
name = “Calculator”
description = “Utile pour répondre à des questions sur les mathématiques”
def _run(self, query: str)














