Hvordan bruger man forældredokumentretriever i LangChain?

Hvordan Bruger Man Foraeldredokumentretriever I Langchain



LangChain-rammen gør det muligt for udviklerne at bygge store sprogmodeller, der kan forstå og generere tekst i naturligt sprog. LangChain-modellerne er trænet på en enorm mængde data, så modellen kan forstå sproget ved at gemme dataene i vektorlagre. Det gør det også muligt for brugeren at bygge retrievere, der kan udtrække data fra databasen eller vektorlagre med alle de data, der er gemt til modellen.

Dette indlæg vil demonstrere processen med at bruge den overordnede dokumenthenter i LangChain.

Hvordan bruger man en overordnet dokumenthenter i LangChain?

Parent document retriever i LangChain kan bruges ved at opdele dokumenterne i mindre bidder, så de ikke mister deres betydning i indlejringsøjeblikket. Det overordnede dokument kan siges at være hele dokumentet eller den større del, hvorfra de mindre bidder er udtrukket.







For at lære processen med at bruge den overordnede dokumenthenter i LangChain, tjek blot denne vejledning:



Trin 1: Installer moduler



Først skal du begynde at bruge den overordnede dokumenthenter ved at installere LangChain-rammeværket ved hjælp af pip-kommandoen:





pip installer langkæde

Installer Chroma-databasemodulet for at gemme indlejringerne af dokumentet og hente data fra det:



pip installer chromadb

For at installere tiktoken, som er en tokenizer, der henter dokumentets tokens ved at oprette små bidder:

pip installer tiktoken

Hent OpenAI-modulet ved at udføre følgende kommando på Python-notesbogen for at få dets afhængigheder og biblioteker:

pip installer openai

Trin 2: Konfigurer miljø og upload data

Næste skridt er at sætte miljøet op ved hjælp af API-nøglen fra OpenAI-kontoen:

importere du
importere getpass

du . rundt regnet [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API-nøgle:' )

Upload nu dokumenterne fra det lokale system efter import af filbiblioteket og kald derefter upload() metoden:

fra google. ET AL importere filer
uploadet = filer. upload ( )

Trin 3: Importer biblioteker

Det næste trin indeholder koden til at importere de nødvendige biblioteker til brug af de overordnede dokumenthentere ved hjælp af LangChain-rammeværket:

fra langkæde. retrievere importere ParentDocumentRetriever
fra langkæde. vektorbutikker importere Chroma
fra langkæde. indlejringer importere OpenAIE-indlejringer
fra langkæde. tekstsplitter importere RecursiveCharacterTextSplitter
fra langkæde. opbevaring importere InMemoryStore
fra langkæde. dokumentindlæsere importere TextLoader

Indlæs dokumentet for at bygge retrieveren ved hjælp af TextLoader()-metoderne med stien til filerne:

læssere = [
TextLoader ( 'Data.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
dokumenter = [ ]
til l i læssere:

Trin 4: Hentning af komplette dokumenter

Når dokumenterne/filerne er indlæst i modellen, skal du blot bygge indlejringerne af dokumenterne og gemme dem i vektorlagrene:

barnesplitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )

vectorstore = Chroma (
samlingsnavn = 'fulde_dokumenter' ,
indlejringsfunktion = OpenAIE-indlejringer ( )
)

butik = InMemoryStore ( )
retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
læge = butik ,
barnesplitter = barnesplitter ,
)

Kald nu add_documents() metoden ved hjælp af retrieveren for at få retrieveren til dokumenterne:

retriever. tilføje_dokumenter ( dokumenter , ids = Ingen )

Følgende kode udtrækker indlejringerne af de dokumenter, der er blevet gemt i databasen for de uploadede filer:

liste ( butik. yield_keys ( ) )

Efter at have hentet indlejringerne af dokumenterne, kald metoden similarity_search() med forespørgslen for at få de små bidder fra dokumentet:

sub_docs = vectorstore. lighedssøgning ( 'retfærdighedsbrygger' )

Kald print()-metoden for at vise de bidder, der blev kaldt i den forrige kode baseret på forespørgslen:

Print ( sub_docs [ 0 ] . side_indhold )

Kald funktionen komplet retriever() for at få alle tokens gemt i databasen ved hjælp af følgende kode:

hentede_dokumenter = retriever. få_relevante_dokumenter ( 'retfærdighedsbrygger' )

Udskrivning af alle dokumenter ville tage en enorm tid og processorkraft, så du skal blot få længden af ​​dokumenter, der er hentet tidligere:

kun ( hentede_dokumenter [ 0 ] . side_indhold )

Trin 5: Hentning af større bidder

Dette trin tager ikke hele dokumentet; men det ville tage et større jordegern fra dokumentet og hente en mindre del fra det:

forældre_splitter = RecursiveCharacterTextSplitter ( chunk_size = 2000 )
barnesplitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( samlingsnavn = 'splittede_forældre' , indlejringsfunktion = OpenAIE-indlejringer ( ) )
butik = InMemoryStore ( )

Konfigurer retrieveren til at få det mindre token fra den enorme pulje af data, der er gemt i ' vectorstore variabel:

retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
læge = butik ,
barnesplitter = barnesplitter ,
forældre_splitter = forældre_splitter ,
)

Ring til retrieveren for at få de større bidder fra vektorlagrene ved hjælp af dokumenter variabel i argumentet for funktionen:

retriever. tilføje_dokumenter ( dokumenter )

Få længden af ​​disse dokumenter fra dokumenter variabel via nedenstående kommando:

kun ( liste ( butik. yield_keys ( ) ) )

Du skal blot få en mindre del fra en større, da det forrige skærmbillede viser, at der er 23 dokumenter gemt i vektorlageret. Forespørgslen bruges til at få de relevante data ved hjælp af lighedssøgning() metode til at hente data fra vektorlageret:

sub_docs = vectorstore. lighedssøgning ( 'retfærdighedsbrygger' )

Udskriv de mindre bidder ved hjælp af forespørgslen nævnt i den foregående kode for at vise dem på skærmen:

Print ( sub_docs [ 0 ] . side_indhold )

Brug nu retrieveren på det komplette datasæt, der er gemt i databasen, ved at bruge forespørgslen som argumentet for funktionen:

hentede_dokumenter = retriever. få_relevante_dokumenter ( 'retfærdighedsbrygger' )

Få længden af ​​de komplette bidder, der er oprettet og gemt i databasen:

kun ( hentede_dokumenter [ 0 ] . side_indhold )

Vi kan ikke vise alle bidderne, men den første chunk med indeksnummeret 0 vises ved hjælp af følgende kode:

Print ( hentede_dokumenter [ 0 ] . side_indhold

Det handler om processen med at bruge den overordnede dokumenthenter i LangChain.

Konklusion

For at bruge den overordnede dokumenthenter i LangChain skal du blot installere modulerne og opsætte OpenAI-miljøet ved hjælp af dens API-nøgle. Importer derefter de nødvendige biblioteker fra LangChain til brug af den overordnede dokumenthenter, og indlæs derefter dokumenterne til modellen. Brugeren kan bruge overordnede dokumenter som hele dokumentet eller den store del og få en mindre del ved hjælp af forespørgslen. Dette indlæg har uddybet processen med at bruge den overordnede dokumenthenter i LangChain.