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 duimportere 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 fileruploadet = 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 ParentDocumentRetrieverfra 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.