Comment combiner des agents et des magasins de vecteurs dans LangChain ?

Comment Combiner Des Agents Et Des Magasins De Vecteurs Dans Langchain



LangChain est le framework qui conçoit des modèles de langage. Des quantités massives de données entraînent ces modèles en langage naturel. Il existe de nombreuses bases de données ou magasins de vecteurs comme Chroma, etc. pour gérer ces ensembles de données. En combinant les magasins d'agents et de vecteurs, le modèle fonctionne mieux avec les données de différents domaines. Le LangChain permet d'utiliser de nombreux magasins de vecteurs pour entraîner le modèle de langage ou le chatbot.

Aperçu rapide

Cet article affichera :







Comment utiliser un agent pour renvoyer une sortie structurée dans LangChain



Méthode 1 : combinaison d'un agent avec des magasins de vecteurs



Méthode 2 : utilisation de l'agent comme routeur





Méthode 3 : utilisation de l'agent avec un magasin de vecteurs multi-sauts

Conclusion



Comment utiliser un agent pour renvoyer une sortie structurée dans LangChain ?

Le développeur utilise des agents pour effectuer le routage entre les bases de données contenant les données de formation pour les modèles. Un agent possède le plan du processus complet en stockant toutes les étapes. L'agent dispose des outils nécessaires pour effectuer toutes ces activités afin de mener à bien le processus. L'utilisateur peut également utiliser l'agent pour obtenir des données de différents magasins de données afin de diversifier le modèle.

Pour découvrir le processus de combinaison d'agents et de magasins vectoriels dans LangChain, suivez simplement les étapes répertoriées :

Étape 1 : Installation des frameworks

Tout d'abord, installez le module LangChain et ses dépendances pour combiner les agents et les magasins de vecteurs :

pip installer langchain

Dans ce guide, nous utilisons la base de données Chroma qui peut stocker des données dans différents emplacements ou tables :

pip installer chromadb

Pour mieux comprendre les données, divisez les fichiers volumineux en morceaux plus petits à l'aide du tokenizer tiktoken :

pip installer tiktoken

OpenAI est le module qui peut être utilisé pour construire le grand modèle de langage dans le framework LangChain :

pip installer openai

Étape 2 : Environnement OpenAI

La prochaine étape ici consiste à mettre en place l'environnement en utilisant la clé API d’OpenAI qui peut être extraite du compte officiel d’OpenAI :

importer toi
importer obtenir un laissez-passer

toi . environ [ 'OPENAI_API_KEY' ] = obtenir un laissez-passer . obtenir un laissez-passer ( « Clé API OpenAI : » )

Maintenant, téléchargez les données du système local vers le collaborateur Google afin de les utiliser à l'avenir :

depuis Google. ET AL importer des dossiers

téléchargé = des dossiers. télécharger ( )

Étape 3 : Création d'un magasin de vecteurs

Cette étape configure le premier composant de notre tâche qui est un magasin de vecteurs pour stocker les données téléchargées. La configuration des magasins de vecteurs nécessite les bibliothèques qui peuvent être importées depuis différentes dépendances de LangChain :

depuis chaîne de langue. intégrations . ouvert importer OpenAIEmbeddings

#Vector stocke la dépendance pour obtenir la base de données ou le vecteur requis

depuis chaîne de langue. magasins de vecteurs importer Chroma

#Le séparateur de texte est utilisé pour convertir le gros texte en morceaux plus petits

depuis chaîne de langue. texte_splitter importer CaractèreTextSplitter

depuis chaîne de langue. llms importer OpenAI

depuis chaîne de langue. chargeurs_de documents importer WebBaseLoader

depuis chaîne de langue. Chaînes importer RécupérationQA


llm = OpenAI ( température = 0 )

Étape 4 : Définir le chemin

Après avoir importé les bibliothèques, définissez simplement le chemin d'accès aux magasins de vecteurs avant d'y stocker les données :

depuis cheminlib importer Chemin

parties_pertinentes = [ ]
pour p dans Chemin ( '.' ) . absolu ( ) . les pièces :
parties_pertinentes. ajouter ( p )
si parties_pertinentes [ - 3 : ] == [ 'langchain' , 'doc' , 'modules' ] :
casser
#Instruction conditionnelle à l'intérieur de la boucle pour définir le chemin de chaque base de données
chemin_doc = str ( Chemin ( *pièces_pertinentes ) / 'état_of_the_union.txt' )

Étape 5 : Chargement et fractionnement des données

Désormais, chargez simplement les données et divisez-les en morceaux plus petits pour améliorer leur lisibilité et leur compréhension. Créez des intégrations des données en convertissant le texte en nombres créant leurs espaces vectoriels et en le stockant dans la base de données Chorma :

depuis chaîne de langage. chargeurs_de documents importer Chargeur de texte

#Chargement de l'ensemble de données à partir de son chemin et stockage de ses plus petits morceaux dans la base de données

chargeur = Chargeur de texte ( chemin_doc )

documents = chargeur. charger ( )

texte_splitter = CaractèreTextSplitter ( taille_morceau = 2000 , chunk_overlap = 0 )

des textes = text_splitter. split_documents ( documents )

#Convertissez le texte en nombres et stockez les intégrations dans la base de données

intégrations = OpenAIEmbeddings ( )

recherche de documents = Chroma. à partir de_documents ( des textes , intégrations , nom_collection = 'l'état de l'union' )

Étape 6 : Création d'un Retriever

Pour combiner les magasins d'agents et de vecteurs, il est nécessaire de créer un récupérateur à l'aide de la méthode RetrievalQA() du framework LangChain. Cette méthode de récupération est recommandée pour obtenir des données à partir de magasins de vecteurs en utilisant les agents comme outil pour travailler avec les bases de données :

état_de_union = RécupérationQA. from_chain_type (

llm = llm , type_chaîne = 'truc' , retriever = recherche documentaire. as_retriever ( )

)

Chargez un autre ensemble de données pour intégrer l'agent à plusieurs ensembles de données ou magasins de vecteurs :

chargeur = WebBaseLoader ( 'https://beta.ruff.rs/docs/faq/' )

Stockez l'ensemble de données ruff dans chromadb après avoir également créé les plus petits morceaux de données avec les vecteurs d'intégration :

documents = chargeur. charger ( )
ruff_texts = text_splitter. split_documents ( documents )
ruff_db = Chroma. à partir de_documents ( ruff_texts , intégrations , nom_collection = 'fraise' )
fraise = RécupérationQA. from_chain_type (
llm = llm , type_chaîne = 'truc' , retriever = ruff_db. as_retriever ( )
)

Méthode 1 : combinaison d'un agent avec des magasins de vecteurs

La première méthode consistant à combiner à la fois des agents et des magasins de vecteurs pour extraire des informations est mentionnée ci-dessous :

Étape 1 : configurer les outils

Maintenant que les magasins de vecteurs sont configurés, passons à la construction du deuxième composant de notre processus, à savoir l'agent. Pour créer l'agent pour le processus, importez les bibliothèques en utilisant les dépendances telles que les agents, les outils, etc.

depuis chaîne de langue. agents importer initialiser_agent
depuis chaîne de langue. agents importer Type d'agent
#Obtenir des outils de LangChain pour créer l'agent
depuis chaîne de langue. outils importer Outil de base
depuis chaîne de langue. llms importer OpenAI
#Obtenir LLMMathChain à partir de chaînes pour créer le modèle de langage
depuis chaîne de langue. Chaînes importer LLMMathChain
depuis chaîne de langue. utilitaires importer SerpAPIWrapper
depuis chaîne de langue. agents importer Outil

Configurez les outils à utiliser avec les agents utilisant le système QA ou la récupération configurée précédemment avec le nom et la description des outils :

outils = [
Outil (
nom = 'Système d'assurance qualité sur l'état de l'Union' ,
fonction = état_de_union. courir ,
description = 'Fournit des réponses aux questions liées à l'ensemble de données chargé avec une entrée sous forme de question entièrement formée' ,
) ,
Outil (
nom = 'Système d'assurance qualité Ruff' ,
fonction = fraise. courir ,
description = 'Fournit des réponses aux questions sur ruff (un linter python) avec une entrée sous forme de question entièrement formée' ,
) ,
]

Étape 2 : initialiser l'agent

Une fois les outils configurés, définissez simplement l'agent dans l'argument de la méthode initializa_agent(). L'agent que nous utilisons ici est le ZERO_SHOT_REACT_DESCRIPTION avec les outils, llm (modèle de langage) et verbeux :

agent = initialiser_agent (

outils , llm , agent = Type d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbeux = Vrai

)

Étape 3 : tester l'agent

Exécutez simplement l'agent en utilisant la méthode run() qui contient la question dans son argument :

agent. courir (

'Qu'a dit le président Joe Biden à propos du kanji brown dans le discours'

)

La capture d'écran suivante affiche la réponse extraite des deux magasins de données à l'aide de l'observation stockée dans la mémoire de l'agent :

Méthode 2 : utilisation de l'agent comme routeur

Une autre façon de combiner les deux composants consiste à utiliser l'agent comme routeur. Ce qui suit explique le processus :

Étape 1 : configurer les outils

L'utilisation de l'agent comme routeur signifie que le système RetrievalQA renverra directement la sortie car les outils sont configurés pour renvoyer directement la sortie :

outils = [
#configuration des outils requis pour créer l'agent permettant d'obtenir des données à partir des données
Outil (
nom = 'Système d'assurance qualité sur l'état de l'Union' ,
fonction = état_de_union. courir ,
description = 'Fournit des réponses aux questions liées à l'ensemble de données chargé avec une entrée sous forme de question complète' ,
retour_direct = Vrai ,
) ,
Outil (
nom = 'Système d'assurance qualité Ruff' ,
fonction = fraise. courir ,
description = 'Fournit des réponses aux questions sur ruff (un linter python) avec une entrée sous forme de question complète' ,
retour_direct = Vrai ,
) ,
]

Étape 2 : initialiser et tester l'agent

Après avoir configuré les outils, définissez simplement l'agent qui peut être utilisé uniquement comme routeur à l'aide de la méthode initialize_agent() :

agent = initialiser_agent (

outils , llm , agent = Type d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbeux = Vrai

)

Testez l'agent en donnant la question d'entrée dans la méthode agent.run() en exécutant la commande suivante :

agent. courir (

'Qu'a dit le président Joe Biden à propos du kanji brown dans le discours'

)

Sortir

La capture d'écran de sortie montre que l'agent a simplement renvoyé la réponse à la question à partir de l'ensemble de données extrait par le système RetrievalQA :

Méthode 3 : utilisation de l'agent avec un magasin de vecteurs multi-sauts

La troisième méthode dans laquelle les développeurs peuvent combiner à la fois les magasins d'agents et de vecteurs concerne les requêtes de magasin de vecteurs multi-sauts. La section suivante explique le processus complet :

Étape 1 : configurer les outils

La première étape est, comme d'habitude, la configuration des outils utilisés pour créer les agents permettant d'extraire les données des magasins de données :

outils = [
Outil (
nom = 'Système d'assurance qualité sur l'état de l'Union' ,
fonction = état_de_union. courir ,
description = 'Fournit des réponses aux questions liées à l'ensemble de données chargé avec une entrée sous forme de question entièrement formée, ne faisant référence à aucun pronom de la conversation précédente' ,
) ,
Outil (
nom = 'Système d'assurance qualité Ruff' ,
fonction = fraise. courir ,
description = 'Fournit des réponses aux questions liées à l'ensemble de données chargé avec une entrée sous forme de question entièrement formée, ne faisant référence à aucun pronom de la conversation précédente' ,
) ,
]

Étape 2 : initialiser et tester l'agent

Après cela, construisez la variable agent à l'aide de la méthode initialize_agent() avec le nom de l'agent :

agent = initialiser_agent (

outils , llm , agent = Type d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbeux = Vrai

)

Exécutez l'agent à l'aide de la question à sauts multiples qui contient plusieurs aspects ou fonctionnalités, car le bloc de code suivant contient une telle question :

agent. courir (

'Quel outil Ruff utilise-t-il pour exécuter des notebooks Python et l'un des intervenants a-t-il mentionné l'outil dans son discours'

)

Sortir

La capture d'écran suivante suggère que l'agent doit résoudre la question pour comprendre sa complexité. Il a renvoyé la réponse extraite par le système d'assurance qualité des multiples magasins de données que nous avons téléchargés plus tôt dans le processus :

Il s’agit de savoir comment combiner les agents et les magasins vectoriels dans LangChain.

Conclusion

Pour combiner des agents avec les magasins de vecteurs dans LangChain, commencez par l'installation de modules pour configurer l'environnement et charger des ensembles de données. Configurez les magasins de vecteurs pour charger les données en les divisant d'abord en morceaux plus petits, puis créez le modèle de langage à l'aide de la méthode OpenAI(). Configurez l'agent pour l'intégrer au magasin de vecteurs afin d'extraire des données pour différents types de requêtes. Cet article a développé le processus de combinaison d'agents et de magasins vectoriels dans LangChain.