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

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

לפני שממשיכים ב-codelab הזה, חשוב לשים לב לכמה דברים.

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

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

מה תלמדו

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

מה תצטרכו

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

מבוא

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

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

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

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

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

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

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

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

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

מה תפַתחו

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

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

2d055ded874603a6.png

איך אנחנו מטפלים בבקשה

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

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

  1. ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
  2. מוודאים שהחיוב מופעל בפרויקט בענן שלכם ב-Google Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud. כדי לגשת אליו, לוחצים על Activate Cloud Shell (הפעלת 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: יצירת Bucket ב-GCP

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

adf5c0382f6c3540.png

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

731aead7d8497725.png

  • לוחצים על Create Bucket (יצירת קטגוריה).

f7ac409ed9c4af21.png

  • אחרי שיוצרים את הקטגוריה, מעלים את הקובץ alphabet-metadata.json מהמאגר.

4. שלב 2: יצירת מאגר נתונים של Vertex AI

  • בסרגל החיפוש של דף המסוף, מקלידים 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

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

618b7a456fbffad4.png

בראוניז:

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

38471c1d3411610d.png

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

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

ae5294e33f63567c.png

  • מוודאים שבוחרים באפשרות 'כללי' בקטע 'תוכן'. אפשר גם לבחור באפשרות 'מדיה' או 'המלצות' בהתאם למאגר הנתונים, לסוג הנתונים ולמערכות שרוצים לבנות.
  • חשוב להפעיל את האפשרות Enterprise Edition ואת התכונות המתקדמות של 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

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

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

  • אחרי שיוצרים את קונטיינר 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

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

592103eb61c16738.png

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

aac35d55d7dd874e.png

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

b8b147265b8d457b.png

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

1dfdb007c52581a1.png

8. איך זה עובד

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

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

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

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

10. מזל טוב

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

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