Tento příspěvek demonstruje proces použití nadřazeného vyhledávání dokumentů v LangChain.
Jak používat rodičovský dokument Retriever v LangChain?
Nadřazený nástroj pro vyhledávání dokumentů v LangChain lze použít rozdělením dokumentů na menší části, aby neztratily svůj význam v okamžicích vkládání. O nadřazeném dokumentu lze říci, že je to celý dokument nebo větší část, ze které jsou extrahovány menší části.
Chcete-li se naučit proces používání nadřazeného nástroje pro vyhledávání dokumentů v LangChain, podívejte se na tuto příručku:
Krok 1: Nainstalujte moduly
Nejprve začněte používat nadřazený nástroj pro získávání dokumentů instalací rámce LangChain pomocí příkazu pip:
pip install langchain
Nainstalujte si databázový modul Chroma pro uložení vložení dokumentu a načtení dat z něj:
pip install chromadb
Chcete-li nainstalovat tiktoken, což je tokenizér, který získává tokeny dokumentu vytvářením malých částí:
pip nainstalovat tiktoken
Získejte modul OpenAI spuštěním následujícího příkazu na notebooku Python, abyste získali jeho závislosti a knihovny:
pip install openai
Krok 2: Nastavení prostředí a nahrání dat
Dalším krokem je nastavit prostředí pomocí klíče API z účtu OpenAI:
import vyimport getpass
vy . přibližně [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'Klíč OpenAI API:' )
Nyní po importu knihovny souborů nahrajte dokumenty z místního systému a poté zavolejte metodu upload():
z Google. ET AL import souborynahráno = soubory. nahrát ( )
Krok 3: Import knihoven
Další krok obsahuje kód pro import požadovaných knihoven pro použití nadřazených retrieverů dokumentů pomocí frameworku LangChain:
z langchain. retrívři import ParentDocumentRetrieverz langchain. vectorstores import Chroma
z langchain. vložení import OpenAIEmbeddings
z langchain. text_splitter import RecursiveCharacterTextSplitter
z langchain. úložný prostor import InMemoryStore
z langchain. nakladače dokumentů import TextLoader
Načtěte dokument a vytvořte retriever pomocí metod TextLoader() s cestou k souborům:
nakladače = [TextLoader ( 'data.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
docs = [ ]
pro l v nakladače:
Krok 4: Načtení kompletních dokumentů
Jakmile jsou dokumenty/soubory načteny do modelu, jednoduše vytvořte vložení dokumentů a uložte je do vektorových úložišť:
child_splitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )vectorstore = Chroma (
název_kolekce = 'full_documents' ,
funkce vkládání = OpenAIEmbeddings ( )
)
obchod = InMemoryStore ( )
retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
lékárna = obchod ,
child_splitter = child_splitter ,
)
Nyní zavolejte metodu add_documents() pomocí retrieveru, aby se retriever dostal do dokumentů:
retriever. přidat_dokumenty ( docs , ids = Žádný )Následující kód extrahuje vložení dokumentů, které byly uloženy v databázi pro nahrané soubory:
seznam ( obchod. výnos_klíče ( ) )
Po získání vložení dokumentů zavolejte metodu podobnosti_search() s dotazem, abyste získali malé kousky z dokumentu:
sub_docs = vectorstore. podobnostní_hledání ( 'spravedlnost breyer' )Voláním metody print() zobrazíte bloky volané v předchozím kódu na základě dotazu:
tisk ( sub_docs [ 0 ] . obsah_stránky )
Voláním funkce complete retriever() získáte všechny tokeny uložené v databázi pomocí následujícího kódu:
retrieved_docs = retriever. získat_relevantní_dokumenty ( 'spravedlnost breyer' )Tisk všech dokumentů by zabral obrovský čas a výpočetní výkon, takže jednoduše získejte délku dříve načtených dokumentů:
jen ( retrieved_docs [ 0 ] . obsah_stránky )
Krok 5: Načítání větších kusů
Tento krok nezabere celý dokument; nicméně z dokumentu by se vzal větší chipmunk a načetl by se z něj menší kus:
rodič_rozdělovač = RecursiveCharacterTextSplitter ( chunk_size = 2000 )child_splitter = RecursiveCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( název_kolekce = 'rozdělení_rodiče' , funkce vkládání = OpenAIEmbeddings ( ) )
obchod = InMemoryStore ( )
Nakonfigurujte retriever tak, aby získal menší token z obrovského fondu dat uložených v „ vectorstore 'proměnná:
retriever = ParentDocumentRetriever (vectorstore = vectorstore ,
lékárna = obchod ,
child_splitter = child_splitter ,
rodič_rozdělovač = rodič_rozdělovač ,
)
Zavolejte retrívra, abyste získali větší kusy z vektorových skladů pomocí docs proměnná v argumentu funkce:
retriever. přidat_dokumenty ( docs )Získejte délku těchto dokumentů z docs proměnnou pomocí níže uvedeného příkazu:
jen ( seznam ( obchod. výnos_klíče ( ) ) )
Jednoduše získejte menší část z větší, protože předchozí snímek obrazovky ukazuje, že ve vektorovém úložišti je uloženo 23 dokumentů. Dotaz se používá k získání relevantních dat pomocí podobnostní_hledání() metoda pro načtení dat z úložiště vektorů:
sub_docs = vectorstore. podobnostní_hledání ( 'spravedlnost breyer' )Vytiskněte menší kousky pomocí dotazu uvedeného v předchozím kódu, abyste je zobrazili na obrazovce:
tisk ( sub_docs [ 0 ] . obsah_stránky )
Nyní použijte retriever na kompletní datovou sadu uloženou v databázi pomocí dotazu jako argumentu funkce:
retrieved_docs = retriever. získat_relevantní_dokumenty ( 'spravedlnost breyer' )Získejte délku vytvořených a uložených kompletních bloků v databázi:
jen ( retrieved_docs [ 0 ] . obsah_stránky )
Nemůžeme zobrazit všechny bloky, ale první blok s indexovým číslem 0 je zobrazen pomocí následujícího kódu:
tisk ( retrieved_docs [ 0 ] . obsah_stránky
To je vše o procesu použití nadřazeného vyhledávání dokumentů v LangChain.
Závěr
Chcete-li v LangChain používat nadřazený dokumentový retriever, jednoduše nainstalujte moduly a nastavte prostředí OpenAI pomocí jeho klíče API. Poté importujte požadované knihovny z LangChain pro použití nadřazeného nástroje pro získávání dokumentů a poté načtěte dokumenty pro model. Uživatel může použít nadřazené dokumenty jako celý dokument nebo velký blok a pomocí dotazu získat menší blok. Tento příspěvek rozvedl proces použití nadřazeného vyhledávání dokumentů v LangChain.