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

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

כמה דברים שחשוב לדעת לפני שממשיכים את ה-Codelab הזה.

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

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

מה תלמדו

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

מה צריך להכין

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

מבוא

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

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

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

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

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

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

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

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

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

מה תפַתחו

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

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

2d055ded874603a6.png

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

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

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

  1. במסוף Google Cloud, בדף בורר הפרויקטים, בוחרים או יוצרים פרויקט ב-Google Cloud.
  2. צריך לוודא שהחיוב מופעל בפרויקט שלכם ב-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

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

731aead7d8497725.png

  • לוחצים על Create Bucket

f7ac409ed9c4af21.png

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

  • בסרגל החיפוש בדף המסוף, מקלידים Vertex AI Agent Builder
  • בוחרים את המוצר הראשון, Agent Builder (בונה הסוכנים).

c4a67b92bb7900e3.png

  • בדף Agent Builder, לוחצים על 'Data Stores' (מאגרי הנתונים) בסרגל הניווט שבצד ימין.

f86f67d344d398fb.png

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

e64e771f33543f46.png

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

3a8d22888e7eedc2.png

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

13876b5d12dbe1fb.png

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

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, שתעזור ליצור נקודות קצה נוחות לשימוש בממשק העורפי.
  • קצה קדמי – הפעולה הזו תכיל אפליקציה שמבוססת על תגובה ותציג את ממשק המשתמש. היא תכלול גם את הקריאות הדרושות ברמת האפליקציה לקצה העורפי דרך נקודות קצה למנוחה
  • Docker – הקובץ מכיל את כל הפקודות הרלוונטיות ליצירת קונטיינר Docker
  • בתיקיית השורש של ספריית המאגר, מריצים את הפקודה הבאה שתעזור ליצור קובץ אימג' של Docker (הערה: חשוב להקפיד להשתמש בדגל - - platform כשמפתחים קונטיינרים של Docker ב-Macbooks שמשתמשים בצ'יפים של Apple Silicon כמו M1, M2 וכו'. הדגל הזה לא נחוץ אם אתם מפתחים באמצעות מחשב Windows או אם הארכיטקטורה של המעבד (CPU) מבוססת על Intel)

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

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

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

  • אחרי שהתיוג של קובץ האימג' של הקונטיינר של Docer יושלם בהצלחה, נעביר את התמונה ל-Google Artifact Registry (GAR). GAR היא פלטפורמה מנוהלת של Google שעוזרת לנהל את הקונטיינרים של Docer ולנהל את הגרסאות שלהם. מריצים את הפקודה הבאה שתדחוף את המאגר המתויג שלמעלה ל-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

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

592103eb61c16738.png

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

aac35d55d7dd874e.png

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

b8b147265b8d457b.png

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

1dfdb007c52581a1.png

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

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

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

כדי לא לצבור חיובים לחשבון Google Cloud עבור המשאבים שבהם השתמשתם ב-Codelab הזה:

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

10. מזל טוב

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

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