Hvordan kombinere agenter og vektorbutikker i LangChain?

Hvordan Kombinere Agenter Og Vektorbutikker I Langchain



LangChain er rammeverket som designer språkmodeller. Enorme mengder data trener disse modellene i naturlig språk. Det er mange databaser eller vektorlagre som Chroma, etc. for å administrere disse datasettene. Ved å kombinere agent- og vektorlagrene gir modellen bedre resultater med data fra forskjellige domener. Langkjeden tillater bruk av mange vektorbutikker for å trene språkmodellen eller chatboten.

Rask oversikt

Dette innlegget vil vise:







Hvordan bruke en agent til å returnere en strukturert utgang i LangChain



Metode 1: Kombiner agent med Vector Stores



Metode 2: Bruke Agent som en ruter





Metode 3: Bruke agent med Multi-Hop Vector Store

Konklusjon



Hvordan bruke en agent til å returnere en strukturert produksjon i LangChain?

Utvikleren bruker agenter for å rute mellom databasene som inneholder treningsdata for modellene. En agent har blåkopi av hele prosessen ved å lagre alle trinnene. Agenten har verktøyene til å utføre alle disse aktivitetene for å fullføre prosessen. Brukeren kan også bruke agenten til å hente data fra forskjellige datalagre for å gjøre modellen mangfoldig.

For å lære prosessen med å kombinere agenter og vektorbutikker i LangChain, følg ganske enkelt trinnene i listen:

Trinn 1: Installere Frameworks

Installer først LangChain-modulen og dens avhengigheter for å kombinere agenter og vektorlagre:

pip installer langkjede

I denne veiledningen bruker vi Chroma-databasen som kan lagre data på forskjellige steder eller tabeller:

pip installer chromadb

For å få en bedre forståelse av data, del de store filene i mindre biter ved å bruke tiktoken tokenizer:

pip installer tiktoken

OpenAI er modulen som kan brukes til å bygge den store språkmodellen i LangChain-rammeverket:

pip installer openai

Trinn 2: OpenAI-miljø

Neste steg her er å sette opp miljøet ved å bruke OpenAIs API-nøkkel som kan trekkes ut fra den offisielle OpenAI-kontoen:

import du
import få pass

du . omtrent [ 'OPENAI_API_KEY' ] = få pass . få pass ( 'OpenAI API Key:' )

Last opp dataene fra det lokale systemet til Google-samarbeidet for å bruke dem i fremtiden:

fra Google. ET AL import filer

lastet opp = filer. laste opp ( )

Trinn 3: Opprette en vektorbutikk

Dette trinnet konfigurerer den første komponenten i oppgaven vår, som er et vektorlager for lagring av opplastede data. Konfigurering av vektorlagrene krever bibliotekene som kan importeres fra forskjellige avhengigheter av LangChain:

fra langkjede. innstøpinger . openai import ÅpneAIEbeddings

#Vector lagrer avhengighet for å få den nødvendige databasen eller vektoren

fra langkjede. vektorbutikker import Chroma

#Tekstsplitter brukes til å konvertere den store teksten til mindre biter

fra langkjede. tekstsplitter import CharacterTextSplitter

fra langkjede. llms import OpenAI

fra langkjede. document_loaders import WebBaseLoader

fra langkjede. kjeder import Henting QA


llm = OpenAI ( temperatur = 0 )

Trinn 4: Angi banen

Etter å ha importert bibliotekene, sett bare banen for tilgang til vektorlagrene før du lagrer dataene i den:

fra stilib import Sti

relevante_deler = [ ]
til s i Sti ( '.' ) . absolutt ( ) . deler :
relevante_deler. legge til ( s )
hvis relevante_deler [ - 3 : ] == [ 'langkjede' , 'dokumenter' , 'moduler' ] :
gå i stykker
#Conditional Statement inne i loopen for å angi banen for hver database
doc_path = str ( Sti ( *relevante_deler ) / 'state_of_the_union.txt' )

Trinn 5: Laste og dele dataene

Nå er det bare å laste inn dataene og dele dem opp i mindre biter for å gjøre lesbarheten og forståeligheten bedre. Lag innbygginger av dataene ved å konvertere teksten til tall som lager vektorrom og lagre den i Chorma-databasen:

fra langkjede. document_loaders import TextLoader

#Laster datasettet fra banen og lagrer de mindre delene i databasen

laster = TextLoader ( doc_path )

dokumenter = laster. laste ( )

tekstsplitter = CharacterTextSplitter ( chunk_size = 2000 , chunk_overlapp = 0 )

tekster = tekstsplitter. del_dokumenter ( dokumenter )

#Konverter tekst til tall og lagre innebyggingene i databasen

innstøpinger = ÅpneAIEbeddings ( )

docsearch = Chroma. fra_dokumenter ( tekster , innstøpinger , samlingsnavn = 'state-of-union' )

Trinn 6: Opprette en Retriever

For å kombinere agent- og vektorlagre, er det nødvendig å opprette en retriever ved å bruke RetrievalQA()-metoden fra LangChain-rammeverket. Denne gjenfinningsmetoden anbefales for å hente data fra vektorlagre ved å bruke agentene som verktøy for å jobbe med databasene:

state_of_union = Henting QA. from_chain_type (

llm = llm , kjedetype = 'ting' , retriever = docsearch. as_retriever ( )

)

Last inn et annet datasett for å integrere agenten med flere datasett eller vektorlagre:

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

Lagre ruff-datasettet i chromadb-en etter å ha opprettet de mindre delene av dataene med innebyggingsvektorene også:

dokumenter = laster. laste ( )
ruff_tekster = tekstsplitter. del_dokumenter ( dokumenter )
ruff_db = Chroma. fra_dokumenter ( ruff_tekster , innebygginger , samlingsnavn = 'ruff' )
ruff = Henting QA. from_chain_type (
llm = llm , kjedetype = 'ting' , retriever = ruff_db. as_retriever ( )
)

Metode 1: Kombiner agent med Vector Stores

Den første metoden for å kombinere både agenter og vektorlagre for å trekke ut informasjon er nevnt nedenfor:

Trinn 1: Konfigurer verktøy

Nå som vektorlagrene er konfigurert, går vi videre mot å bygge den andre komponenten i prosessen vår, dvs. agent. For å opprette agenten for prosessen, importer bibliotekene ved hjelp av avhengigheter som agenter, verktøy osv.

fra langkjede. agenter import initialize_agent
fra langkjede. agenter import AgentType
#Få verktøy fra LangChain for å bygge agenten
fra langkjede. verktøy import BaseTool
fra langkjede. llms import OpenAI
#Å få LLMMathChain fra kjeder til å bygge språkmodellen
fra langkjede. kjeder import LLMMathChain
fra langkjede. verktøy import SerpAPIWrapper
fra langkjede. agenter import Verktøy

Konfigurer verktøyene som skal brukes med agentene ved å bruke QA-systemet eller gjenfinning konfigurert tidligere med navn og beskrivelse av verktøyene:

verktøy = [
Verktøy (
Navn = 'State of Union QA System' ,
func = state_of_union. løpe ,
beskrivelse = 'Gir svar på spørsmålene knyttet til det lastede datasettet med inndata som et fullstendig utformet spørsmål' ,
) ,
Verktøy (
Navn = 'Ruff QA System' ,
func = ruff. løpe ,
beskrivelse = 'Gir svar på spørsmålene om ruff (en python linter) med input som et fullstendig utformet spørsmål' ,
) ,
]

Trinn 2: Initialiser agent

Når verktøyene er konfigurert, setter du bare agenten i argumentet til initializa_agent()-metoden. Agenten vi bruker her er ZERO_SHOT_REACT_DESCRIPTION sammen med verktøyene, llm (språkmodell) og verbose:

middel = initialize_agent (

verktøy , llm , middel = AgentType. ZERO_SHOT_REACT_DESCRIPTION , ordrik = ekte

)

Trinn 3: Test agenten

Bare kjør agenten ved å bruke run()-metoden som inneholder spørsmålet i argumentet:

middel. løpe (

'Hva sa president Joe Biden om kanji brown i adressen'

)

Følgende skjermbilde viser svaret hentet fra begge datalagrene ved hjelp av observasjonen som er lagret i agentens minne:

Metode 2: Bruke Agent som en ruter

En annen måte å kombinere begge komponentene på er å bruke agenten som en ruter, og følgende forklarer prosessen:

Trinn 1: Konfigurer verktøy

Å bruke agenten som ruteren betyr at RetrievalQA-systemet vil returnere utdataene direkte ettersom verktøyene er konfigurert til å returnere utdataene direkte:

verktøy = [
#configuring verktøyene som kreves for å bygge agenten for å hente data fra dataene
Verktøy (
Navn = 'State of Union QA System' ,
func = state_of_union. løpe ,
beskrivelse = 'Gir svar på spørsmålene knyttet til det innlastede datasettet med inndata som et komplett spørsmål' ,
retur_direkte = ekte ,
) ,
Verktøy (
Navn = 'Ruff QA System' ,
func = ruff. løpe ,
beskrivelse = 'Gir svar på spørsmålene om ruff (en python linter) med inndata som et komplett spørsmål' ,
retur_direkte = ekte ,
) ,
]

Trinn 2: Initialiser og test agenten

Etter å ha angitt verktøyene, still inn agenten som kun kan brukes som ruteren ved å bruke initialize_agent()-metoden:

middel = initialize_agent (

verktøy , llm , middel = AgentType. ZERO_SHOT_REACT_DESCRIPTION , ordrik = ekte

)

Test agenten ved å gi inndataspørsmålet i agent.run()-metoden ved å utføre følgende kommando:

middel. løpe (

'Hva sa president Joe Biden om kanji brown i adressen'

)

Produksjon

Utdataskjermbildet viser at agenten ganske enkelt har returnert svaret på spørsmålet fra datasettet hentet ut av RetrievalQA-systemet:

Metode 3: Bruke agent med Multi-Hop Vector Store

Den tredje metoden der utviklerne kan kombinere både agent- og vektorlagre, er for multi-hop vektorlagerforespørsler. Følgende avsnitt forklarer hele prosessen:

Trinn 1: Konfigurer verktøy

Det første trinnet er, som vanlig, konfigurasjonen av verktøyene som brukes til å bygge agentene for å trekke ut data fra datalagrene:

verktøy = [
Verktøy (
Navn = 'State of Union QA System' ,
func = state_of_union. løpe ,
beskrivelse = 'Gir svar på spørsmålene knyttet til det lastede datasettet med inndata som et fullstendig spørsmål, uten å referere til noen pronomen fra forrige samtale' ,
) ,
Verktøy (
Navn = 'Ruff QA System' ,
func = ruff. løpe ,
beskrivelse = 'Gir svar på spørsmålene knyttet til det lastede datasettet med inndata som et fullstendig spørsmål, uten å referere til noen pronomen fra forrige samtale' ,
) ,
]

Trinn 2: Initialiser og test agenten

Deretter bygger du agentvariabelen ved å bruke initialize_agent()-metoden med navnet på agenten:

middel = initialize_agent (

verktøy , llm , middel = AgentType. ZERO_SHOT_REACT_DESCRIPTION , ordrik = ekte

)

Kjør agenten ved å bruke multi-hop-spørsmålet som inneholder mer enn ett aspekt eller funksjon, da følgende kodeblokk inneholder et slikt spørsmål:

middel. løpe (

'Hvilket verktøy bruker ruff for å kjøre over Python-notatbøker, og nevnte noen av høyttalerne verktøyet i adressen sin'

)

Produksjon

Følgende skjermbilde antyder at agenten må jobbe gjennom spørsmålet for å forstå dets kompleksitet. Den har returnert svaret hentet ut av QA-systemet fra de flere datalagrene vi lastet opp tidligere i prosessen:

Det handler om hvordan man kombinerer agenter og vektorbutikker i LangChain.

Konklusjon

For å kombinere agenter med vektorlagrene i LangChain, start med installasjon av moduler for å sette opp miljøet og laste inn datasett. Konfigurer vektorlagrene til å laste data ved å dele dem i mindre biter først og deretter bygge språkmodellen ved å bruke OpenAI()-metoden. Konfigurer agenten til å integrere den med vektorlageret for å trekke ut data for forskjellige typer spørringer. Denne artikkelen har utdypet prosessen med å kombinere agenter og vektorbutikker i LangChain.