Ez a bejegyzés bemutatja a szülő dokumentum-visszakereső használatának folyamatát a LangChainben.
Hogyan használjunk szülői dokumentum-visszakeresőt a LangChainben?
A LangChain szülő dokumentum-visszakeresője úgy használható, hogy a dokumentumokat kisebb darabokra bontja, így nem veszítik el értelmüket a beágyazás pillanatában. A szülődokumentumról azt mondhatjuk, hogy az egész dokumentum vagy az a nagyobb darab, amelyből a kisebb darabokat kivonják.
A szülő dokumentum-visszakereső használatának folyamatának megismeréséhez a LangChainben egyszerűen tekintse meg ezt az útmutatót:
1. lépés: Modulok telepítése
Először kezdje el a szülő dokumentum-visszakereső használatát a LangChain keretrendszer telepítésével a pip paranccsal:
pip install langchain
Telepítse a Chroma adatbázis modult a dokumentum beágyazásának mentéséhez és az adatok lekéréséhez:
pip install chromadb
A tiktoken telepítéséhez, amely egy tokenizátor, amely kis darabok létrehozásával kapja meg a dokumentum tokenjeit:
pip install tiktoken
Szerezze be az OpenAI modult a következő parancs végrehajtásával a Python notebookon a függőségek és könyvtárak lekéréséhez:
pip install openai
2. lépés: A környezet beállítása és az adatok feltöltése
A következő lépés az állítsa be a környezetet az OpenAI-fiók API-kulcsának használatával:
import teimport getpass
te . hozzávetőlegesen, körülbelül [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API kulcs:' )
Most töltse fel a dokumentumokat a helyi rendszerről a fájlkönyvtár importálása után, majd hívja meg az upload() metódust:
tól től Google. ET AL import fájlokatfeltöltve = fájlokat. feltölteni ( )
3. lépés: Importáljon könyvtárakat
A következő lépés tartalmazza a szükséges könyvtárak importálásához szükséges kódot a szülő dokumentum-visszakeresők használatához a LangChain keretrendszer használatával:
tól től langchain. retrieverek import ParentDocumentRetrievertól től langchain. vektortárak import Chroma
tól től langchain. beágyazások import OpenAIEembeddings
tól től langchain. text_splitter import RecursiveCharacterTextSplitter
tól től langchain. tárolás import InMemoryStore
tól től langchain. document_loaders import TextLoader
Töltse be a dokumentumot a visszakereső felépítéséhez a TextLoader() metódusokkal a fájlok elérési útjával:
rakodók = [TextLoader ( 'Data.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
dok = [ ]
számára l ban ben rakodók:
4. lépés: Teljes dokumentumok lekérése
Miután a dokumentumokat/fájlokat betöltötte a modellbe, egyszerűen készítse el a dokumentumok beágyazásait, és tárolja azokat a vektortárolókban:
gyerek_osztó = RecursiveCharacterTextSplitter ( chunk_size = 400 )vektortár = Chroma (
gyűjtemény_neve = 'teljes_dokumentumok' ,
beágyazási_függvény = OpenAIEMbeddings ( )
)
bolt = InMemoryStore ( )
vizsla = ParentDocumentRetriever (
vektortár = vektortár ,
orvosi boltban = bolt ,
gyerek_osztó = gyerek_osztó ,
)
Most hívja meg az add_documents() metódust a retriever segítségével, hogy a retriever a dokumentumokhoz jusson:
vizsla. add_documents ( dok , azonosítók = Egyik sem )A következő kód kibontja a feltöltött fájlok adatbázisában tárolt dokumentumok beágyazásait:
lista ( bolt. hozam_kulcsok ( ) )
Miután megkapta a dokumentumok beágyazását, hívja meg a hasonlóság_search() metódust a lekérdezéssel, hogy a kis darabokat megkapja a dokumentumból:
sub_docs = vektortár. Hasonlóság_keresés ( 'igazságügyi breyer' )Hívja meg a print() metódust az előző kódban meghívott darabok megjelenítéséhez a lekérdezés alapján:
nyomtatás ( sub_docs [ 0 ] . page_content )
Hívja meg a teljes retriever() függvényt az adatbázisban tárolt összes token lekéréséhez a következő kóddal:
letöltött_dokumentumok = vizsla. get_relevant_documents ( 'igazságügyi breyer' )Az összes dokumentum kinyomtatása hatalmas időt és feldolgozási energiát igényelne, ezért egyszerűen csak annyi dokumentumot kérjen le, amennyit korábban letöltött:
csak ( letöltött_dokumentumok [ 0 ] . page_content )
5. lépés: Nagyobb darabok lekérése
Ez a lépés nem érinti a teljes dokumentumot; azonban egy nagyobb mókust venne ki a dokumentumból, és egy kisebb darabot kapna le belőle:
parent_splitter = RecursiveCharacterTextSplitter ( chunk_size = 2000 )gyerek_osztó = RecursiveCharacterTextSplitter ( chunk_size = 400 )
vektortár = Chroma ( gyűjtemény_neve = 'split_parents' , beágyazási_függvény = OpenAIEembeddings ( ) )
bolt = InMemoryStore ( )
Állítsa be a retrievert úgy, hogy a kisebb tokent kapja meg a „ vektortár ” változó:
vizsla = ParentDocumentRetriever (vektortár = vektortár ,
orvosi boltban = bolt ,
gyerek_osztó = gyerek_osztó ,
parent_splitter = parent_splitter ,
)
Hívja a retrievert, hogy a nagyobb darabokat a vektortárakból szerezze be a dok változó a függvény argumentumában:
vizsla. add_documents ( dok )A dokumentumok hosszát a dok változó az alábbi paranccsal:
csak ( lista ( bolt. hozam_kulcsok ( ) ) )
Egyszerűen vegyen ki egy kisebb darabot egy nagyobbból, mivel az előző képernyőkép azt mutatja, hogy 23 dokumentum van a vektortárban tárolva. A lekérdezés a releváns adatok lekérésére szolgál a Hasonlóság_keresés() módszer az adatok lekérésére a vektortárból:
sub_docs = vektortár. Hasonlóság_keresés ( 'igazságügyi breyer' )Nyomtassa ki a kisebb darabokat az előző kódban említett lekérdezéssel, hogy megjelenjenek a képernyőn:
nyomtatás ( sub_docs [ 0 ] . page_content )
Most használja a retrievert az adatbázisban tárolt teljes adatkészleten, a lekérdezést a függvény argumentumaként:
letöltött_dokumentumok = vizsla. get_relevant_documents ( 'igazságügyi breyer' )Nézze meg az adatbázisban létrehozott és tárolt teljes darabok hosszát:
csak ( letöltött_dokumentumok [ 0 ] . page_content )
Nem tudjuk megjeleníteni az összes darabot, de az első 0 indexszámú darab a következő kóddal jelenik meg:
nyomtatás ( letöltött_dokumentumok [ 0 ] . page_content
Ez minden a szülő dokumentum-visszakereső használatának folyamatáról szól a LangChainben.
Következtetés
A szülő dokumentum-visszakereső használatához a LangChainben egyszerűen telepítse a modulokat, és állítsa be az OpenAI környezetet az API-kulcsával. Ezt követően importálja a szükséges könyvtárakat a LangChainből a szülő dokumentum-visszakereső használatához, majd töltse be a modell dokumentumait. A felhasználó használhatja a szülő dokumentumokat a teljes dokumentumként vagy a nagy darabként, és a lekérdezés segítségével kaphat egy kisebb részt. Ez a bejegyzés részletesen bemutatja a szülő dokumentum-visszakereső használatának folyamatát a LangChainben.