Как да използвате Parent Document Retriever в LangChain?

Kak Da Izpolzvate Parent Document Retriever V Langchain



Рамката LangChain позволява на разработчиците да изграждат големи езикови модели, които могат да разбират и генерират текст на естествен език. Моделите LangChain са обучени върху огромно количество данни, така че моделът да може да разбере езика, като съхранява данните във векторни хранилища. Той също така позволява на потребителя да създава ретривъри, които могат да извличат данни от базата данни или векторни хранилища с всички данни, съхранени за модела.

Тази публикация ще демонстрира процеса на използване на родителския инструмент за извличане на документи в LangChain.

Как да използвате Parent Document Retriever в LangChain?

Извличането на родителски документи в LangChain може да се използва чрез разделяне на документите на по-малки части, така че да не губят значението си в моментите на вграждане. Може да се каже, че родителският документ е целият документ или по-голямата част, от която се извличат по-малките части.







За да научите процеса на използване на родителския инструмент за извличане на документи в LangChain, просто вижте това ръководство:



Стъпка 1: Инсталирайте модули



Първо започнете да използвате родителския инструмент за извличане на документи, като инсталирате рамката LangChain с помощта на командата pip:





pip инсталирайте langchain

Инсталирайте модула за база данни Chroma, за да запазите вгражданията на документа и да извлечете данни от него:



pip инсталирайте chromadb

За да инсталирате tiktoken, който е токенизатор, който получава токените на документа чрез създаване на малки парчета:

pip инсталирайте tiktoken

Вземете модула OpenAI, като изпълните следната команда в бележника на Python, за да получите неговите зависимости и библиотеки:

pip инсталирайте openai

Стъпка 2: Настройка на среда и качване на данни

Следващата стъпка е да настройте средата използвайки API ключа от акаунта на OpenAI:

импортиране Вие
импортиране getpass

Вие . приблизително [ „OPENAI_API_KEY“ ] = getpass . getpass ( „API ключ на OpenAI:“ )

Сега качете документите от локалната система след импортиране на библиотеката с файлове и след това извикайте метода upload():

от google. ET AL импортиране файлове
качен = файлове. качване ( )

Стъпка 3: Импортирайте библиотеки

Следващата стъпка съдържа кода за импортиране на необходимите библиотеки за използване на извличащите родителски документи с помощта на рамката LangChain:

от Langchain. ретривъри импортиране ParentDocumentRetriever
от Langchain. векторни магазини импортиране Chroma
от Langchain. вграждания импортиране OpenAIEmbeddings
от Langchain. текстов_разделител импортиране RecursiveCharacterTextSplitter
от Langchain. съхранение импортиране InMemoryStore
от Langchain. зареждащи_документи импортиране TextLoader

Заредете документа, за да създадете ретривъра, като използвате методите TextLoader() с пътя на файловете:

товарачи = [
TextLoader ( „Data.txt“ ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
документи = [ ]
за л в товарачи:

Стъпка 4: Извличане на пълни документи

След като документите/файловете са заредени в модела, просто изградете вгражданията на документите и ги съхранете във векторните хранилища:

дете_сплитер = RecursiveCharacterTextSplitter ( chunk_size = 400 )

векторен магазин = Chroma (
колекция_име = 'пълни_документи' ,
функция_вграждане = OpenAIEmbeddings ( )
)

магазин = InMemoryStore ( )
ретривър = ParentDocumentRetriever (
векторен магазин = векторен магазин ,
docstore = магазин ,
дете_сплитер = дете_сплитер ,
)

Сега извикайте метода add_documents(), като използвате ретривъра, за да го получите до документите:

ретривър. add_documents ( документи , идентификатори = Нито един )

Следният код извлича вгражданията на документите, които са били съхранени в базата данни за качените файлове:

списък ( магазин. yield_keys ( ) )

След като получите вгражданията на документите, извикайте метода similarity_search() със заявката, за да получите малките парчета от документа:

под_документи = векторен магазин. търсене на сходство ( 'правосъдие брейър' )

Извикайте метода print(), за да покажете парчетата, извикани в предишния код въз основа на заявката:

печат ( под_документи [ 0 ] . page_content )

Извикайте пълната функция retriever(), за да получите всички токени, съхранени в базата данни, като използвате следния код:

извлечени_документи = ретривър. get_relevant_documents ( 'правосъдие брейър' )

Отпечатването на всички документи ще отнеме огромно време и мощност за обработка, така че просто вземете дължината на документите, извлечени преди това:

само ( извлечени_документи [ 0 ] . page_content )

Стъпка 5: Извличане на по-големи парчета

Тази стъпка няма да отнеме целия документ; обаче ще вземе по-голям бурундук от документа и ще извлече по-малка част от него:

родителски_сплитер = RecursiveCharacterTextSplitter ( chunk_size = 2000 г )
дете_сплитер = RecursiveCharacterTextSplitter ( chunk_size = 400 )
векторен магазин = Chroma ( колекция_име = 'split_parents' , функция_вграждане = OpenAIEmbeddings ( ) )
магазин = InMemoryStore ( )

Конфигурирайте ретривъра, за да получите по-малкия токен от огромния набор от данни, съхранени в „ векторен магазин ” променлива:

ретривър = ParentDocumentRetriever (
векторен магазин = векторен магазин ,
docstore = магазин ,
дете_сплитер = дете_сплитер ,
родителски_сплитер = родителски_сплитер ,
)

Обадете се на ретривъра, за да вземете по-големите парчета от векторните магазини, като използвате документи променлива в аргумента на функцията:

ретривър. add_documents ( документи )

Получете дължината на тези документи от документи променлива чрез командата по-долу:

само ( списък ( магазин. yield_keys ( ) ) )

Просто вземете по-малка част от по-голяма, тъй като предишната екранна снимка показва, че във векторното хранилище има 23 документа. Заявката се използва за получаване на съответните данни с помощта на подобни_търсене() метод за извличане на данни от векторното хранилище:

под_документи = векторен магазин. търсене на сходство ( 'правосъдие брейър' )

Отпечатайте по-малките парчета, като използвате заявката, спомената в предишния код, за да ги покажете на екрана:

печат ( под_документи [ 0 ] . page_content )

Сега използвайте ретривъра върху пълния набор от данни, съхранен в базата данни, като използвате заявката като аргумент на функцията:

извлечени_документи = ретривър. get_relevant_documents ( 'правосъдие брейър' )

Вземете дължината на пълните парчета, създадени и съхранени в базата данни:

само ( извлечени_документи [ 0 ] . page_content )

Не можем да покажем всички части, но първата част с индекс номер 0 се показва с помощта на следния код:

печат ( извлечени_документи [ 0 ] . page_content

Това е всичко за процеса на използване на родителския инструмент за извличане на документи в LangChain.

Заключение

За да използвате основния инструмент за извличане на документи в LangChain, просто инсталирайте модулите и настройте средата OpenAI, като използвате нейния API ключ. След това импортирайте необходимите библиотеки от LangChain за използване на родителския инструмент за извличане на документи и след това заредете документите за модела. Потребителят може да използва родителските документи като целия документ или голямата част и да получи по-малка част с помощта на заявката. Тази публикация разработи подробно процеса на използване на родителския инструмент за извличане на документи в LangChain.