כיצד להשתמש ב-Pent Document Retriever ב-LangChain?

Kyzd Lhstms B Pent Document Retriever B 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():

מ גוגל. ET AL יְבוּא קבצים
הועלה = קבצים. להעלות ( )

שלב 3: ייבוא ​​ספריות

השלב הבא מכיל את הקוד לייבוא ​​הספריות הנדרשות לשימוש במחזירי מסמכי האב באמצעות מסגרת LangChain:

מ langchain. רטריברים יְבוּא ParentDocumentRetriever
מ langchain. חנויות וקטורים יְבוּא Chroma
מ langchain. הטבעות יְבוּא OpenAIEbeddings
מ langchain. text_splitter יְבוּא מפצל טקסט רקורסיבי
מ langchain. אִחסוּן יְבוּא InMemoryStore
מ langchain. טוען_מסמכים יְבוּא TextLoader

טען את המסמך כדי לבנות את השחזור באמצעות שיטות TextLoader() עם הנתיב של הקבצים:

מעמיסים = [
TextLoader ( 'Data.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
מסמכים = [ ]
ל ל ב מעמיסים:

שלב 4: אחזור מסמכים שלמים

לאחר שהמסמכים/קבצים נטענו למודל, פשוט בנה את ההטמעות של המסמכים, ואחסן אותם בחנויות הווקטור:

ילד_מפצל = מפצל טקסט רקורסיבי ( chunk_size = 400 )

vectorstore = Chroma (
collection_name = 'מסמכים_מלאים' ,
embedding_function = OpenAIEbeddings ( )
)

חנות = InMemoryStore ( )
מחזיר = ParentDocumentRetriever (
vectorstore = vectorstore ,
דוקטורט = חנות ,
ילד_מפצל = ילד_מפצל ,
)

כעת, קרא למתודה add_documents() באמצעות הרטריבר כדי להעביר את המאחזר למסמכים:

מחזיר. add_documents ( מסמכים , id = אף אחד )

הקוד הבא מחלץ את ההטמעות של המסמכים שנשמרו במסד הנתונים עבור הקבצים שהועלו:

רשימה ( חנות. מפתחות_תשואה ( ) )

לאחר קבלת ההטמעות של המסמכים, קרא לשיטת similarity_search() עם השאילתה כדי לקבל את הנתחים הקטנים מהמסמך:

sub_docs = vectorstore. חיפוש_דמיון ( 'ברייר צדק' )

קרא למתודה print() כדי להציג את הנתחים שנקראו בקוד הקודם בהתבסס על השאילתה:

הדפס ( sub_docs [ 0 ] . תוכן הדף )

קרא לפונקציה complete the retriever() כדי לקבל את כל האסימונים המאוחסנים במסד הנתונים באמצעות הקוד הבא:

retrieved_docs = מחזיר. קבל_מסמכים_רלוונטיים ( 'ברייר צדק' )

הדפסת כל המסמכים תדרוש זמן רב וכוח עיבוד, אז פשוט קבל את אורך המסמכים שאוחזרו קודם לכן:

רק ( retrieved_docs [ 0 ] . תוכן הדף )

שלב 5: אחזור נתחים גדולים יותר

שלב זה לא ייקח את כל המסמך; עם זאת, זה ייקח chipmunk גדול יותר מהמסמך ויביא ממנו נתח קטן יותר:

הורה_מפצל = מפצל טקסט רקורסיבי ( chunk_size = 2000 )
ילד_מפצל = מפצל טקסט רקורסיבי ( chunk_size = 400 )
vectorstore = Chroma ( collection_name = 'הורים_מפוצלים' , embedding_function = OpenAIEbeddings ( ) )
חנות = InMemoryStore ( )

הגדר את השחזור כדי לקבל את האסימון הקטן יותר ממאגר הנתונים העצום המאוחסן ב' vectorstore משתנה:

מחזיר = ParentDocumentRetriever (
vectorstore = vectorstore ,
דוקטורט = חנות ,
ילד_מפצל = ילד_מפצל ,
הורה_מפצל = הורה_מפצל ,
)

התקשר לרטריבר כדי לקבל את הנתחים הגדולים יותר מחנויות הוקטורים באמצעות ה מסמכים משתנה בארגומנט של הפונקציה:

מחזיר. add_documents ( מסמכים )

קבל את אורך המסמכים הללו מה- מסמכים משתנה באמצעות הפקודה הבאה:

רק ( רשימה ( חנות. מפתחות_תשואה ( ) ) )

כל שעליך לעשות הוא לקבל נתח קטן יותר מאשר אחד גדול יותר, שכן צילום המסך הקודם מציג שיש 23 מסמכים המאוחסנים בחנות הוקטורים. השאילתה משמשת כדי לקבל את הנתונים הרלוונטיים באמצעות ה similarity_search() שיטה לאחזור נתונים מחנות הווקטור:

sub_docs = vectorstore. חיפוש_דמיון ( 'ברייר צדק' )

הדפס את הנתחים הקטנים יותר באמצעות השאילתה שהוזכרה בקוד הקודם כדי להציג אותם על המסך:

הדפס ( sub_docs [ 0 ] . תוכן הדף )

כעת, השתמש באחזור במערך הנתונים המלא המאוחסן במסד הנתונים באמצעות השאילתה כארגומנט של הפונקציה:

retrieved_docs = מחזיר. קבל_מסמכים_רלוונטיים ( 'ברייר צדק' )

קבל את האורך של הנתחים השלמים שנוצרו ומאוחסנים במסד הנתונים:

רק ( retrieved_docs [ 0 ] . תוכן הדף )

אנחנו לא יכולים להציג את כל הנתחים, אבל הנתח הראשון עם מספר האינדקס 0 מוצג באמצעות הקוד הבא:

הדפס ( retrieved_docs [ 0 ] . תוכן הדף

זה הכל לגבי תהליך השימוש בשחזור המסמכים האב ב-LangChain.

סיכום

כדי להשתמש באחזור המסמכים האב ב-LangChain, פשוט התקן את המודולים והגדר את סביבת OpenAI באמצעות מפתח ה-API שלו. לאחר מכן, ייבא את הספריות הנדרשות מ-LangChain לשימוש באחזור המסמכים האב, ולאחר מכן טען את המסמכים עבור המודל. המשתמש יכול להשתמש במסמכי אב ככל המסמך או הנתח הגדול ולקבל נתח קטן יותר באמצעות השאילתה. פוסט זה הרחיב את תהליך השימוש בשחזור המסמכים האב ב-LangChain.