In diesem Beitrag wird der Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain demonstriert.
Wie verwende ich einen Parent Document Retriever in LangChain?
Der übergeordnete Dokument-Retriever in LangChain kann verwendet werden, indem die Dokumente in kleinere Teile aufgeteilt werden, damit sie beim Einbetten nicht ihre Bedeutung verlieren. Man kann sagen, dass das übergeordnete Dokument das gesamte Dokument ist oder der größere Teil, aus dem die kleineren Teile extrahiert werden.
Um den Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain zu erfahren, schauen Sie sich einfach diese Anleitung an:
Schritt 1: Module installieren
Beginnen Sie zunächst mit der Verwendung des übergeordneten Dokument-Retrievers, indem Sie das LangChain-Framework mit dem Befehl pip installieren:
pip langchain installieren
Installieren Sie das Chroma-Datenbankmodul, um die Einbettungen des Dokuments zu speichern und Daten daraus abzurufen:
pip chromadb installieren
So installieren Sie tiktoken, einen Tokenizer, der die Token des Dokuments durch die Erstellung kleiner Blöcke erhält:
pip tiktoken installieren
Rufen Sie das OpenAI-Modul ab, indem Sie den folgenden Befehl auf dem Python-Notebook ausführen, um seine Abhängigkeiten und Bibliotheken abzurufen:
pip openai installieren
Schritt 2: Umgebung einrichten und Daten hochladen
Der nächste Schritt besteht darin Umgebung einrichten Verwenden des API-Schlüssels vom OpenAI-Konto:
importieren Duimportieren getpass
Du . etwa [ „OPENAI_API_KEY“ ] = getpass . getpass ( „OpenAI-API-Schlüssel:“ )
Laden Sie nun die Dokumente vom lokalen System hoch, nachdem Sie die Dateibibliothek importiert haben, und rufen Sie dann die Methode upload() auf:
aus Google. ET AL importieren Dateienhochgeladen = Dateien. hochladen ( )
Schritt 3: Bibliotheken importieren
Der nächste Schritt enthält den Code zum Importieren der erforderlichen Bibliotheken für die Verwendung der übergeordneten Dokument-Retriever mithilfe des LangChain-Frameworks:
aus langchain. Retriever importieren ParentDocumentRetrieveraus langchain. Vektorstores importieren Chroma
aus langchain. Einbettungen importieren OpenAIEmbeddings
aus langchain. text_splitter importieren RekursiverCharacterTextSplitter
aus langchain. Lagerung importieren InMemoryStore
aus langchain. document_loaders importieren TextLoader
Laden Sie das Dokument zum Erstellen des Retrievers mithilfe der TextLoader()-Methoden mit dem Pfad der Dateien:
Lader = [TextLoader ( 'Daten.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
Dokumente = [ ]
für l In Lader:
Schritt 4: Vollständige Dokumente abrufen
Sobald die Dokumente/Dateien in das Modell geladen sind, erstellen Sie einfach die Einbettungen der Dokumente und speichern Sie sie in den Vektorspeichern:
child_splitter = RekursiverCharacterTextSplitter ( chunk_size = 400 )vectorstore = Chroma (
Sammlungsname = „full_documents“ ,
Einbettungsfunktion = OpenAIEmbeddings ( )
)
speichern = InMemoryStore ( )
Retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
docstore = speichern ,
child_splitter = child_splitter ,
)
Rufen Sie nun die Methode add_documents() mit dem Retriever auf, um den Retriever zu den Dokumenten zu bringen:
Retriever. add_documents ( Dokumente , Ausweise = Keiner )Der folgende Code extrahiert die Einbettungen der Dokumente, die in der Datenbank für die hochgeladenen Dateien gespeichert wurden:
Liste ( speichern. yield_keys ( ) )
Nachdem Sie die Einbettungen der Dokumente erhalten haben, rufen Sie die Methode „similarity_search()“ mit der Abfrage auf, um die kleinen Teile aus dem Dokument abzurufen:
sub_docs = vectorstore. Ähnlichkeitssuche ( „Justice Breyer“ )Rufen Sie die Methode print() auf, um die im vorherigen Code aufgerufenen Blöcke basierend auf der Abfrage anzuzeigen:
drucken ( sub_docs [ 0 ] . Seiteninhalt )
Rufen Sie die Funktion „complete the Retriever()“ auf, um alle in der Datenbank gespeicherten Token mithilfe des folgenden Codes abzurufen:
abgerufene_Dokumente = Retriever. get_relevante_dokumente ( „Justice Breyer“ )Das Drucken aller Dokumente würde viel Zeit und Rechenleistung in Anspruch nehmen. Ermitteln Sie daher einfach die Länge der zuvor abgerufenen Dokumente:
nur ( abgerufene_Dokumente [ 0 ] . Seiteninhalt )
Schritt 5: Größere Stücke abrufen
Bei diesem Schritt wird nicht das gesamte Dokument beansprucht. Es würde jedoch einen größeren Streifenhörnchen aus dem Dokument nehmen und einen kleineren Teil davon abrufen:
parent_splitter = RekursiverCharacterTextSplitter ( chunk_size = 2000 )child_splitter = RekursiverCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( Sammlungsname = „split_parents“ , Einbettungsfunktion = OpenAIEmbeddings ( ) )
speichern = InMemoryStore ( )
Konfigurieren Sie den Retriever so, dass er das kleinere Token aus dem riesigen Datenpool erhält, der im „ vectorstore ” Variable:
Retriever = ParentDocumentRetriever (vectorstore = vectorstore ,
docstore = speichern ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)
Rufen Sie den Retriever auf, um mithilfe von die größeren Blöcke aus den Vektorspeichern abzurufen Dokumente Variable im Argument der Funktion:
Retriever. add_documents ( Dokumente )Ermitteln Sie die Länge dieser Dokumente aus der Dokumente Variable über den folgenden Befehl:
nur ( Liste ( speichern. yield_keys ( ) ) )
Holen Sie sich einfach einen kleineren Teil von einem größeren, da der vorherige Screenshot zeigt, dass im Vektorspeicher 23 Dokumente gespeichert sind. Die Abfrage wird verwendet, um die relevanten Daten mithilfe der abzurufen Ähnlichkeitssuche() Methode zum Abrufen von Daten aus dem Vektorspeicher:
sub_docs = vectorstore. Ähnlichkeitssuche ( „Justice Breyer“ )Drucken Sie die kleineren Blöcke mit der im vorherigen Code erwähnten Abfrage aus, um sie auf dem Bildschirm anzuzeigen:
drucken ( sub_docs [ 0 ] . Seiteninhalt )
Verwenden Sie nun den Retriever für den gesamten in der Datenbank gespeicherten Datensatz und verwenden Sie dabei die Abfrage als Argument der Funktion:
abgerufene_Dokumente = Retriever. get_relevante_dokumente ( „Justice Breyer“ )Ermitteln Sie die Länge der kompletten erstellten und in der Datenbank gespeicherten Blöcke:
nur ( abgerufene_Dokumente [ 0 ] . Seiteninhalt )
Wir können nicht alle Chunks anzeigen, aber der erste Chunk mit der Indexnummer 0 wird mit dem folgenden Code angezeigt:
drucken ( abgerufene_Dokumente [ 0 ] . Seiteninhalt
Das ist alles über den Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain.
Abschluss
Um den Parent Document Retriever in LangChain zu verwenden, installieren Sie einfach die Module und richten Sie die OpenAI-Umgebung mithilfe ihres API-Schlüssels ein. Anschließend importieren Sie die erforderlichen Bibliotheken aus LangChain für die Verwendung des übergeordneten Dokument-Retrievers und laden dann die Dokumente für das Modell. Der Benutzer kann übergeordnete Dokumente als gesamtes Dokument oder als großen Teil verwenden und mithilfe der Abfrage einen kleineren Teil abrufen. In diesem Beitrag wurde der Prozess der Verwendung des Parent Document Retrievers in LangChain näher erläutert.