Cum se utilizează Parent Document Retriever în LangChain?

Cum Se Utilizeaza Parent Document Retriever In Langchain



Cadrul LangChain le permite dezvoltatorilor să construiască modele de limbaj mari care pot înțelege și genera text în limbaj natural. Modelele LangChain sunt antrenate pe o cantitate masivă de date, astfel încât modelul să poată înțelege limba prin stocarea datelor în magazine de vectori. De asemenea, permite utilizatorului să construiască retriever-uri care pot extrage date din baza de date sau din stocurile de vectori cu toate datele stocate pentru model.

Această postare va demonstra procesul de utilizare a documentului părinte retriever în LangChain.

Cum să utilizați un Parent Document Retriever în LangChain?

Recuperarea documentului părinte în LangChain poate fi utilizat prin împărțirea documentelor în bucăți mai mici, astfel încât acestea să nu-și piardă sensul în momentele încorporării. Se poate spune că documentul părinte este întregul document sau fragmentul mai mare din care sunt extrase bucățile mai mici.







Pentru a afla procesul de utilizare a documentului părinte în LangChain, consultați acest ghid:



Pasul 1: Instalați module



Mai întâi, începeți să utilizați retriever-ul părinte prin instalarea cadrului LangChain folosind comanda pip:





pip install langchain

Instalați modulul bazei de date Chroma pentru a salva înglobările documentului și pentru a prelua date din acesta:



pip install chromadb

Pentru a instala tiktoken, care este un tokenizer care primește simbolurile documentului prin crearea de bucăți mici:

pip install tiktoken

Obțineți modulul OpenAI executând următoarea comandă pe blocnotesul Python pentru a obține dependențele și bibliotecile sale:

pip install openai

Pasul 2: Configurați mediul și încărcați date

Următorul pas este să configura mediul folosind cheia API din contul OpenAI:

import tu
import getpass

tu . aproximativ [ „OPENAI_API_KEY” ] = getpass . getpass ( „Cheie API OpenAI:” )

Acum, încărcați documentele din sistemul local după importarea bibliotecii de fișiere și apoi apelați metoda upload():

din Google. colab import fișiere
încărcat = fișiere. încărcați ( )

Pasul 3: importați biblioteci

Următorul pas conține codul pentru importarea bibliotecilor necesare pentru utilizarea recuperatoarelor de documente părinte utilizând cadrul LangChain:

din langchain. retrievers import ParentDocumentRetriever
din langchain. vectorstores import Chroma
din langchain. înglobări import OpenAIEmbeddings
din langchain. text_splitter import RecursiveCharacterTextSplitter
din langchain. depozitare import InMemoryStore
din langchain. document_loaders import TextLoader

Încărcați documentul pentru a construi retriever-ul folosind metodele TextLoader() cu calea fișierelor:

încărcătoare = [
TextLoader ( „Data.txt” ) ,
TextLoader ( „state_of_the_union.txt” ) ,
]
docs = [ ]
pentru l în încărcătoare:

Pasul 4: Preluarea documentelor complete

Odată ce documentele/fișierele sunt încărcate în model, construiți pur și simplu înglobările documentelor și stocați-le în depozitele de vectori:

copil_despărțitor = RecursiveCharacterTextSplitter ( chunk_size = 400 )

vectorstore = Chroma (
nume_colecție = 'documente_complete' ,
funcţie_încorporare = OpenAIEmbeddings ( )
)

magazin = InMemoryStore ( )
copoi = ParentDocumentRetriever (
vectorstore = vectorstore ,
docstore = magazin ,
copil_despărțitor = copil_despărțitor ,
)

Acum, apelați metoda add_documents() folosind retriever-ul pentru a aduce retriever-ul la documente:

copoi. add_documents ( docs , id-uri = Nici unul )

Următorul cod extrage înglobările documentelor care au fost stocate în baza de date pentru fișierele încărcate:

listă ( magazin. yield_keys ( ) )

După obținerea înglobărilor documentelor, apelați metoda similarity_search() cu interogarea pentru a obține bucățile mici din document:

sub_docs = vectorstore. similarity_search ( „Bărbat de justiție” )

Apelați metoda print() pentru a afișa bucățile numite în codul anterior pe baza interogării:

imprimare ( sub_docs [ 0 ] . page_content )

Apelați funcția completă retriever() pentru a obține toate jetoanele stocate în baza de date folosind următorul cod:

documente_recuperate = copoi. obține_documente_relevante ( „Bărbat de justiție” )

Imprimarea tuturor documentelor ar dura mult timp și putere de procesare, așa că pur și simplu obțineți lungimea documentelor preluate anterior:

numai ( documente_recuperate [ 0 ] . page_content )

Pasul 5: Recuperarea bucăților mai mari

Acest pas nu va lua întregul document; cu toate acestea, ar fi nevoie de un chipmunk mai mare din document și ar prelua o bucată mai mică din el:

parent_splitter = RecursiveCharacterTextSplitter ( chunk_size = 2000 )
copil_despărțitor = RecursiveCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( nume_colecție = „părinți_despărțiți” , funcţie_încorporare = OpenAIEmbeddings ( ) )
magazin = InMemoryStore ( )

Configurați retriever-ul pentru a obține tokenul mai mic din uriașul pool de date stocate în „ vectorstore ' variabil:

copoi = ParentDocumentRetriever (
vectorstore = vectorstore ,
docstore = magazin ,
copil_despărțitor = copil_despărțitor ,
parent_splitter = parent_splitter ,
)

Apelați retrieverul pentru a obține bucățile mai mari din magazinele de vectori folosind docs variabilă în argumentul funcției:

copoi. add_documents ( docs )

Obțineți lungimea acestor documente de la docs variabilă prin comanda de mai jos:

numai ( listă ( magazin. yield_keys ( ) ) )

Pur și simplu obțineți o bucată mai mică de la una mai mare, deoarece captura de ecran anterioară arată că există 23 de documente stocate în magazinul de vectori. Interogarea este utilizată pentru a obține datele relevante folosind similarity_search() metoda de a prelua date din depozitul de vectori:

sub_docs = vectorstore. similarity_search ( „Bărbat de justiție” )

Imprimați bucățile mai mici folosind interogarea menționată în codul anterior pentru a le afișa pe ecran:

imprimare ( sub_docs [ 0 ] . page_content )

Acum, utilizați retriever-ul pe setul de date complet stocat în baza de date folosind interogarea ca argument al funcției:

documente_recuperate = copoi. obține_documente_relevante ( „Bărbat de justiție” )

Obțineți lungimea bucăților complete create și stocate în baza de date:

numai ( documente_recuperate [ 0 ] . page_content )

Nu putem afișa toate bucățile, dar prima bucată cu numărul de index 0 este afișată folosind următorul cod:

imprimare ( documente_recuperate [ 0 ] . page_content

Acesta este totul despre procesul de utilizare a documentului părinte retriever în LangChain.

Concluzie

Pentru a utiliza instrumentul de recuperare a documentului părinte în LangChain, pur și simplu instalați modulele și configurați mediul OpenAI folosind cheia API. După aceea, importați bibliotecile necesare din LangChain pentru utilizarea documentului părinte, apoi încărcați documentele pentru model. Utilizatorul poate folosi documentele părinte ca întreg document sau fragment mare și poate obține o bucată mai mică folosind interogarea. Această postare a elaborat procesul de utilizare a documentului părinte retriever în LangChain.