Тази публикация ще демонстрира процеса на използване на родителския инструмент за извличане на документи в 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.