Come utilizzare Parent Document Retriever in LangChain?

Come Utilizzare Parent Document Retriever In Langchain



Il framework LangChain consente agli sviluppatori di creare modelli linguistici di grandi dimensioni in grado di comprendere e generare testo in linguaggio naturale. I modelli LangChain vengono addestrati su un'enorme quantità di dati in modo che il modello possa comprendere la lingua archiviando i dati in archivi vettoriali. Consente inoltre all'utente di creare retriever in grado di estrarre dati dal database o archivi vettoriali con tutti i dati archiviati per il modello.

Questo post dimostrerà il processo di utilizzo del document retriever principale in LangChain.

Come utilizzare un Document Retriever principale in LangChain?

Il document retriever principale in LangChain può essere utilizzato suddividendo i documenti in blocchi più piccoli in modo che non perdano il loro significato al momento dell'incorporamento. Si può dire che il documento genitore sia l'intero documento o la parte più grande da cui vengono estratti i pezzi più piccoli.







Per apprendere il processo di utilizzo del document retriever principale in LangChain, consulta semplicemente questa guida:



Passaggio 1: installare i moduli



Innanzitutto, inizia a utilizzare il document retriever principale installando il framework LangChain utilizzando il comando pip:





pip installa langchain

Installa il modulo database Chroma per salvare gli incorporamenti del documento e recuperare i dati da esso:



pip installa chromadb

Per installare tiktoken che è un tokenizzatore che ottiene i token del documento creando piccoli pezzi:

pip installa tiktoken

Ottieni il modulo OpenAI eseguendo il comando seguente sul notebook Python per ottenere le sue dipendenze e librerie:

pip installa openai

Passaggio 2: configurazione dell'ambiente e caricamento dei dati

Il prossimo passo è impostare l'ambiente utilizzando la chiave API dall'account OpenAI:

importare Voi
importare getpass

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

Ora carica i documenti dal sistema locale dopo aver importato la libreria dei file e quindi chiama il metodo upload():

da Google. ET AL importare File
caricato = File. caricamento ( )

Passaggio 3: importare librerie

Il passaggio successivo contiene il codice per importare le librerie richieste per l'utilizzo dei document retriever principali utilizzando il framework LangChain:

da langchain. recuperatori importare ParentDocumentRetriever
da langchain. vectorstores importare Croma
da langchain. incastri importare OpenAIEmbeddings
da langchain. text_splitter importare RicorsivoCharacterTextSplitter
da langchain. magazzinaggio importare InMemoryStore
da langchain. document_loaders importare TextLoader

Carica il documento per costruire il retriever utilizzando i metodi TextLoader() con il percorso dei file:

caricatori = [
TextLoader ( 'Dati.txt' ) ,
TextLoader ( 'stato_dell'unione.txt' ) ,
]
documenti = [ ]
per l In caricatori:

Passaggio 4: recupero dei documenti completi

Una volta caricati i documenti/file nel modello, è sufficiente creare gli incorporamenti dei documenti e archiviarli negli archivi vettoriali:

child_splitter = RicorsivoCharacterTextSplitter ( dimensione_pezzo = 400 )

vectorstore = Croma (
nome_raccolta = 'documenti_completi' ,
funzione_incorporamento = OpenAIEmbeddings ( )
)

negozio = InMemoryStore ( )
documentalista = ParentDocumentRetriever (
vectorstore = vectorstore ,
archivio documenti = negozio ,
child_splitter = child_splitter ,
)

Ora, chiama il metodo add_documents() utilizzando il retriever per portare il retriever ai documenti:

documentalista. aggiungi_documenti ( documenti , ID = Nessuno )

Il codice seguente estrae gli incorporamenti dei documenti che sono stati archiviati nel database per i file caricati:

elenco ( negozio. rendimento_chiavi ( ) )

Dopo aver ottenuto gli incorporamenti dei documenti, chiama il metodo similarity_search() con la query per ottenere piccoli pezzi dal documento:

sub_doc = vectorstore. similarity_search ( 'giustizia Breyer' )

Chiama il metodo print() per visualizzare i pezzi chiamati nel codice precedente in base alla query:

stampa ( sub_doc [ 0 ] . contenuto_pagina )

Chiama la funzione complete the retriever() per ottenere tutti i token archiviati nel database utilizzando il seguente codice:

documenti_recuperati = documentalista. ottieni_documenti_rilevanti ( 'giustizia Breyer' )

La stampa di tutti i documenti richiederebbe molto tempo e potenza di elaborazione, quindi è sufficiente ottenere la lunghezza dei documenti recuperati in precedenza:

soltanto ( documenti_recuperati [ 0 ] . contenuto_pagina )

Passaggio 5: recupero di blocchi più grandi

Questo passaggio non occuperà l'intero documento; tuttavia, prenderebbe uno scoiattolo più grande dal documento e ne recupererebbe una parte più piccola:

parent_splitter = RicorsivoCharacterTextSplitter ( dimensione_pezzo = 2000 )
child_splitter = RicorsivoCharacterTextSplitter ( dimensione_pezzo = 400 )
vectorstore = Croma ( nome_raccolta = 'genitori_divisi' , funzione_incorporamento = OpenAIEmbeddings ( ) )
negozio = InMemoryStore ( )

Configura il retriever per ottenere il token più piccolo dall'enorme pool di dati archiviati nel ' vectorstore 'variabile:

documentalista = ParentDocumentRetriever (
vectorstore = vectorstore ,
archivio documenti = negozio ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)

Chiama il retriever per ottenere i pezzi più grandi dai negozi di vettori utilizzando il file documenti variabile nell'argomento della funzione:

documentalista. aggiungi_documenti ( documenti )

Ottieni la lunghezza di questi documenti da documenti variabile tramite il comando seguente:

soltanto ( elenco ( negozio. rendimento_chiavi ( ) ) )

Prendi semplicemente un pezzo più piccolo da uno più grande poiché lo screenshot precedente mostra che ci sono 23 documenti archiviati nell'archivio vettoriale. La query viene utilizzata per ottenere i dati rilevanti utilizzando il file ricerca_somiglianza() metodo per recuperare i dati dall'archivio vettoriale:

sub_doc = vectorstore. similarity_search ( 'giustizia Breyer' )

Stampa i pezzi più piccoli utilizzando la query menzionata nel codice precedente per visualizzarli sullo schermo:

stampa ( sub_doc [ 0 ] . contenuto_pagina )

Ora utilizza il retriever sul set di dati completo archiviato nel database utilizzando la query come argomento della funzione:

documenti_recuperati = documentalista. ottieni_documenti_rilevanti ( 'giustizia Breyer' )

Ottieni la lunghezza dei blocchi completi creati e archiviati nel database:

soltanto ( documenti_recuperati [ 0 ] . contenuto_pagina )

Non possiamo visualizzare tutti i pezzi, ma il primo pezzo con il numero di indice 0 viene visualizzato utilizzando il seguente codice:

stampa ( documenti_recuperati [ 0 ] . contenuto_pagina

Questo è tutto incentrato sul processo di utilizzo del document retriever principale in LangChain.

Conclusione

Per utilizzare il document retriever principale in LangChain, è sufficiente installare i moduli e configurare l'ambiente OpenAI utilizzando la sua chiave API. Successivamente, importa le librerie richieste da LangChain per utilizzare il document retriever principale, quindi carica i documenti per il modello. L'utente può utilizzare i documenti principali come documento intero o come parte più grande e ottenere una parte più piccola utilizzando la query. Questo post ha elaborato il processo di utilizzo del document retriever principale in LangChain.