פיתוח מערכת חיפוש באיכות של Google באמצעות Vertex AI

1. לפני שמתחילים

לפני שממשיכים בקודלאב, חשוב לשים לב לכמה דברים.

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

  • הבנה בסיסית של LLM
  • הבנה בסיסית של מערכות RAG

מה תלמדו

  • איך יוצרים מנוע חיפוש באיכות Google שיכול לענות על השאלות שלכם על סמך הנתונים שאתם מעלים
  • איך יוצרים מאגר נתונים ב-Vertex AI
  • איך יוצרים סוכני Vertex AI
  • איך להשתמש ב-CloudRun לפריסת האפליקציה

מה צריך להכין

  • חשבון Google Cloud
  • פרויקט ב-Google Cloud
  • סביבת פיתוח משולבת (IDE) עם מסוף

מבוא

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

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

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

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

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

ריכזנו כאן כמה דוגמאות לשימוש ב-RAG בפועל:

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

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

ב-Codelab הזה, נפתח מערכת RAG שיכולה לענות על השאלות שלך עם הקורפוס שסופק על ידך. פלטפורמת RAG מוכנה לשימוש שנקראת Vertex AI Search/Agent Builder עוזרת לכם לפתח במהירות מערכות RAG, וכך חוסכת את המאמץ הידני של איסוף המסמכים, הניתוח, חלוקת המסמכים למקטעים, יצירת הטמעות (embeddings), הרחבת שאילתות, אחזור מועמדים ורישום דירוג. מערכת RAG שפועלת מחוץ לאריזה עוזרת לך להתחיל לעבוד במהירות, אבל Google Cloud מספק גם ממשקי API נפרדים לכל תהליך לבניית מערכות RAG משלכם שעוזרות בכוונון עדין של מערכות ה-RAG בהתאם לדרישות העסקיות שלכם.

מה תפַתחו

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

בנוסף, תקבלו הבנה טובה יותר של האופן שבו משתמשים ב-Vertex AI Search APIs כדי ליצור את הארכיטקטורה הזו של RAG ב-Google Cloud. בנוסף, תלמדו איך לפרוס את האפליקציה הזו עם ארכיטקטורת RAG (עם חזית וצד לקוח) ב-CloudRun, פלטפורמה ללא שרת לפריסה של אפליקציות כקונטיינרים ב-Google Cloud.

2d055ded874603a6.png

איך פועלת האפליקציה

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

2. הגדרת הסביבה

  1. בדף לבחירת הפרויקט במסוף Google Cloud, בוחרים או יוצרים פרויקט ב-Google Cloud.
  2. מוודאים שהחיוב מופעל בפרויקט שלכם ב-Google Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud. כדי לגשת אליו, לוחצים על Activate Cloud Shell בחלק העליון של מסוף Google Cloud.

1829c3759227c19b.png

  1. אחרי שמתחברים ל-Cloud Shell, בודקים שכבר בוצע אימות ושהמזהה של הפרויקט מוגדר כפרויקט באמצעות הפקודה הבאה:
gcloud auth list
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה של gcloud יודעת על הפרויקט שלכם.
gcloud config list project
  1. אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>
  1. צריך לוודא שממשקי ה-API הבאים מופעלים:
  • Cloud Run
  • Vertex AI
  • Cloud Storage

האפשרות החלופית לשימוש בפקודה gcloud היא להיכנס למסוף דרך הקישור הזה. במסמכי העזרה מפורטות הפקודות של gcloud והשימוש בהן.

3. שלב 1: יצירת קטגוריה ב-GCP

  • נכנסים למסוף ובסרגל החיפוש מקלידים Cloud Storage.
  • בוחרים את Cloud Storage מהתוצאות המוצעות. 21d2bc910e71f7ec.png
  • לוחצים על 'Create Bucket'.

adf5c0382f6c3540.png

  • נותנים שם ייחודי לקטגוריה ברמת ה-global
  • לוחצים על 'המשך'.
  • בקטע Location Type (סוג מיקום), בוחרים באפשרות Multi-Region (מספר אזורים).
  • בתפריט הנפתח, מקפידים לבחור באפשרות us (multiple regions in United States)

731aead7d8497725.png

  • לוחצים על Create Bucket

f7ac409ed9c4af21.png

4. שלב 2: יצירת Vertex AI Datastore

  • בסרגל החיפוש בדף מסוף ה-CLI, מקלידים 'Vertex AI Agent Builder'.
  • בוחרים את המוצר הראשון, Agent Builder.

c4a67b92bb7900e3.png

  • בדף ה-Agent Builder, לוחצים על 'מאגרי נתונים' כפי שמוצג בסרגל הניווט הימני.

f86f67d344d398fb.png

  • לוחצים על 'יצירת מאגר נתונים'

e64e771f33543f46.png

  • בחירת Cloud Storage בתור מאגר הנתונים
  • לוחצים על 'בחירה' מתחת לסמל של Cloud Storage

3a8d22888e7eedc2.png

  • בכרטיסייה שמתחת לאפשרות "תיקייה", לוחצים על הלחצן "עיון"
  • בוחרים את הקטגוריה שיצרתם בשלב 1.
  • באפשרויות הבאות, חשוב לבחור באפשרות 'מסמכים לא מובְנים מקושרים (JSONL עם מטא-נתונים)'.
  • לוחצים על 'המשך'.

13876b5d12dbe1fb.png

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

618b7a456fbffad4.png

בראוני:

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

38471c1d3411610d.png

5. שלב 3: יצירת סוכן

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

ae5294e33f63567c.png

  • חשוב לוודא שבחרתם באפשרות 'כללי' בקטע 'תוכן'. אפשר גם לבחור באפשרות 'מדיה' או 'המלצות' על סמך מאגר הנתונים וסוג הנתונים והמערכות שרוצים ליצור.
  • צריך להקפיד להפעיל את התכונות Enterprise Edition וגם את Advanced LLM
  • צריך לציין את שם הבקשה
  • יש לציין את שם החברה

f8a41c9751f7a8d3.png

  • חשוב לבחור את האזור כ'גלובלי'.
  • לוחצים על 'המשך' ed17b18e094ba59a.png
  • במסך הבא, בוחרים את מאגר הנתונים שיצרתם בשלב 2.
  • לוחצים על 'יצירה'.

bc77006e0025ae9e.png

6. שלב 4: מציגים את האפליקציה ב-Docker

  • פותחים את מסוף Google Cloud
  • משכפלים את המאגר <sample_repository_link> באמצעות הפקודה הבאה

git clone https://github.com/kkrishnan90/vertex-ai-search-agent-builder-demo

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

cd vertex-ai-search-agent-builder-demo

  • מבנה התיקיות
  • הקצה העורפי – כאן תתבצע הטמעה של API מבוסס-Python שתעזור ליצור נקודות קצה מסוג REST שאפשר יהיה לבצע איתן אינטראקציה מצד הלקוח.
  • חזית – כאן תהיה אפליקציה מבוססת-React שתציג את ממשק המשתמש. היא תכלול גם את הקריאות הדרושות ברמת האפליקציה לקצה העורפי דרך נקודות קצה למנוחה
  • Docker – הקובץ מכיל את כל הפקודות הרלוונטיות ליצירת קונטיינר Docker
  • בתיקיית השורש של ספריית המאגר, מריצים את הפקודה הבאה שתעזור ליצור קובץ אימג' של Docker (הערה: חשוב להקפיד להשתמש בדגל - - platform כשבונים קונטיינרים של Docker ב-Macbooks שמשתמשים בצ'יפים של Apple Silicon כמו M1, M2 וכו'. הדגל הזה לא נחוץ אם אתם מפתחים באמצעות מחשב Windows או אם הארכיטקטורה של המעבד (CPU) מבוססת על Intel)

docker build --platform linux/amd64 -t your-image-name .

  • אחרי שה-build של קונטיינר Docker מסתיים בהצלחה, מריצים את הפקודה הבאה כדי לתייג את הקונטיינר בתגים הנכונים, כדי לוודא שאתם מספקים גרסה של קובץ האימג'. חשוב לזכור: יכולות להיות כמה גרסאות לאפליקציה, ולכן מספר גרסאות הן תגים בקונטיינרים של Docker. מבחינת devops, מומלץ תמיד להשתמש בגרסה היציבה האחרונה.

docker tag your-image-name REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

  • אחרי הוספת התג לקובץ האימג' בקונטיינר של Docker, נמשיך בדחיפה של קובץ האימג' אל Google Artifact Registry‏ (GAR). GAR היא פלטפורמה מנוהלת לחלוטין של Google שבעזרתה אפשר לנהל קונטיינרים של Docker ולנהל את הגרסאות שלהם. מריצים את הפקודה הבאה כדי לדחוף את הקונטיינר המתויג שלמעלה ל-GAR. מידע נוסף זמין בקישור הבא: https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling

docker push REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

7. שלב 5: פורסים את האפליקציה ב-Cloud Run

  • מצמצמים את מסוף ה-Terminal. בסרגל החיפוש של מסוף Google Cloud, מחפשים את Cloud Run.
  • לוחצים על המוצר המוצע של Cloud Run.

592103eb61c16738.png

  • לוחצים על 'יצירת שירות'
  • בדף הבא, מוודאים שבוחרים באפשרות 'פריסה של גרסה אחת מקובץ אימג' קיים בקונטיינר'.
  • למטה, לוחצים על 'בחירה'.
  • עכשיו יוצג סרגל ניווט בצד שמאל.
  • מוודאים שהכרטיסייה Artifact Registry נבחרה.
  • חשוב לוודא שהפרויקט נבחר בצורה נכונה
  • לוחצים על החץ כדי להרחיב את האקורדיון בקישור של קובץ האימג' בקונטיינר שנפרס
  • בוחרים את תג מאגר התגים ומרחיבים אותו (תמיד בוחרים את התגים האחרונים שנפרסו – עם התגים העדכניים ביותר, למשל v1, v2 וכו')
  • יש ללחוץ על תמונת המאגר שמוצגת מתחת לשם של תג המאגר

aac35d55d7dd874e.png

  • באזור Configure (הגדרה)
  • נותנים שם לשירות עבור האפליקציה ב-Cloud Run (שם השירות יהיה חלק מכתובת ה-URL כשתפרסו את האפליקציה ב-Cloud Run)
  • בוחרים את האזור המתאים (במקרה הזה us-central1 או כל דבר שתרצו)
  • בקטע 'אימות'
  • מוודאים שהאפשרות 'לאפשר הפעלות לא מאומתות' מסומנת
  • בקטע 'הקצאה ותמחור של מעבד (CPU)'
  • בוחרים באפשרות 'המעבד מוקצה רק במהלך עיבוד הבקשה'
  • משנים את Service Auto Scaling ל-1 (למטרות ייצור, מומלץ להפעיל מספר מינימלי של מכונות כדי לטפל בנפח התנועה היומי.אפשר גם להשאיר את הערך 0, כלומר אפס).
  • יש להגדיר את האפשרות Ingress Control (בקרת תעבורת נתונים נכנסת) בתור 'הכול' כדי לאפשר לתנועה מהאינטרנט לגשת לאפליקציה
  • לוחצים על 'יצירה'.
  • הפעולה הזו תפרס מכונה של Cloud Run, והקצאת המכונה תימשך כמה דקות.

b8b147265b8d457b.png

  • לאחר הפריסה, תוכלו לראות את כתובת ה-URL שגלויה לכולם וממנה תוכלו לגשת לאפליקציית האינטרנט.

1dfdb007c52581a1.png

8. איך הכול עובד

  • בדף הבית של האפליקציה, לוחצים על הלחצן 'העלאת מסמך'.
  • העלאת קובץ ה-PDF
  • אחרי שההעלאה תושלם
  • לוחצים על סרגל החיפוש בחלק העליון של דף האינטרנט.
  • מתחילים לחפש שאילתות שקשורות למסמך שהועלו
  • אחרי שמקלידים את השאילתה ולוחצים על 'חיפוש', אמורות להופיע כל התשובות הרלוונטיות מהמסמך שהעליתם.
  • אפשר להתנסות בקוד הקצה העורפי ולהוסיף עוד הגדרות, כמו:
  • הוספת קטעי טקסט
  • הוספת פלחים של חילוץ נתונים
  • הוספת תשובות
  • התאמת התוצאות המובילות כדי לעזור ל-LLM לסכם את התשובה (משהו כמו 'סקירה כללית על AI' בחיפוש Google)
  • כתוסף, ניתן גם להוסיף תגי מטא-נתונים במהלך העלאת המסמך. כך תוכלו ליצור מאפיינים וקטגוריות שניתנות לסינון.

9. הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בקודלאב הזה, עליכם לפעול לפי השלבים הבאים:

  1. במסוף Google Cloud, נכנסים לדף Manage resources:
  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
  4. לחלופין, אפשר לעבור אל Cloud Run במסוף, לבחור את השירות שפרסמתם ולמחוק אותו.

10. מזל טוב

מעולה! בנית בהצלחה מערכת RAG מהירה מחוץ לאריזה תוך שימוש במודלים המתקדמים של Google המבוססים על Google, במטרה לספק תוצאות איכותיות של Google לשאילתות החיפוש שלך. סדנת הקוד הזו מיועדת למטרות הדגמה בלבד. צריך להגדיר אמצעי אבטחה נוספים ומכשולים למניעת טעויות בתרחישים לדוגמה בסביבת הייצור. הקישור למאגר המלא נמצא כאן. בעזרת Google Cloud וב-5 שלבים בלבד, אנחנו יכולים ליצור מערכת RAG מקצה לקצה שיכולה לספק לכם תוצאות באיכות Google תוך כמה דקות. עם ההתפתחות של בינה מלאכותית גנרטיבית ומודלים גדולים של שפה (LLM), פיתוח של מערכות RAG כאלה עוזר לנו גם להימנע ממלכודות של תגובות לא תואמות נתונים (hallucination) ובלי ציטוט של מידע שלא מצוטט.

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