Hoe agenten en vectorwinkels combineren in LangChain?

Hoe Agenten En Vectorwinkels Combineren In Langchain



LangChain is het raamwerk dat taalmodellen ontwerpt. Enorme hoeveelheden gegevens trainen deze modellen in natuurlijke taal. Er zijn veel databases of vectorwinkels zoals Chroma, enz. om deze datasets te beheren. Door de agent- en vectorstores te combineren presteert het model beter met gegevens uit verschillende domeinen. De LangChain maakt het gebruik van veel vectorwinkels mogelijk om het taalmodel of de chatbot te trainen.

Snel overzicht

Dit bericht zal laten zien:







Hoe u een agent gebruikt om een ​​gestructureerde uitvoer in LangChain te retourneren



Methode 1: Agent combineren met vectorwinkels



Methode 2: Agent als router gebruiken





Methode 3: Agent gebruiken met Multi-Hop Vector Store

Conclusie



Hoe gebruik ik een agent om een ​​gestructureerde uitvoer in LangChain terug te sturen?

De ontwikkelaar gebruikt agenten om te routeren tussen de databases die trainingsgegevens voor de modellen bevatten. Een agent heeft de blauwdruk van het volledige proces door alle stappen op te slaan. De agent beschikt over de tools om al deze activiteiten uit te voeren om het proces te voltooien. De gebruiker kan de agent ook gebruiken om gegevens uit verschillende datastores op te halen om het model divers te maken.

Om het proces van het combineren van agenten en vectorwinkels in LangChain te leren, volgt u eenvoudigweg de vermelde stappen:

Stap 1: Frameworks installeren

Installeer eerst de LangChain-module en de afhankelijkheden ervan voor het combineren van de agenten en vectorarchieven:

pip installeer langchain

In deze handleiding gebruiken we de Chroma-database die gegevens op verschillende locaties of tabellen kan opslaan:

pip installeer chromadb

Om een ​​beter inzicht in de gegevens te krijgen, splitst u de grote bestanden in kleinere stukken met behulp van de tiktoken tokenizer:

pip installeer tiktoken

OpenAI is de module die kan worden gebruikt om het grote taalmodel in het LangChain-framework te bouwen:

pip installeer openai

Stap 2: OpenAI-omgeving

De volgende stap hier is om de omgeving opzetten met behulp van de API-sleutel van OpenAI die kan worden geëxtraheerd uit het officiële OpenAI-account:

importeren Jij
importeren Krijg een pas

Jij . ongeveer [ 'OPENAI_API_KEY' ] = Krijg een pas . Krijg een pas ( 'OpenAI API-sleutel:' )

Upload nu de gegevens van het lokale systeem naar de Google Collaboratory om deze in de toekomst te gebruiken:

van googlen. EN AL importeren bestanden

geüpload = bestanden. uploaden ( )

Stap 3: Een vectorwinkel maken

Deze stap configureert het eerste onderdeel van onze taak, een vectorarchief voor het opslaan van de geüploade gegevens. Voor het configureren van de vectorwinkels zijn de bibliotheken vereist die kunnen worden geïmporteerd vanuit verschillende afhankelijkheden van de LangChain:

van langketen. inbedding . openai importeren OpenAIE-inbedding

#Vector slaat de afhankelijkheid op om de vereiste database of vector te verkrijgen

van langketen. vectorwinkels importeren Chroma

#Tekstsplitser wordt gebruikt om de grote tekst in kleinere stukken om te zetten

van langketen. tekst_splitter importeren CharacterTextSplitter

van langketen. llms importeren Open AI

van langketen. document_laders importeren WebBaseLoader

van langketen. kettingen importeren OphalenQA


llm = Open AI ( temperatuur = 0 )

Stap 4: Het pad instellen

Na het importeren van de bibliotheken stelt u eenvoudigweg het pad in voor toegang tot de vectorarchieven voordat u de gegevens daarin opslaat:

van padlib importeren Pad

relevante_onderdelen = [ ]
voor P in Pad ( '.' ) . absoluut ( ) . onderdelen :
relevante_onderdelen. toevoegen ( P )
als relevante_onderdelen [ - 3 : ] == [ 'langketen' , 'documenten' , 'modules' ] :
pauze
#Conditional Statement binnen de lus om het pad voor elke database in te stellen
doc_pad = str ( Pad ( *relevante_onderdelen ) / 'staat_van_de_union.txt' )

Stap 5: De gegevens laden en splitsen

Laad nu eenvoudigweg de gegevens en splits deze in kleinere stukjes om de leesbaarheid en begrijpelijkheid ervan te verbeteren. Creëer insluitingen van de gegevens door de tekst in getallen om te zetten, hun vectorruimten te maken en deze op te slaan in de Chorma-database:

van langketen. document_laders importeren Tekstlader

#Laad de dataset van zijn pad en sla de kleinere delen op in de database

lader = Tekstlader ( doc_pad )

documenten = lader. laden ( )

tekst_splitter = CharacterTextSplitter ( formaat van een blokje = 2000 , chunk_overlap = 0 )

teksten = tekst_splitter. gesplitste_documenten ( documenten )

#Converteer tekst naar cijfers en sla de insluitingen op in de database

inbedding = OpenAIE-inbedding ( )

doczoeken = Chroma. uit_documenten ( teksten , inbedding , collectienaam = 'staat van unie' )

Stap 6: Een retriever aanmaken

Om agent- en vectorarchieven te combineren, is het vereist om een ​​retriever te maken met behulp van de RetrievalQA() -methode uit het LangChain-framework. Deze ophaalmethode wordt aanbevolen om gegevens uit vectorarchieven op te halen met behulp van de agenten als hulpmiddel voor het werken met de databases:

staat_van_unie = OphalenQA. van_keten_type (

llm = llm , kettingtype = 'spullen' , terugvinder = doczoeken. als_retriever ( )

)

Laad nog een gegevensset om de agent te integreren met meerdere gegevenssets of vectorarchieven:

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

Sla de kemphaan-gegevensset op in de chromadb nadat u ook de kleinere delen van de gegevens met de inbeddingsvectoren hebt gemaakt:

documenten = lader. laden ( )
ruff_texts = tekst_splitter. gesplitste_documenten ( documenten )
ruff_db = Chroma. uit_documenten ( ruff_texts , inbedding , collectienaam = 'kemphaan' )
kemphaan = OphalenQA. van_keten_type (
llm = llm , kettingtype = 'spullen' , terugvinder = ruff_db. als_retriever ( )
)

Methode 1: Agent combineren met vectorwinkels

De eerste methode om zowel agenten als vectoropslag te combineren om informatie te extraheren, wordt hieronder vermeld:

Stap 1: Tools configureren

Nu de vectorwinkels zijn geconfigureerd, gaan we verder met het bouwen van het tweede onderdeel van ons proces, namelijk agent. Om de agent voor het proces te maken, importeert u de bibliotheken met behulp van de afhankelijkheden zoals agenten, tools, enz.

van langketen. agenten importeren initialiseer_agent
van langketen. agenten importeren AgentType
#Getting Tools van de LangChain om de agent te bouwen
van langketen. hulpmiddelen importeren BasisTool
van langketen. llms importeren Open AI
#LLMMathChain uit ketens halen om het taalmodel te bouwen
van langketen. kettingen importeren LLMMathChain
van langketen. nutsvoorzieningen importeren SerpAPIWrapper
van langketen. agenten importeren Hulpmiddel

Configureer de tools die moeten worden gebruikt met de agenten met behulp van het QA-systeem of het eerder geconfigureerde ophalen met de naam en beschrijving van de tools:

hulpmiddelen = [
Hulpmiddel (
naam = 'State of Union QA-systeem' ,
func = staat_van_unie. loop ,
beschrijving = 'Biedt antwoorden op de vragen gerelateerd aan de geladen dataset met invoer als een volledig gevormde vraag' ,
) ,
Hulpmiddel (
naam = 'Ruff QA-systeem' ,
func = kemphaan. loop ,
beschrijving = 'Geeft antwoorden op de vragen over kemphaan (een pythonlinter) met invoer als een volledig gevormde vraag' ,
) ,
]

Stap 2: Agent initialiseren

Zodra de tools zijn geconfigureerd, stelt u eenvoudigweg de agent in het argument van de initializa_agent() -methode in. De agent die we hier gebruiken is de ZERO_SHOT_REACT_DESCRIPTION samen met de tools, llm (taalmodel) en uitgebreid:

tussenpersoon = initialiseer_agent (

hulpmiddelen , llm , tussenpersoon = AgentType. ZERO_SHOT_REACT_DESCRIPTION , uitgebreid = WAAR

)

Stap 3: Test de agent

Voer eenvoudigweg de agent uit met behulp van de run()-methode die de vraag in zijn argument bevat:

tussenpersoon. loop (

‘Wat zei president Joe Biden over kanji bruin in de toespraak’

)

De volgende schermafbeelding toont het antwoord dat is geëxtraheerd uit beide gegevensarchieven met behulp van de observatie die is opgeslagen in het geheugen van de agent:

Methode 2: Agent als router gebruiken

Een andere manier om beide componenten te combineren is door de agent als router te gebruiken. Hieronder wordt het proces uitgelegd:

Stap 1: Tools configureren

Het gebruik van de agent als router betekent dat het RetrievalQA-systeem de uitvoer rechtstreeks retourneert, aangezien de tools zijn geconfigureerd om de uitvoer rechtstreeks terug te sturen:

hulpmiddelen = [
#configuring van de tools die nodig zijn om de agent te bouwen om gegevens uit de gegevens te halen
Hulpmiddel (
naam = 'State of Union QA-systeem' ,
func = staat_van_unie. loop ,
beschrijving = 'Biedt antwoorden op de vragen gerelateerd aan de geladen dataset met invoer als een volledige vraag' ,
retour_direct = WAAR ,
) ,
Hulpmiddel (
naam = 'Ruff QA-systeem' ,
func = kemphaan. loop ,
beschrijving = 'Geeft antwoorden op de vragen over kemphaan (een pythonlinter) met invoer als een volledige vraag' ,
retour_direct = WAAR ,
) ,
]

Stap 2: Initialiseer en test de agent

Na het instellen van de tools stelt u eenvoudigweg de agent in die uitsluitend als router kan worden gebruikt met behulp van de initialize_agent() -methode:

tussenpersoon = initialiseer_agent (

hulpmiddelen , llm , tussenpersoon = Agenttype. ZERO_SHOT_REACT_DESCRIPTION , uitgebreid = WAAR

)

Test de agent door de invoervraag in de agent.run() -methode te geven door de volgende opdracht uit te voeren:

tussenpersoon. loop (

‘Wat zei president Joe Biden over kanji bruin in de toespraak’

)

Uitvoer

De uitvoerscreenshot laat zien dat de agent eenvoudigweg het antwoord op de vraag heeft teruggestuurd uit de dataset die is geëxtraheerd door het RetrievalQA-systeem:

Methode 3: Agent gebruiken met Multi-Hop Vector Store

De derde methode waarbij de ontwikkelaars zowel agent- als vectorwinkels kunnen combineren, is voor de multi-hop vectorwinkelquery's. In het volgende gedeelte wordt het volledige proces uitgelegd:

Stap 1: Tools configureren

De eerste stap is, zoals gebruikelijk, de configuratie van de tools die worden gebruikt voor het bouwen van de agenten om gegevens uit de datastores te extraheren:

hulpmiddelen = [
Hulpmiddel (
naam = 'State of Union QA-systeem' ,
func = staat_van_unie. loop ,
beschrijving = 'Biedt antwoorden op de vragen met betrekking tot de geladen dataset met invoer als een volledig gevormde vraag, waarbij niet wordt verwezen naar voornaamwoorden uit het vorige gesprek' ,
) ,
Hulpmiddel (
naam = 'Ruff QA-systeem' ,
func = kemphaan. loop ,
beschrijving = 'Biedt antwoorden op de vragen met betrekking tot de geladen dataset met invoer als een volledig gevormde vraag, waarbij niet wordt verwezen naar voornaamwoorden uit het vorige gesprek' ,
) ,
]

Stap 2: Initialiseer en test de agent

Bouw daarna de agentvariabele met behulp van de initialize_agent() -methode met de naam van de agent:

tussenpersoon = initialiseer_agent (

hulpmiddelen , llm , tussenpersoon = Agenttype. ZERO_SHOT_REACT_DESCRIPTION , uitgebreid = WAAR

)

Voer de agent uit met behulp van de multi-hop-vraag die meer dan één aspect of kenmerk bevat, aangezien het volgende codeblok zo'n vraag bevat:

tussenpersoon. loop (

'Welke tool gebruikt kemphan om Python-notebooks te overlopen en heeft een van de sprekers de tool in zijn of haar toespraak genoemd'

)

Uitvoer

De volgende schermafbeelding suggereert dat de agent de vraag moet doornemen om de complexiteit ervan te begrijpen. Het heeft het antwoord geretourneerd dat door het QA-systeem is geëxtraheerd uit de meerdere gegevensopslagplaatsen die we eerder in het proces hebben geüpload:

Dat draait allemaal om het combineren van agenten en vectorwinkels in LangChain.

Conclusie

Om agents te combineren met de vectorstores in LangChain, begint u met de installatie van modules om de omgeving in te richten en datasets te laden. Configureer de vectorarchieven om gegevens te laden door deze eerst in kleinere delen te splitsen en bouw vervolgens het taalmodel met behulp van de OpenAI()-methode. Configureer de agent om deze te integreren met het vectorarchief om gegevens voor verschillende soorten query's te extraheren. In dit artikel wordt dieper ingegaan op het proces van het combineren van agenten en vectorwinkels in LangChain.