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 Voiimportare 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 Filecaricato = 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 ParentDocumentRetrieverda 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.