Hvordan bruke Parent Document Retriever i LangChain?

Hvordan Bruke Parent Document Retriever I Langchain



LangChain-rammeverket gjør det mulig for utviklerne å bygge store språkmodeller som kan forstå og generere tekst på naturlig språk. LangChain-modellene er trent på en enorm mengde data, slik at modellen kan forstå språket ved å lagre dataene i vektorlagre. Det gjør det også mulig for brukeren å bygge retrievere som kan trekke ut data fra databasen eller vektorlagrene med alle dataene som er lagret for modellen.

Dette innlegget vil demonstrere prosessen med å bruke den overordnede dokumenthenteren i LangChain.

Hvordan bruke en overordnet Document Retriever i LangChain?

Overordnet dokumenthenting i LangChain kan brukes ved å dele opp dokumentene i mindre biter, slik at de ikke mister sin mening i øyeblikket av innbygging. Det overordnede dokumentet kan sies å være hele dokumentet eller den større delen som de mindre delene er hentet fra.







For å lære prosessen med å bruke den overordnede dokumenthenteren i LangChain, sjekk ut denne veiledningen:



Trinn 1: Installer moduler



Først begynner du å bruke den overordnede dokumenthenteren ved å installere LangChain-rammeverket ved å bruke pip-kommandoen:





pip installer langkjede

Installer Chroma-databasemodulen for å lagre innebyggingen av dokumentet og hente data fra det:



pip installer chromadb

For å installere tiktoken som er en tokenizer som henter tokenene til dokumentet ved å lage små biter:

pip installer tiktoken

Få OpenAI-modulen ved å utføre følgende kommando på Python-notisboken for å få dens avhengigheter og biblioteker:

pip installer openai

Trinn 2: Konfigurer miljø og last opp data

Neste steg er å sette opp miljøet ved å bruke API-nøkkelen fra OpenAI-kontoen:

import du
import få pass

du . omtrent [ 'OPENAI_API_KEY' ] = få pass . få pass ( 'OpenAI API Key:' )

Last opp dokumentene fra det lokale systemet etter å ha importert filbiblioteket, og ring deretter upload()-metoden:

fra Google. ET AL import filer
lastet opp = filer. laste opp ( )

Trinn 3: Importer biblioteker

Det neste trinnet inneholder koden for å importere de nødvendige bibliotekene for bruk av overordnede dokumenthentere ved å bruke LangChain-rammeverket:

fra langkjede. retrievere import ParentDocumentRetriever
fra langkjede. vektorbutikker import Chroma
fra langkjede. innebygginger import ÅpneAIEbeddings
fra langkjede. tekstsplitter import RecursiveCharacterTextSplitter
fra langkjede. Oppbevaring import InMemoryStore
fra langkjede. document_loaders import TextLoader

Last inn dokumentet for å bygge retrieveren ved å bruke TextLoader()-metodene med banen til filene:

lastere = [
TextLoader ( 'Data.txt' ) ,
TextLoader ( «state_of_the_union.txt» ) ,
]
dokumenter = [ ]
til l i lastere:

Trinn 4: Henting av fullstendige dokumenter

Når dokumentene/filene er lastet inn i modellen, bygger du enkelt innbyggingene av dokumentene og lagrer dem i vektorlagrene:

barnesplitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )

vectorstore = Chroma (
samlingsnavn = 'full_dokumenter' ,
embedding_function = ÅpneAIEbeddings ( )
)

butikk = InMemoryStore ( )
retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
lege = butikk ,
barnesplitter = barnesplitter ,
)

Nå kaller du add_documents()-metoden ved å bruke retrieveren for å få retrieveren til dokumentene:

retriever. add_documents ( dokumenter , ids = Ingen )

Følgende kode trekker ut innbyggingene av dokumentene som er lagret i databasen for de opplastede filene:

liste ( butikk. yield_keys ( ) )

Etter å ha fått innbyggingene av dokumentene, kaller du similarity_search()-metoden med spørringen for å få de små bitene fra dokumentet:

sub_docs = vectorstore. likhetssøk ( 'rettferdighetsbrygger' )

Kall print()-metoden for å vise bitene kalt i forrige kode basert på spørringen:

skrive ut ( sub_docs [ 0 ] . side_innhold )

Kall funksjonen komplett retriever() for å få alle tokens lagret i databasen ved å bruke følgende kode:

hentet_dokumenter = retriever. få_relevante_dokumenter ( 'rettferdighetsbrygger' )

Å skrive ut alle dokumentene vil ta enorm tid og prosesseringskraft, så bare få lengden på dokumenter som er hentet tidligere:

bare ( hentet_dokumenter [ 0 ] . side_innhold )

Trinn 5: Henting av større biter

Dette trinnet vil ikke ta hele dokumentet; men det ville ta en større jordekorn fra dokumentet og hente en mindre del fra det:

parent_splitter = RecursiveCharacterTextSplitter ( chunk_size = 2000 )
barnesplitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( samlingsnavn = 'delte_foreldre' , embedding_function = ÅpneAIEbeddings ( ) )
butikk = InMemoryStore ( )

Konfigurer retrieveren for å få det mindre tokenet fra det enorme datautvalget som er lagret i ' vectorstore variabel:

retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
lege = butikk ,
barnesplitter = barnesplitter ,
parent_splitter = parent_splitter ,
)

Ring retrieveren for å få de større delene fra vektorlagrene ved å bruke dokumenter variabel i argumentet til funksjonen:

retriever. add_documents ( dokumenter )

Få lengden på disse dokumentene fra dokumenter variabel via kommandoen nedenfor:

bare ( liste ( butikk. yield_keys ( ) ) )

Bare få en mindre del fra en større, da forrige skjermbilde viser at det er 23 dokumenter lagret i vektorlageret. Spørringen brukes til å få de relevante dataene ved hjelp av likhetssøk() metode for å hente data fra vektorlageret:

sub_docs = vectorstore. likhetssøk ( 'rettferdighetsbrygger' )

Skriv ut de mindre delene ved å bruke spørringen nevnt i forrige kode for å vise dem på skjermen:

skrive ut ( sub_docs [ 0 ] . side_innhold )

Bruk nå henteren på hele datasettet som er lagret i databasen ved å bruke spørringen som argumentet for funksjonen:

hentet_dokumenter = retriever. få_relevante_dokumenter ( 'rettferdighetsbrygger' )

Få lengden på de komplette delene som er opprettet og lagret i databasen:

bare ( hentet_dokumenter [ 0 ] . side_innhold )

Vi kan ikke vise alle bitene, men den første delen med indeksnummeret 0 vises med følgende kode:

skrive ut ( hentet_dokumenter [ 0 ] . side_innhold

Det handler om prosessen med å bruke den overordnede dokumenthenteren i LangChain.

Konklusjon

For å bruke den overordnede dokumenthenteren i LangChain, installer ganske enkelt modulene og sett opp OpenAI-miljøet ved hjelp av API-nøkkelen. Deretter importerer du de nødvendige bibliotekene fra LangChain for bruk av den overordnede dokumenthenteren, og laster deretter inn dokumentene for modellen. Brukeren kan bruke overordnede dokumenter som hele dokumentet eller den store delen og få en mindre del ved å bruke spørringen. Dette innlegget har utdypet prosessen med å bruke den overordnede dokumenthenteren i LangChain.