בניית אפליקציות RAG עם Apache Cassandra, Python, ו-Ollama

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

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

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

הדיאגרמה הזו מספקת סקירה קונספטואלית של השוואת וקטורים 

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

במאמר הזה, ניישם את השימוש במסד נתונים וקטורי ומודל ליצירת הטמעות באפליקציה ב-Python. אם אתה קורא את המונח הזה בפעם הראשונה או ה-n, אתה רק צריך כלים לעבוד, ולא נדרש מנוי לכל כלי. אתה יכול פשוט להוריד את הכלים ולהתחיל.

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

  • מערכת הפעלה – Ubuntu Linux
  • מסד נתונים וקטורי – Apache Cassandra
  • מודל הטמעה – nomic-embed-text
  • שפת תכנות – Python

יתרונות מרכזיים של טכנולוגיה זו

  • קוד פתוח
  • נתונים מבודדים כדי לעמוד בסטנדרטים של תאימות נתונים

This diagram provides a high-level dependency architecture of the system

מדריך יישום

אתה יכול ליישם ולעקוב אם התנאים המוקדמים מתקיימים; אחרת, קרא עד הסוף כדי להבין את המונחים.

דרישות מוקדמות

הגדרת מודל Ollama

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

באולאמה, נגרום למודל nomic-embed-text ליצירת אימבדינגים.

הרץ בשורת פקודה:

Plain Text

 

מודל זה יוצר אימבדינגים בגודל של 768 וקטורים.

התקן וסקריפטים של Apache Cassandra

קסנדרה הוא מסד נתונים NoSQL קוד פתוח המיועד לעבודה עם כמות עבודה גבוהה שדורשת התאמה גבוהה כפי צרכי התעשייה. לאחרונה, היא הוסיפה תמיכה בחיפוש וקטור בגרסה 5.0 שתסייע במקרה השימוש שלנו ב-RAG.

הערה: קסנדרה דורשת מערכת ההפעלה Linux כדי לעבוד; ניתן גם להתקין אותה כתמונת דוקר.

התקנה

הורד את Apache Cassandra מ-https://cassandra.apache.org/_/download.html.

הגדר את קסנדרה בנתיב שלך.

הפעל את השרת על ידי הרצת הפקודה הבאה בשורת הפקודה:

Plain Text

 

טבלה

פתח טרמינל חדש של Linux וכתוב cqlsh ; זה יפתח את המסד שדות של שפת שאילתת Cassandra. כעת, בצע את הסקריפטים הבאים ליצירת מרחב המפתחות של embeddings, טבלת document_vectors, ואת האינדקס הנדרש edv_ann_index כדי לבצע חיפוש וקטורי. 

SQL

 

הערה: content_vector VECTOR <FLOAT, 768> אחראי על אחסון של וקטורים באורך של 768 שנוצרים על ידי המודל.  

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

קוד Python

שפת התכנות הזו ללא ספק אינה זקוקה להצגה; זה קל לשימוש ונהנה על ידי התעשייה עם תמיכה קהילתית חזקה.

סביבת עבודה וירטואלית

הגדרת סביבת עבודה וירטואלית:

Plain Text

 

הפעלת סביבת עבודה וירטואלית:

Plain Text

 

חבילות

הורד חבילת Datastax Cassandra:

Plain Text

 

הורד חבילת requests:

Plain Text

 

קובץ

צור קובץ בשם app.py.

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

Python

 

כעת, הפעל את הקובץ הזה באמצעות שורת הפקודה בסביבת העבודה הוירטואלית:

Plain Text

 

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

SQL

 

זה יחזיר 10 מסמכים שהוכנסו למסד הנתונים, כפי שנראה בצילום המסך למטה.

milestones 2: סיימנו עם הגדרת הנתונים במסד הנתונים הווקטורי שלנו.

עכשיו, נכתוב קוד כדי לשאול מסמכים בהתבסס על דמיון קוסיני. דמיון קוסיני הוא מכפלה סקלרית של שני ערכי וקטור. הנוסחה שלו היא A.B / |A||B|. דמיון קוסיני זה נתמך פנימית על ידי אפאצ'י קסנדרה, ועוזר לנו לחשב הכל במסד הנתונים ולנהל נתונים גדולים ביעילות.

הקוד למטה הוא ברור מאליו; הוא שולף את שלוש התוצאות העליונות בהתבסס על דמיון קוסיני באמצעות ORDER BY <שם העמודה> ANN OF <text_vector> ומחזיר גם את ערכי הדמיון הקוסיני. כדי להפעיל קוד זה, עלינו לוודא שהאינדוקסינג חל על עמודת הווקטור הזו.

Python

 

זכור להגיב על קוד ההכנסה:

Python

 

עכשיו, הפעל את הקוד בפייתון באמצעות python app.py.

נקבל את הפלט למטה:

Plain Text

 

אתה יכול לראות שהדמיון הקוסיני של "דוכני האוכל ברחוב בבנגקוק הגישו פד תאי לוהט שהשאיר את וארון עם זיכרון חמוץ של האנרגיה התוססת של העיר." הוא 0.8205469250679016, שזה ההתאמה הקרובה ביותר.

milestone סופי: יישמנו את החיפוש RAG.

יישומים ארגוניים

אפאצ'י קסנדרה

לעסקים, אנו יכולים להשתמש ב-Apache Cassandra 5.0 מספקי שירות ענן פופולריים כמו Microsoft Azure, AWS, GCP ועוד.

Ollama

ממותג זה דורש VM התואם עם GPU מופעל על ידי Nvidia להפעלת מודלים ביצועים גבוהים, אך לא נדרשים VM גבוהי סוגת עבור מודלים המשמשים ליצירת וקטורים. תלוי בדרישות התעבורה, ניתן להשתמש במספר VMs או בשירות AI יוצר כלשהו כמו Open AI, Anthropy וכו', תלוי איזה עלות סופית נמוכה יותר לצורך התפשרות או צרכים של שלטון נתונים.   

VM של Linux

ניתן לשלב את Apache Cassandra ואת Ollama ולארח אותם ב-VM אחת של Linux אם מקרה השימוש אינו מחייב שימוש גבוה על מנת להוריד את עלות הרכישה הכוללת או לצרכי שלטון נתונים.

סיכום

ניתן בקלות לבנות אפליקציות RAG על ידי שימוש במערכת הפעלה Linux, ב-Apache Cassandra, בהטבעת מודלים (nomic-embed-text) המשמשת דרך Ollama, וב-Python עם ביצועים טובים ללא צורך במינוי ענן נוסף או שירותים בנוחותה של מכונות/שרתים שלנו.

אך, מאוד מומלץ לארח על מכונת וירטואלית בשרת(ים) או לבחור במינוי לענן לצורך התרחבות כיישום עסקי המקיים ארכיטקטורות התרחבותיות. במקרה זה, אפאצ'י, קסנדרה הוא רכיב מרכזי לביצוע העבודה הכבדה של אחסון הווקטורים שלנו והשוואת הווקטורים ושרת אולאמה ליצירת התמסכות של וקטורים.

זהו! תודה על קריאת המאמר עד הסוף.

Source:
https://dzone.com/articles/build-rag-apps-apache-cassandra-python-ollama