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

1. מבוא

סקירה כללית

המטרה של שיעור ה-Lab הזה היא ללמוד איך לפתח אפליקציות Agentic Retrieval-Augmented Generation (יצירה משולבת-אחזור, RAG) מקצה לקצה ב-Google Cloud. בשיעור ה-Lab הזה תיצרו סוכן לניתוח פיננסי שיכול לענות על שאלות על ידי שילוב מידע משני מקורות שונים: מסמכים לא מובנים (דוחות רבעוניים של Alphabet לרשות ניירות הערך האמריקאית (SEC) – דוחות כספיים ופרטים תפעוליים שכל חברה ציבורית בארה"ב שולחת ל-SEC) ונתונים מובנים (מחירים היסטוריים של מניות).

תשתמשו ב-Vertex AI Search כדי ליצור מנוע חיפוש סמנטי מתקדם לדוחות כספיים לא מובנים. לנתונים המובנים, תיצרו כלי Python בהתאמה אישית. לבסוף, תשתמשו בערכת פיתוח סוכנים (ADK) כדי לבנות סוכן חכם שיכול להסיק מסקנות לגבי שאילתה של משתמש, להחליט באיזה כלי להשתמש ולסכם את המידע לתשובה עקבית.

הפעולות שתבצעו:

  • הגדרת מאגר נתונים של Vertex AI Search לחיפוש סמנטי במסמכים פרטיים.
  • יצירת פונקציית Python בהתאמה אישית ככלי לסוכן.
  • אפשר להשתמש בערכה לפיתוח סוכנים (ADK) כדי לבנות סוכן עם כמה כלים.
  • לשלב אחזור ממקורות נתונים לא מובנים ומובנים כדי לענות על שאלות מורכבות.
  • בדיקה ואינטראקציה עם סוכן שמציג יכולות נימוק.

מה תלמדו

בשיעור ה-Lab הזה תלמדו:

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

2. הסבר על יצירת תוכן עם שליפה משופרת

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

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

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

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

‫3 שלבים של RAG

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

  1. אחזור: כשמשתמש שולח שאילתה, המערכת מחפשת קודם בבסיס ידע חיצוני (כמו מאגר מסמכים, מסד נתונים או אתר) כדי למצוא מידע שרלוונטי לשאילתה.
  2. הגדלה: המידע שאוחזר משולב עם שאילתת המשתמש המקורית להרחבת ההנחיה. הטכניקה הזו נקראת לפעמים "הוספת מידע להנחיה", כי היא מעשירה את ההנחיה בהקשר עובדתי.
  3. יצירה: ההנחיה המשופרת מועברת ל-LLM, שיוצר תשובה. מכיוון שהמודל קיבל נתונים רלוונטיים ועובדתיים, הפלט שלו הוא "מבוסס" וסביר הרבה פחות שהוא יהיה לא מדויק או לא עדכני.

היתרונות של RAG

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

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

אחזור

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

אחזור מנתונים לא מובנים

בעבר, אחזור נתונים לא מובנים היה שם נוסף לחיפוש מסורתי. הוא עבר כמה שינויים, ואתם יכולים ליהנות משתי הגישות העיקריות.

חיפוש סמנטי הוא הטכניקה היעילה ביותר שאפשר להריץ בהיקף גדול ב-Google Cloud עם ביצועים מתקדמים ורמת שליטה גבוהה.

  • חיפוש מבוסס מילות מפתח (לקסיקלי): זהו הגישה המסורתית לחיפוש, שקיימת עוד ממערכות אחזור המידע הראשונות של שנות ה-70. חיפוש לקסיקלי פועל על ידי התאמה של המילים המילוליות (או 'אסימונים') בשאילתה של המשתמש לאותן מילים בדיוק במסמכים בבסיס הידע. האפשרות הזו יעילה מאוד לשאילתות שבהן חשוב לדייק במונחים ספציפיים, כמו קודי מוצרים, סעיפים משפטיים או שמות ייחודיים.
  • חיפוש סמנטי: חיפוש סמנטי, או "חיפוש עם משמעות", הוא גישה מודרנית יותר שמטרתה להבין את הכוונה של המשתמש ואת המשמעות ההקשרית של השאילתה שלו, ולא רק את מילות המפתח המילוליות. חיפוש סמנטי מודרני מבוסס על הטמעה – טכניקה של למידת מכונה שממפה נתונים מורכבים עם הרבה ממדים למרחב וקטורי עם פחות ממדים של וקטורים מספריים. הווקטורים האלה מתוכננים כך שטקסטים עם משמעויות דומות ממוקמים קרוב זה לזה במרחב הווקטורי. חיפוש של 'What are the best dog breeds for families?‎' (אילו גזעי כלבים הכי מתאימים למשפחות?) מומר לווקטור, ואז המערכת מחפשת וקטורים של מסמכים שהם 'השכנים הכי קרובים' שלו במרחב הזה. כך הוא יכול למצוא מסמכים שמתייחסים ל'גולדן רטריבר' או ל'כלבים ידידותיים', גם אם הם לא מכילים את המילה המדויקת 'כלב'. החיפוש הרב-ממדי הזה מתבצע ביעילות באמצעות אלגוריתמים של חיפוש שכנים קרובים משוער (ANN). במקום להשוות את וקטור השאילתה לכל וקטור מסמך (תהליך איטי מדי למערכי נתונים גדולים), אלגוריתמי ANN משתמשים במבני אינדקס חכמים כדי למצוא במהירות וקטורים שהם כנראה הקרובים ביותר.

אחזור מנתונים מובְנים

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

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

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

3. מצינורות RAG ל-Agentic RAG

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

  • Simple (or Naive) RAG: זו הארכיטקטורה הבסיסית שדיברנו עליה עד עכשיו: תהליך ליניארי בן שלושה שלבים של אחזור, הגדלה ויצירה. הוא מגיב; הוא פועל לפי נתיב קבוע לכל שאילתה והוא יעיל מאוד למשימות פשוטות של שאלות ותשובות.
  • RAG מתקדם: שיטה מתקדמת שבה מתווספים שלבים נוספים לצינור העיבוד כדי לשפר את איכות ההקשר שאוחזר. השיפורים האלה יכולים להתרחש לפני או אחרי שלב האחזור.
    • לפני שליפת המידע: אפשר להשתמש בטכניקות כמו שכתוב או הרחבה של השאילתה. יכול להיות שהמערכת תנתח את השאילתה הראשונית ותנסח אותה מחדש כדי שהיא תהיה יעילה יותר למערכת האחזור.
    • אחרי השליפה: אחרי שליפה של קבוצה ראשונית של מסמכים, אפשר להחיל מודל לדירוג מחדש כדי לתת למסמכים ציון לפי הרלוונטיות שלהם, ולהציג את המסמכים הטובים ביותר בראש התוצאות. זה חשוב במיוחד בחיפוש היברידי. שלב נוסף אחרי אחזור המידע הוא סינון או דחיסה של ההקשר שאוחזר, כדי לוודא שרק המידע הבולט ביותר מועבר למודל ה-LLM.
  • Agentic RAG: זוהי ארכיטקטורת RAG מתקדמת שמייצגת שינוי פרדיגמה מצינור קבוע לתהליך אוטונומי וחכם. במערכת Agentic RAG, כל תהליך העבודה מנוהל על ידי סוכני AI שיכולים להסיק מסקנות, לתכנן ולבחור באופן דינמי את הפעולות שלהם.

כדי להבין מה זה Agentic RAG, צריך קודם להבין מה זה סוכן AI. סוכן הוא יותר מסתם מודל שפה גדול (LLM). זו מערכת עם כמה רכיבים מרכזיים:

  1. מודל LLM כמנוע הסקה: הסוכן משתמש במודל LLM מתקדם כמו Gemini לא רק כדי ליצור טקסט, אלא כ "מוח" מרכזי לתכנון, לקבלת החלטות ולפירוק משימות מורכבות.
  2. ערכת כלים: לסוכן יש גישה לערכת כלים של פונקציות שהוא יכול להשתמש בהן כדי להשיג את המטרות שלו. הכלים האלה יכולים להיות כל דבר: מחשבון, API של חיפוש באינטרנט, פונקציה לשליחת אימייל, או, וזה הכי חשוב למעבדה הזו – כלי אחזור למאגרי הידע השונים שלנו.
  3. זיכרון: אפשר לתכנן סוכנים עם זיכרון לטווח קצר (כדי לזכור את ההקשר של השיחה הנוכחית) וזיכרון לטווח ארוך (כדי לשלוף מידע מאינטראקציות קודמות), וכך לאפשר חוויות מותאמות אישית ועקביות יותר.
  4. תכנון ורפלקציה: סוכנים מתקדמים ביותר מציגים דפוסי חשיבה מתוחכמים. הם יכולים לקבל מטרה מורכבת וליצור תוכנית רב-שלבית כדי להשיג אותה. לאחר מכן הם יכולים לבצע את התוכנית הזו, ואפילו להסיק מסקנות מהתוצאות של הפעולות שלהם, לזהות שגיאות ולתקן את הגישה שלהם כדי לשפר את התוצאה הסופית.

‫Agentic RAG הוא פתרון פורץ דרך כי הוא מוסיף רמה של אוטונומיה ואינטליגנציה שחסרה בצינורות סטטיים.

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

נניח שאתם רוצים להריץ את השאילתה: "Find the top 3 sci-fi movies directed by Christopher Nolan, and for each, provide a brief plot summary". צינור עיבוד נתונים פשוט של RAG ייכשל.

אבל נציג יכול לפרק את זה:

  1. תוכנית: קודם צריך למצוא את הסרטים. אחר כך, אני צריך למצוא את העלילה של כל סרט.
  2. פעולה 1: שימוש בכלי לנתונים מובְנים כדי לשלוח שאילתה למסד נתונים של סרטים ולחפש את 3 סרטי המדע הבדיוני המובילים של נולאן, לפי דירוג בסדר יורד.
  3. תצפית 1: הכלי מחזיר את התוצאות 'התחלה', 'בין כוכבים' ו'טנט'.
  4. פעולה 2: שימוש בכלי לנתונים לא מובנים (חיפוש סמנטי) כדי למצוא את העלילה של הסרט "התחלה".
  5. תצפית 2: התרשים מאוחזר.
  6. פעולה 3: חוזרים על הפעולה עבור הסרט "Interstellar".
  7. פעולה 4: חוזרים על הפעולה עבור הסרט Tenet.
  8. סינתזה סופית: שילוב כל המידע שאוחזר לתשובה אחת עקבית למשתמש.

RAG וסוכנים

4. הגדרת הפרויקט

חשבון Google

אם אין לכם חשבון Google אישי, אתם צריכים ליצור חשבון Google.

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

כניסה למסוף Google Cloud

נכנסים למסוף Google Cloud באמצעות חשבון Google אישי.

הפעלת חיוב

שימוש בחשבון לחיוב בתקופת ניסיון (אופציונלי)

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

  1. לוחצים על הקישור הזה ונכנסים לחשבון Google אישי. יוצג לכם משהו כזה:כאן אפשר ללחוץ כדי לעבור לדף הקרדיטים
  2. לוחצים על הלחצן כאן אפשר לגשת לזיכויים. הפעולה הזו תעביר אתכם לדף להגדרת פרופיל החיובהגדרת דף פרופיל החיוב
  3. לוחצים על אישור. עכשיו אתם מחוברים לחשבון לחיוב ב-Google Cloud Platform לניסיון.צילום מסך של סקירה כללית של החיוב

הגדרה של חשבון לחיוב לשימוש אישי

אם הגדרתם חיוב באמצעות קרדיטים של Google Cloud, אתם יכולים לדלג על השלב הזה.

כדי להגדיר חשבון לחיוב לשימוש אישי, עוברים לכאן כדי להפעיל את החיוב ב-Cloud Console.

טיפים ממשתמשים:

  • העלות של השלמת ה-Lab הזה במשאבי Cloud צריכה להיות פחות מ-1$.
  • כדי למחוק משאבים ולמנוע חיובים נוספים, אפשר לבצע את השלבים בסוף ה-Lab הזה.
  • משתמשים חדשים זכאים לתקופת ניסיון בחינם בשווי 300$.

יצירת פרויקט (אופציונלי)

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

5. פתיחת Cloud Shell Editor

  1. כדי לעבור ישירות אל Cloud Shell Editor, לוחצים על הקישור הזה.
  2. אם תתבקשו לאשר בשלב כלשהו היום, תצטרכו ללחוץ על אישור כדי להמשיך.לוחצים כדי לתת הרשאה ל-Cloud Shell
  3. אם הטרמינל לא מופיע בתחתית המסך, פותחים אותו:
    • לוחצים על הצגה.
    • לוחצים על Terminal (מסוף)פתיחת טרמינל חדש ב-Cloud Shell Editor.
  4. בטרמינל, מגדירים את הפרויקט באמצעות הפקודה הבאה:
    gcloud config set project [PROJECT_ID]
    
    • דוגמה:
      gcloud config set project lab-project-id-example
      
    • אם אתם לא זוכרים את מזהה הפרויקט, אתם יכולים להציג רשימה של כל מזהי הפרויקטים באמצעות הפקודה:
      gcloud projects list
      
      הגדרת מזהה הפרויקט בטרמינל של Cloud Shell Editor
  5. תוצג ההודעה הבאה:
    Updated property [core/project].
    

6. הפעלת ממשקי API

כדי להשתמש ב-Agent Development Kit וב-Vertex AI Search, צריך להפעיל את ממשקי ה-API הנדרשים בפרויקט שלכם ב-Google Cloud.

  1. בטרמינל, מפעילים את ממשקי ה-API:
    gcloud services enable \
        aiplatform.googleapis.com \
        discoveryengine.googleapis.com
    

מבוא לממשקי ה-API

  • Vertex AI API ‏ (aiplatform.googleapis.com) מאפשר לסוכן לתקשר עם מודלים של Gemini כדי להסיק מסקנות וליצור תוכן.
  • Discovery Engine API ‏ (discoveryengine.googleapis.com) מפעיל את Vertex AI Search, ומאפשר לכם ליצור מאגרי נתונים ולבצע חיפושים סמנטיים במסמכים לא מובְנים.

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

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

יצירת סביבה וירטואלית והתקנת יחסי תלות

  1. יוצרים ספרייה לסוכן ועוברים אליה. מריצים את הקוד הבא בטרמינל:
    mkdir financial_agent
    cd financial_agent
    
  2. יוצרים סביבה וירטואלית:
    uv venv --python 3.12
    
  3. מפעילים את הסביבה הווירטואלית:
    source .venv/bin/activate
    
  4. מתקינים את Agent Development Kit‏ (ADK) ואת pandas.
    uv pip install google-adk pandas
    

יצירת נתוני מחירי המניות

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

  1. בספרייה financial_agent, יוצרים את הקובץ goog.csv על ידי הרצת הפקודה הבאה בטרמינל:
    cat <<EOF > goog.csv
    Date,Open,High,Low,Close,Adj Close,Volume
    2023-01-03,89.830002,91.550003,89.019997,89.699997,89.699997,20738500
    2023-03-31,101.440002,103.889999,101.040001,103.730003,103.730003,36823200
    2023-06-30,120.870003,122.029999,120.300003,120.970001,120.970001,23824700
    2023-09-29,134.080002,134.550003,131.320007,131.850006,131.850006,21124200
    2025-07-10,185.000000,188.000000,184.500000,186.500000,186.500000,25000000
    EOF
    

הגדרת משתני סביבה

  1. בספרייה financial_agent, יוצרים קובץ .env כדי להגדיר את משתני הסביבה של הסוכן. הפרטים האלה מציינים ל-ADK באיזה פרויקט, מיקום ומודל להשתמש. מריצים את הקוד הבא בטרמינל:
    # Create the .env file using the captured variables
    cat << EOF > .env
    GOOGLE_GENAI_USE_VERTEXAI=TRUE
    GOOGLE_CLOUD_PROJECT="${GOOGLE_CLOUD_PROJECT}"
    GOOGLE_CLOUD_LOCATION="us-central1"
    EOF
    

הערה: בהמשך המעבדה, אם תצטרכו לשנות את הקובץ .env אבל הוא לא יופיע בספרייה financial_agent, נסו להפעיל או להשבית את האפשרות להצגת קבצים מוסתרים בכלי לעריכת Cloud Shell באמצעות פריט התפריט View / Toggle Hidden Files (תצוגה / הפעלה או השבתה של קבצים מוסתרים).

הפעלה וכיבוי של קבצים נסתרים

8. יצירת מאגר נתונים של Vertex AI Search

כדי לאפשר לנציג לענות על שאלות לגבי הדוחות הכספיים של Alphabet, תיצרו מאגר נתונים ב-Vertex AI Search שמכיל את מסמכי הדיווח הציבוריים שלה לרשות ניירות הערך האמריקאית (SEC).

  1. בכרטיסייה חדשה בדפדפן, פותחים את Cloud Console (console.cloud.google.com) ועוברים אל AI Applications באמצעות סרגל החיפוש בחלק העליון.
    אפליקציות AI
  2. אם מוצגת בקשה לעשות זאת, מסמנים את התיבה של התנאים וההגבלות ולוחצים על המשך והפעלת ה-API.
  3. בתפריט הניווט שמימין, בוחרים באפשרות מאגרי נתונים.
    מאגרי נתונים
  4. לוחצים על + יצירת מאגר נתונים.
  5. מאתרים את הכרטיס Cloud Storage ולוחצים על בחירה.
    מאגר נתונים – GCS
  6. במקור הנתונים, בוחרים באפשרות מסמכים לא מובְנים.
    מאגר נתונים – מסמכים לא מובנים
  7. במקור הייבוא (Select a folder or a file you want to import – בחירת תיקייה או קובץ לייבוא), מזינים את הנתיב של Google Cloud Storage cloud-samples-data/gen-app-builder/search/alphabet-sec-filings.
  8. לוחצים על המשך.
  9. משאירים את המיקום מוגדר לglobal.
  10. בשדה שם מאגר הנתונים, מזינים
    alphabet-sec-filings
    
  11. מרחיבים את הקטע אפשרויות לעיבוד מסמכים.
    מאגר נתונים – אפשרויות עיבוד
  12. ברשימה הנפתחת Default document parser (מנתח מסמכים שמוגדר כברירת מחדל), בוחרים באפשרות Layout Parser (מנתח פריסות).
    מאגר נתונים – מנתח פריסות
  13. באפשרויות של הגדרות מנתח הפריסות, בוחרים באפשרות הפעלת הערות בטבלה ובאפשרות הפעלת הערות בתמונה.
  14. לוחצים על המשך.
  15. בוחרים באפשרות תמחור כללי בתור מודל התמחור ולוחצים על יצירה.
  16. הייבוא של המסמכים למאגר הנתונים יתחיל.
    מאגר נתונים – הפעלת אפשרויות
  17. לוחצים על השם של מאגר הנתונים ומעתיקים את המזהה שלו מהטבלה 'מאגרי נתונים'. תצטרכו אותו בשלב הבא.
    מאגר נתונים – מאפיינים
  18. פותחים את הקובץ .env ב-Cloud Shell Editor ומוסיפים את מזהה מאגר הנתונים בתור DATA_STORE_ID="YOUR_DATA_STORE_ID" (מחליפים את YOUR_DATA_STORE_ID במזהה בפועל מהשלב הקודם). הערה: ייבוא, ניתוח ואינדוקס של הנתונים במאגר הנתונים יימשכו כמה דקות. כדי לבדוק את התהליך, לוחצים על השם של מאגר הנתונים כדי לפתוח את המאפיינים שלו, ואז פותחים את הכרטיסייה פעילות. מחכים שהסטטוס ישתנה ל'הייבוא הושלם'. מאגר נתונים – פעילות

9. יצירת כלי מותאם אישית לנתונים מובְנים

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

  1. בספרייה financial_agent, יוצרים קובץ חדש בשם agent.py. מריצים את הפקודה הבאה בטרמינל:
    cloudshell edit agent.py
    
  2. מוסיפים את קוד Python הבא אל agent.py. הקוד הזה מייבא יחסי תלות ומגדיר את הפונקציה get_stock_price.
    from datetime import datetime
    import os
    import logging
    
    import google.cloud.logging
    from google.adk.tools import VertexAiSearchTool
    from google.adk.tools.agent_tool import AgentTool
    from google.adk.agents import LlmAgent
    
    import pandas as pd
    
    def get_stock_price(date: str) -> dict:
        """Gets the closing stock price for a given date.
    
        Args:
            date: The date to get the stock price for, in YYYY-MM-DD format.
    
        Returns:
            A dictionary containing the closing price, or an error message if the
            date is not found or the format is incorrect.
        """
        try:
            # Load the CSV file
            df = pd.read_csv('goog.csv')
            # Convert the 'Date' column to datetime objects
            df['Date'] = pd.to_datetime(df['Date'])
            # Convert the input string to a datetime object
            query_date = datetime.strptime(date, '%Y-%m-%d')
            # Find the row for the given date
            row = df[df['Date'] == query_date]
    
            if not row.empty:
                # Get the closing price
                close_price = row['Close'].iloc[0]
                return {"status": "success", "date": date, "closing_price": close_price}
            else:
                return {"status": "error", "message": f"No data found for date: {date}"}
        except FileNotFoundError:
            return {"status": "error", "message": "Stock data file (goog.csv) not found."}
        except Exception as e:
            return {"status": "error", "message": f"An error occurred: {str(e)}"}
    

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

10. איך בונים ומריצים סוכן RAG

עכשיו הגיע הזמן להרכיב את הסוכן. תשלבו את הכלי Vertex AI Search לנתונים לא מובנים עם הכלי המותאם אישית get_stock_price לנתונים מובנים.

  1. מוסיפים את הקוד הבא לקובץ agent.py. הקוד הזה מייבא את המחלקות הנדרשות של ADK, יוצר מופעים של הכלים ומגדיר את הסוכן.
    logging.basicConfig(level=logging.INFO)
    cloud_logging_client = google.cloud.logging.Client()
    cloud_logging_client.setup_logging()
    
    # 1. Create the Vertex AI Search tool
    full_datastore_id = f"projects/{os.environ['GOOGLE_CLOUD_PROJECT']}/locations/global/collections/default_collection/dataStores/{os.environ['DATA_STORE_ID']}"
    vertex_ai_search_tool = VertexAiSearchTool(
        data_store_id=full_datastore_id
    )
    
    # 2. Define the Search+Q&A agent
    # Since we cannot combine tools with other tools in a single agent,
    # we create a separate Search+Q&A agent which will be used as a tool by the main root agent.
    
    doc_qa_agent = LlmAgent(
        name="search_and_qna_agent",
        model="gemini-2.5-flash",
        tools=[vertex_ai_search_tool],
        instruction="""You are a helpful assistant that answers questions based on information found in the document store.
        Use the search tool to find relevant information before answering.
        If the answer isn't in the documents, say that you couldn't find the information.
        """,
        description="Answers questions using a specific Vertex AI Search datastore.",
    )
    
    # 3. Define the root agent with 2 tools.
    
    root_agent = LlmAgent(
        name="financial_agent",
        model="gemini-2.5-flash",
        tools=[
            AgentTool(doc_qa_agent),
            get_stock_price,
        ],
        instruction="""You are an Financial Analytics Agent that answers question about Alphabet stock prices (using get_stock_price tool)
        and historical performance based on the data in Vertex AI Search datastore (using doc_qa_agent tool)."""
    )
    
  2. במסוף, בתוך הספרייה financial_agent, מפעילים את ממשק האינטרנט של ADK כדי ליצור אינטראקציה עם הנציג:
    adk web ~
    
  3. לוחצים על הקישור שמופיע בפלט של הטרמינל (בדרך כלל http://127.0.0.1:8000) כדי לפתוח את ממשק המשתמש של ADK Dev בדפדפן.

11. בדיקת הנציג

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

  1. בממשק המשתמש של ADK Dev, מוודאים שfinancial_agent נבחר בתפריט הנפתח.
  2. נסו לשאול שאלה שדורשת מידע מתוך מסמכי ה-SEC (נתונים לא מובְנים). מזינים את השאילתה הבאה בצ'אט:
    What were the total revenues for the quarter ending on March 31, 2023?
    
    הסוכן צריך להתקשר אל search_and_qna_agent, שמשתמש ב-VertexAiSearchTool כדי למצוא את התשובה במסמכים הפיננסיים.
  3. בשלב הבא, שואלים שאלה שנדרש בה שימוש בכלי המותאם אישית (נתונים מובְנים). שימו לב: פורמט התאריך בהנחיה לא חייב להיות זהה בדיוק לפורמט שנדרש על ידי הפונקציה. מודל ה-LLM חכם מספיק כדי לשנות את הפורמט.
    What was the closing stock price for Alphabet on July 10, 2025?
    
    הנציג צריך להתקשר לכלי get_stock_price שלך. אפשר ללחוץ על סמל הכלי בצ'אט כדי לבדוק את הקריאה לפונקציה ואת התוצאה שלה.
  4. לבסוף, שואלים שאלה מורכבת שמחייבת את הסוכן להשתמש בשני הכלים ולסכם את התוצאות.
    According to the 10-Q filing for the period ending March 31, 2023, what were the company's net cash provided by operating activities, and what was the stock's closing price on that date?
    
    השאילתה הזו תגרום לסוכן לבצע תוכנית רב-שלבית:
    • קודם כול, הוא ישתמש ב-VertexAiSearchTool כדי למצוא את פרטי תזרים המזומנים במסמכי ה-SEC.
    • לאחר מכן, המערכת תזהה את הצורך במחיר המניה ותקרא לפונקציה get_stock_price עם התאריך 2023-03-31.
    • לבסוף, הוא ישלב את שני חלקי המידע האלה לתשובה אחת מקיפה.
  5. כשמסיימים, אפשר לסגור את כרטיסיית הדפדפן וללחוץ על CTRL+C במסוף כדי לעצור את שרת ה-ADK.

12. בחירת שירות למשימה

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

Vertex AI RAG Engine

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

אפשר גם לארח בעצמכם הרבה מסדי נתונים וקטוריים ייעודיים, או להשתמש ביכולות של אינדקס וקטורי במנועי מסדי נתונים, כמו pgvector בשירות PostgreSQL (למשל AlloyDB או חיפוש וקטורי ב-BigQuery).

שירותים נוספים שתומכים בחיפוש וקטורי:

ההנחיות הכלליות לבחירת שירות מסוים ב-Google Cloud הן:

  • אם כבר יש לכם תשתית של חיפוש וקטורי שפועלת וניתנת להרחבה, אתם יכולים לפרוס אותה ב-Google Kubernetes Engine, כמו Weaviate או DIY PostgreSQL.
  • אם הנתונים שלכם נמצאים ב-BigQuery, ב-AlloyDB, ב-Firestore או בכל מסד נתונים אחר, כדאי להשתמש ביכולות החיפוש הווקטורי שלו אם אפשר לבצע חיפוש סמנטי בהיקף גדול כחלק משאילתה גדולה יותר במסד הנתונים הזה. לדוגמה, אם יש לכם תיאורי מוצרים או תמונות בטבלת BigQuery, הוספה של עמודה עם הטמעה של טקסט או תמונה תאפשר לכם להשתמש בחיפוש דמיון בהיקף גדול. אינדקסים של וקטורים עם תמיכה בחיפוש ScANN יכולים להכיל מיליארדי פריטים באינדקס.
  • אם אתם רוצים להתחיל במהירות עם מינימום מאמץ בפלטפורמה מנוהלת, כדאי לבחור ב-Vertex AI Search – מנוע חיפוש מנוהל לחלוטין ו-API לאחזור מידע, שמתאים במיוחד לתרחישי שימוש מורכבים בארגונים שדורשים איכות גבוהה, יכולת הרחבה ואמצעי בקרה מפורטים לגישה. הוא מפשט את החיבור למקורות נתונים מגוונים של ארגונים ומאפשר חיפוש בכמה מקורות.
  • אם אתם מחפשים פתרון שיהיה קל לשימוש וגם יאפשר התאמה אישית, כדאי לכם להשתמש ב-Vertex AI RAG Engine. הוא מאפשר יצירת אבות טיפוס ופיתוח מהירים בלי להתפשר על גמישות.
  • דוגמאות לארכיטקטורות של יצירת תוכן עם שליפה משופרת

13. סיכום

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

  • ליצור מאגר ידע למסמכים לא מובנים באמצעות יכולות החיפוש הסמנטי המתקדמות של חיפוש מבוסס-Vertex AI.
  • תפתח פונקציית Python מותאמת אישית שתשמש ככלי לאחזור נתונים מובְנים.
  • אתם יכולים להשתמש בערכה לפיתוח סוכנים (ADK) כדי ליצור סוכן רב-תכליתי שמבוסס על Gemini.
  • ליצור סוכן שיכול לבצע ניתוח מורכב ורב-שלבי כדי לענות על שאילתות שדורשות סינתוז של מידע מכמה מקורות.

בשיעור ה-Lab הזה נדגים את עקרונות הליבה של Agentic RAG, ארכיטקטורה עוצמתית לפיתוח אפליקציות AI חכמות, מדויקות ומודעות-הקשר ב-Google Cloud.

מאב טיפוס לייצור

שיעור ה-Lab הזה הוא חלק מתוכנית הלימודים Production-Ready AI with Google Cloud (בינה מלאכותית מוכנה לייצור באמצעות Google Cloud).