Come combinare agenti e negozi di vettori in LangChain?

Come Combinare Agenti E Negozi Di Vettori In Langchain



LangChain è il framework che progetta modelli linguistici. Enormi quantità di dati addestrano questi modelli nel linguaggio naturale. Esistono molti database o archivi di vettori come Chroma, ecc. per gestire questi set di dati. Combinando gli archivi di agenti e vettori, il modello funziona meglio con dati provenienti da domini diversi. LangChain consente l'uso di molti negozi di vettori per addestrare il modello linguistico o il chatbot.

Contorno rapido

Questo post mostrerà:







Come utilizzare un agente per restituire un output strutturato in LangChain



Metodo 1: combinazione dell'agente con i negozi di vettori



Metodo 2: utilizzo dell'agente come router





Metodo 3: utilizzo dell'agente con archivio vettoriale multi-hop

Conclusione



Come utilizzare un agente per restituire un output strutturato in LangChain?

Lo sviluppatore utilizza agenti per instradare tra i database contenenti dati di addestramento per i modelli. Un agente dispone del progetto completo del processo memorizzando tutti i passaggi. L'agente ha gli strumenti per eseguire tutte queste attività per completare il processo. L'utente può anche utilizzare l'agente per ottenere dati da diversi archivi dati per rendere diverso il modello.

Per apprendere il processo di combinazione di agenti e negozi di vettori in LangChain, segui semplicemente i passaggi elencati:

Passaggio 1: installazione dei framework

Innanzitutto, installa il modulo LangChain e le sue dipendenze per combinare agenti e archivi vettoriali:

pip installa langchain

In questa guida utilizziamo il database Chroma che può memorizzare i dati in diverse posizioni o tabelle:

pip installa chromadb

Per comprendere meglio i dati, dividi i file di grandi dimensioni in blocchi più piccoli utilizzando il tokenizzatore tiktoken:

pip installa tiktoken

OpenAI è il modulo che può essere utilizzato per costruire il modello linguistico di grandi dimensioni nel framework LangChain:

pip installa openai

Passaggio 2: ambiente OpenAI

Il prossimo passo qui è quello di impostare l'ambiente utilizzando la chiave API di OpenAI che può essere estratta dall'account ufficiale di OpenAI:

importare Voi
importare getpass

Voi . circa [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'Chiave API OpenAI:' )

Ora carica i dati dal sistema locale al collaboratore Google per poterli utilizzare in futuro:

da Google. ET AL importare File

caricato = File. caricamento ( )

Passaggio 3: creazione di un archivio di vettori

Questo passaggio configura il primo componente della nostra attività che è un archivio vettoriale per l'archiviazione dei dati caricati. La configurazione degli archivi vettoriali richiede le librerie che possono essere importate da diverse dipendenze di LangChain:

da langchain. incastri . openai importare OpenAIEmbeddings

#Vector memorizza la dipendenza per ottenere il database o il vettore richiesto

da langchain. vectorstores importare Croma

#Il divisore di testo viene utilizzato per convertire il testo di grandi dimensioni in blocchi più piccoli

da langchain. text_splitter importare CharacterTextSplitter

da langchain. llms importare OpenAI

da langchain. document_loaders importare WebBaseLoader

da langchain. Catene importare RecuperoQA


llm = OpenAI ( temperatura = 0 )

Passaggio 4: impostazione del percorso

Dopo aver importato le librerie, è sufficiente impostare il percorso per accedere agli archivi vettoriali prima di memorizzarvi i dati:

da pathlib importare Sentiero

parti_rilevanti = [ ]
per P In Sentiero ( '.' ) . assoluto ( ) . parti :
parti_rilevanti. aggiungere ( P )
Se parti_rilevanti [ - 3 : ] == [ 'langchain' , 'documenti' , 'moduli' ] :
rottura
#Istruzione condizionale all'interno del ciclo per impostare il percorso per ciascun database
percorso_doc = stra ( Sentiero ( *parti_rilevanti ) / 'stato_dell_unione.txt' )

Passaggio 5: caricamento e suddivisione dei dati

Ora, carica semplicemente i dati e dividili in parti più piccole per migliorarne la leggibilità e la comprensibilità. Crea incorporamenti dei dati convertendo il testo in numeri creando i loro spazi vettoriali e memorizzandoli nel database Chorma:

da langchain. document_loaders importare TextLoader

#Caricamento del set di dati dal suo percorso e memorizzazione dei blocchi più piccoli nel database

caricatore = TextLoader ( percorso_doc )

documenti = caricatore. carico ( )

text_splitter = CharacterTextSplitter ( dimensione_pezzo = 2000 , pezzo_sovrapposizione = 0 )

testi = text_splitter. documenti_divisi ( documenti )

#Converti il ​​testo in numeri e memorizza gli incorporamenti nel database

incastri = OpenAIEmbeddings ( )

docsearch = Croma. da_documenti ( testi , incastri , nome_raccolta = 'stato dell'unione' )

Passaggio 6: creazione di un retriever

Per combinare archivi di agenti e vettori, è necessario creare un retriever utilizzando il metodo RetrievalQA() dal framework LangChain. Questo metodo di recupero è consigliato per ottenere dati dagli archivi vettoriali utilizzando gli agenti come strumento per lavorare con i database:

stato_dell'unione = RecuperoQA. from_chain_type (

llm = llm , tipo_catena = 'cose' , documentalista = docsearch. as_retriever ( )

)

Carica un altro set di dati per integrare l'agente con più set di dati o archivi vettoriali:

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

Memorizza il set di dati ruff nel chromadb dopo aver creato anche i blocchi più piccoli di dati con i vettori di incorporamento:

documenti = caricatore. carico ( )
ruff_texts = text_splitter. documenti_divisi ( documenti )
ruff_db = Croma. da_documenti ( ruff_texts , incastri , nome_raccolta = 'gorgiera' )
gorgiera = RecuperoQA. from_chain_type (
llm = llm , tipo_catena = 'cose' , documentalista = ruff_db. as_retriever ( )
)

Metodo 1: combinazione dell'agente con i negozi di vettori

Il primo metodo per combinare agenti e archivi di vettori per estrarre informazioni è menzionato di seguito:

Passaggio 1: configura gli strumenti

Ora che gli archivi vettoriali sono configurati, passiamo alla costruzione del secondo componente del nostro processo, ovvero l'agente. Per creare l'agente per il processo, importa le librerie utilizzando le dipendenze come agenti, strumenti, ecc.

da langchain. agenti importare inizializza_agente
da langchain. agenti importare Tipo agente
#Ottenere strumenti da LangChain per creare l'agente
da langchain. utensili importare BaseTool
da langchain. llms importare OpenAI
#Ottenere LLMMathChain dalle catene per costruire il modello linguistico
da langchain. Catene importare LLMMathChain
da langchain. utilità importare SerpAPIWrapper
da langchain. agenti importare Attrezzo

Configura gli strumenti da utilizzare con gli agenti utilizzando il sistema QA o il recupero configurato in precedenza con il nome e la descrizione degli strumenti:

utensili = [
Attrezzo (
nome = 'Sistema di garanzia della qualità dello Stato dell'Unione' ,
funz = stato_dell'unione. correre ,
descrizione = 'Fornisce risposte alle domande relative al set di dati caricato con input come domanda completamente formata' ,
) ,
Attrezzo (
nome = 'Sistema di QA Ruff' ,
funz = gorgiera. correre ,
descrizione = 'Fornisce risposte alle domande su ruff (un linter python) con input come domanda completamente formata' ,
) ,
]

Passaggio 2: inizializzare l'agente

Una volta configurati gli strumenti, è sufficiente impostare l'agente nell'argomento del metodo inizializa_agent(). L'agente che stiamo utilizzando qui è il ZERO_SHOT_REACT_DESCRIPTION insieme agli strumenti, llm (modello linguistico) e verbose:

agente = inizializza_agente (

utensili , llm , agente = Tipo agente. ZERO_SHOT_REACT_DESCRIPTION , prolisso = VERO

)

Passaggio 3: testare l'agente

Esegui semplicemente l'agente utilizzando il metodo run() che contiene la domanda nel suo argomento:

agente. correre (

'Cosa ha detto il presidente Joe Biden riguardo ai kanji marroni nel discorso'

)

La schermata seguente mostra la risposta estratta da entrambi gli archivi dati utilizzando l'osservazione archiviata nella memoria dell'agente:

Metodo 2: utilizzo dell'agente come router

Un altro modo per combinare entrambi i componenti è utilizzare l'agente come router e quanto segue spiega il processo:

Passaggio 1: configura gli strumenti

Utilizzare l'agente come router significa che il sistema RetrievalQA restituirà l'output direttamente poiché gli strumenti sono configurati per restituire direttamente l'output:

utensili = [
#configurazione degli strumenti richiesti per creare l'agente per ottenere dati dai dati
Attrezzo (
nome = 'Sistema di garanzia della qualità dello Stato dell'Unione' ,
funz = stato_dell'unione. correre ,
descrizione = 'Fornisce risposte alle domande relative al set di dati caricato con input come domanda completa' ,
ritorno_diretto = VERO ,
) ,
Attrezzo (
nome = 'Sistema di QA Ruff' ,
funz = gorgiera. correre ,
descrizione = 'Fornisce risposte alle domande su ruff (un linter python) con input come domanda completa' ,
ritorno_diretto = VERO ,
) ,
]

Passaggio 2: inizializzare e testare l'agente

Dopo aver impostato gli strumenti è sufficiente impostare l'agente che può essere utilizzato esclusivamente come router utilizzando il metodo inizializzare_agent():

agente = inizializza_agente (

utensili , llm , agente = Tipo agente. ZERO_SHOT_REACT_DESCRIPTION , prolisso = VERO

)

Testare l'agente fornendo la domanda di input nel metodo agent.run() eseguendo il seguente comando:

agente. correre (

'Cosa ha detto il presidente Joe Biden riguardo ai kanji marroni nel discorso'

)

Produzione

Lo screenshot di output mostra che l'agente ha semplicemente restituito la risposta alla domanda dal set di dati estratto dal sistema RetrievalQA:

Metodo 3: utilizzo dell'agente con archivio vettoriale multi-hop

Il terzo metodo in cui gli sviluppatori possono combinare sia gli archivi degli agenti che quelli dei vettori riguarda le query dell'archivio vettoriale multi-hop. La sezione seguente spiega il processo completo:

Passaggio 1: configura gli strumenti

Il primo passo è, come al solito, la configurazione degli strumenti utilizzati per costruire gli agenti per estrarre i dati dai datastore:

utensili = [
Attrezzo (
nome = 'Sistema di garanzia della qualità dello Stato dell'Unione' ,
funz = stato_dell'unione. correre ,
descrizione = 'Fornisce risposte alle domande relative al set di dati caricato con input come domanda completamente formata, senza fare riferimento ad alcun pronome della conversazione precedente' ,
) ,
Attrezzo (
nome = 'Sistema di QA Ruff' ,
funz = gorgiera. correre ,
descrizione = 'Fornisce risposte alle domande relative al set di dati caricato con input come domanda completamente formata, senza fare riferimento ad alcun pronome della conversazione precedente' ,
) ,
]

Passaggio 2: inizializzare e testare l'agente

Successivamente, crea la variabile agent utilizzando il metodo inizializzare_agent() con il nome dell'agente:

agente = inizializza_agente (

utensili , llm , agente = Tipo agente. ZERO_SHOT_REACT_DESCRIPTION , prolisso = VERO

)

Esegui l'agente utilizzando la domanda multi-hop che contiene più di un aspetto o funzionalità poiché il seguente blocco di codice contiene tale domanda:

agente. correre (

'Quale strumento utilizza Ruff per eseguire i notebook Python e qualcuno degli oratori ha menzionato lo strumento nel proprio indirizzo'

)

Produzione

Lo screenshot seguente suggerisce che l'agente deve elaborare la domanda per comprenderne la complessità. Ha restituito la risposta estratta dal sistema di QA dai molteplici archivi dati che abbiamo caricato in precedenza nel processo:

Questo è tutto su come combinare agenti e negozi di vettori in LangChain.

Conclusione

Per combinare gli agenti con gli archivi vettoriali in LangChain, iniziare con l'installazione dei moduli per configurare l'ambiente e caricare i set di dati. Configura gli archivi vettoriali per caricare i dati suddividendoli prima in blocchi più piccoli, quindi crea il modello linguistico utilizzando il metodo OpenAI(). Configura l'agente per integrarlo con l'archivio vettoriale per estrarre dati per diversi tipi di query. Questo articolo ha approfondito il processo di combinazione di agenti e negozi di vettori in LangChain.