1. לפני שמתחילים
ב-codelab הזה תלמדו איך להשתמש ב-Genkit כדי לשלב AI גנרטיבי באפליקציה שלכם. Genkit הוא מסגרת קוד פתוח שעוזרת לכם ליצור, לפרוס ולנטר אפליקציות מבוססות-AI שמוכנות לייצור.
Genkit מיועד למפתחי אפליקציות, כדי לעזור להם לשלב בקלות יכולות AI מתקדמות באפליקציות שלהם באמצעות דפוסים ופרדיגמות מוכרים. הוא פותח על ידי צוות Firebase, על סמך הניסיון שלנו בפיתוח כלים שמשמשים מיליוני מפתחים ברחבי העולם.
דרישות מוקדמות
- היכרות עם Firestore, Node.js ו-TypeScript.
מה תלמדו
- איך ליצור אפליקציות חכמות יותר באמצעות יכולות החיפוש המתקדם של דמיון וקטורי ב-Firestore.
- איך מטמיעים בינה מלאכותית גנרטיבית באפליקציות באמצעות Genkit.
- הכנת הפתרון לפריסה ולהטמעה.
מה צריך להכין
- דפדפן לבחירתכם, כמו Google Chrome
- סביבת פיתוח עם עורך קוד וטרמינל
- חשבון Google ליצירה ולניהול של פרויקט Firebase
2. בדיקת אפליקציות האינטרנט והשירותים בענן שבהם נעשה שימוש
בקטע הזה נסקור את אפליקציית האינטרנט שתבנו באמצעות ה-codelab הזה, וגם נלמד על שירותי הענן שבהם תשתמשו.
אפליקציית אינטרנט
ב-Codelab הזה תעבדו על בסיס הקוד של אפליקציה בשם Compass – אפליקציה לתכנון חופשות. משתמשים יכולים לבחור יעד, לעיין בפעילויות ביעד וליצור מסלול נסיעה.
ב-codelab הזה תטמיעו שתי תכונות חדשות שמטרתן לשפר את האינטראקציה של המשתמשים עם דף הבית של האפליקציה. שתי התכונות מבוססות על AI גנרטיבי:
- האפליקציה מציגה כרגע רשימה סטטית של יעדים. תשנו אותו כך שיהיה דינמי.
- תטמיעו מסלול טיול שמתמלא אוטומטית כדי להגדיל את משך השימוש באתר.

השירותים שבהם נעשה שימוש
ב-codelab הזה תשתמשו בהרבה שירותים ותכונות של Firebase ו-Cloud, ורוב קוד לתחילת הדרך שלהם מסופק לכם. בטבלה הבאה מפורטים השירותים שבהם תשתמשו והסיבות לשימוש בהם.
Service | הסיבה לשימוש |
אתם משתמשים ב-Genkit כדי להוסיף AI גנרטיבי לאפליקציית Node.js / Next.js. | |
אתם מאחסנים נתונים ב-Cloud Firestore, ואז משתמשים בהם לחיפוש דמיון וקטורי. | |
אתם משתמשים במודלים בסיסיים מ-Vertex AI (כמו Gemini) כדי להפעיל את תכונות ה-AI. | |
אפשר גם להשתמש באירוח החדש והיעיל של אפליקציות ב-Firebase כדי להציג את אפליקציית האינטרנט הדינמית שלכם ב-Next.js (שמקושרת למאגר GitHub). |
3. הגדרת סביבת הפיתוח
אימות הגרסה של Node.js
- במסוף, מוודאים שמותקנת גרסה 20.0.0 ואילך של Node.js:
node -v - אם לא מותקנת אצלכם גרסה 20.0.0 של Node.js או גרסה מתקדמת יותר, מורידים את גרסת ה-LTS האחרונה ומתקינים אותה.
קבלת קוד המקור של ה-Codelab
אם יש לכם חשבון ב-GitHub:
- יוצרים מאגר חדש באמצעות התבנית שלנו מכתובת github.com/FirebaseExtended/codelab-ai-genkit-rag

- יוצרים שיבוט מקומי של מאגר GitHub של ה-codelab שזה עתה יצרתם:
git clone https://github.com/<your-github-handle>/codelab-ai-genkit-rag
אם לא מותקן אצלכם git או שאתם מעדיפים לא ליצור מאגר חדש:
מורידים את מאגר GitHub כקובץ ZIP.
בדיקת מבנה התיקיות
במכונה המקומית, מוצאים את המאגר המשוכפל ובודקים את מבנה התיקיות:
תיקייה | תיאור |
| כלי עזר בשורת הפקודה לאכלוס מראש של אוסף Firestore |
*כל השאר | קוד של אפליקציית אינטרנט ב-Next.js |
תיקיית הבסיס כוללת קובץ README.md שמציע הוראות פשוטות להתחלה מהירה של הפעלת אפליקציית האינטרנט. עם זאת, אם אתם לומדים בפעם הראשונה, כדאי לכם להשלים את ה-Codelab הזה (במקום את המדריך למתחילים), כי הוא מכיל את מערך ההוראות המקיף ביותר.
אם אתם לא בטוחים שהטמעתם את הקוד בצורה נכונה כמו שמוסבר ב-Codelab הזה, תוכלו למצוא את קוד הפתרון בסניף ה-git end.
התקנת Firebase CLI
- מוודאים ש-Firebase CLI מותקן ושהגרסה שלו היא 13.6 ואילך:
firebase --version - אם ה-CLI של Firebase מותקן אצלכם, אבל הוא לא בגרסה 13.6 ואילך, צריך לעדכן אותו:
npm update -g firebase-tools - אם Firebase CLI לא מותקן, מתקינים אותו:
npm install -g firebase-tools
אם אתם לא מצליחים לעדכן או להתקין את Firebase CLI בגלל שגיאות הרשאה, אפשר לעיין במסמכי התיעוד של npm או להשתמש באפשרות התקנה אחרת.
מתחברים ל-Firebase
- בטרמינל, מתחברים ל-Firebase:
אם במסוף מופיע שאתם כבר מחוברים ל-Firebase, אתם יכולים לדלג לקטע הגדרת פרויקט Firebase ב-codelab הזה.firebase login - בטרמינל, בהתאם לרצון שלכם ש-Firebase יאסוף נתונים, מזינים
YאוN. (כל אחת מהאפשרויות מתאימה ל-Codelab הזה) - בדפדפן, בוחרים את חשבון Google ולוחצים על אישור.
התקנת ה-CLI של gcloud ב-Google Cloud
- מתקינים את ה-CLI של gcloud.
- במסוף, נכנסים ל-Google Cloud:
gcloud auth login
4. הגדרת פרויקט Firebase
בקטע הזה נגדיר פרויקט Firebase ונרשום בו אפליקציית אינטרנט של Firebase. בהמשך ה-codelab הזה תפעילו גם כמה שירותים שמשמשים את אפליקציית האינטרנט לדוגמה.
כל השלבים בקטע הזה מתבצעים במסוף Firebase.
יצירת פרויקט Firebase
- נכנסים למסוף Firebase באמצעות אותו חשבון Google שבו השתמשתם בשלב הקודם.
- לוחצים על הלחצן כדי ליצור פרויקט חדש, ואז מזינים שם לפרויקט (לדוגמה,
Compass Codelab).
- לוחצים על המשך.
- אם מוצגת בקשה לעשות זאת, קוראים ומאשרים את התנאים של Firebase, ואז לוחצים על המשך.
- (אופציונלי) מפעילים את העזרה מבוססת-AI במסוף Firebase (שנקראת Gemini ב-Firebase).
- ב-codelab הזה לא צריך להשתמש ב-Google Analytics, ולכן משביתים את האפשרות Google Analytics.
- לוחצים על יצירת פרויקט, מחכים שהפרויקט יוקצה ולוחצים על המשך.
הוספת אפליקציית אינטרנט לפרויקט Firebase
- עוברים למסך Project Overview (סקירה כללית של הפרויקט) בפרויקט Firebase ולוחצים על
Web (אינטרנט).
- בתיבת הטקסט כינוי לאפליקציה, מזינים כינוי קליט לאפליקציה, כמו
My Compass Codelab App. אפשר להשאיר את תיבת הסימון להגדרת Firebase Hosting לא מסומנת, כי בשלב האחרון של ה-codelab הזה תהיה לכם אפשרות להגדיר שירות אירוח.
- לוחצים על Register app > Continue to console (רישום האפליקציה > המשך למסוף).
מעולה! סיימתם לרשום אפליקציית אינטרנט בפרויקט Firebase החדש.
שדרוג תוכנית התשלומים של Firebase
כדי להשתמש ב-Genkit וב-Vertex AI (ובשירותי הענן הבסיסיים שלהם), הפרויקט שלכם ב-Firebase צריך להיות בתוכנית התמחור של תשלום לפי שימוש (Blaze), כלומר הוא צריך להיות מקושר לחשבון לחיוב ב-Cloud.
- בחשבון לחיוב ב-Cloud צריך להגדיר אמצעי תשלום, כמו כרטיס אשראי.
- אם אתם חדשים ב-Firebase וב-Google Cloud, כדאי לבדוק אם אתם עומדים בדרישות לקבלת קרדיט בשווי 300$ותקופת ניסיון בחינם בחשבון לחיוב ב-Cloud.
- אם אתם משתתפים ב-Codelab כחלק מאירוע, כדאי לשאול את מארגן האירוע אם יש קרדיטים ל-Cloud.
מידע נוסף על התמחור של Vertex AI
כדי לשדרג את הפרויקט לתוכנית Blaze, פועלים לפי השלבים הבאים:
- במסוף Firebase, בוחרים באפשרות שדרוג התוכנית.
- בוחרים בתוכנית Blaze. פועלים לפי ההוראות במסך כדי לקשר חשבון לחיוב ב-Cloud לפרויקט.
אם הייתם צריכים ליצור חשבון לחיוב ב-Cloud כחלק מהשדרוג, יכול להיות שתצטרכו לחזור לתהליך השדרוג במסוף Firebase כדי להשלים את השדרוג.
הגדרה של Cloud Firestore
- בחלונית הימנית במסוף Firebase, מרחיבים את Build ובוחרים באפשרות Firestore database.
- לוחצים על יצירת מסד נתונים.
- בוחרים באפשרות מהדורה רגילה ולוחצים על הבא.
- משאירים את הערך
(default)בשדה Database ID. - בוחרים מיקום למסד הנתונים ולוחצים על הבא.
באפליקציה אמיתית, כדאי לבחור מיקום שקרוב למשתמשים. - לוחצים על התחלת השימוש במצב בדיקה. חשוב לקרוא את כתב הוויתור בנוגע לכללי האבטחה.
אסור להפיץ או לחשוף אפליקציה לציבור בלי להוסיף כללי אבטחה למסד הנתונים. - לוחצים על יצירה.
הפעלת Vertex AI
משתמשים ב-CLI של gcloud כדי להגדיר את Vertex AI. בכל הפקודות בדף הזה, צריך להחליף את YOUR_PROJECT_ID במזהה של פרויקט Firebase.
- בטרמינל, מגדירים את פרויקט ברירת המחדל עבור Google Cloud SDK:
gcloud config set project YOUR_PROJECT_ID - אם מופיעה הודעת אזהרה שאומרת "אזהרה: הפרויקט הפעיל לא תואם לפרויקט המכסה בקובץ המקומי של Application Default Credentials. יכול להיות שיתקבלו בעיות בלתי צפויות במכסה", ואז מריצים את הפקודה הבאה כדי להגדיר את פרויקט המכסה:
gcloud auth application-default set-quota-project YOUR_PROJECT_ID - מפעילים את שירות Vertex AI בפרויקט:
gcloud services enable aiplatform.googleapis.com
5. הגדרת אפליקציית האינטרנט
כדי להריץ את אפליקציית האינטרנט, צריך להריץ פקודות במסוף ולהוסיף קוד בכלי לעריכת קוד. בכל הפקודות בדף הזה, צריך להחליף את YOUR_PROJECT_ID במזהה של פרויקט Firebase.
הגדרת Firebase CLI לטירגוט הפרויקט
- בטרמינל, עוברים לספריית השורש של פרויקט ה-Codelab.
- כדי ש-Firebase CLI יבצע את כל הפקודות בפרויקט Firebase שלכם, מריצים את הפקודה הבאה:
firebase use YOUR_PROJECT_ID
ייבוא נתונים לדוגמה ל-Firestore
כדי שתוכלו להתחיל לעבוד במהירות, ב-codelab הזה מסופקים נתונים לדוגמה שנוצרו מראש עבור Firestore.
- כדי לאפשר לבסיס הקוד המקומי להריץ קוד שבדרך כלל משתמש בחשבון שירות, מריצים את הפקודה הבאה בטרמינל:
תיפתח כרטיסייה חדשה בדפדפן. מתחברים באמצעות אותו חשבון Google שבו השתמשתם בשלבים הקודמים.gcloud auth application-default login - כדי לייבא את נתוני Firestore לדוגמה, מריצים את הפקודות הבאות:
cd load-firestore-data npm ci node index.js YOUR_PROJECT_ID cd .. - כדי לוודא שהנתונים נוספו למסד הנתונים, עוברים לקטע Firestore בפרויקט Firebase במסוף Firebase.אמורים לראות את סכימת הנתונים המיובאים ואת התוכן שלה.

קישור אפליקציית האינטרנט לפרויקט Firebase
כדי להשתמש בשירותים של Firebase, כמו מסד הנתונים, צריך לשייך את בסיס הקוד של אפליקציית האינטרנט לפרויקט Firebase הנכון. כדי לעשות את זה, צריך להוסיף את ההגדרה של Firebase לבסיס הקוד של האפליקציה. ההגדרה הזו כוללת ערכים חיוניים כמו מזהה הפרויקט, מפתח ה-API ומזהה האפליקציה שלכם, וגם ערכים אחרים שמאפשרים לאפליקציה שלכם ליצור אינטראקציה עם Firebase.
- מקבלים את הגדרת Firebase של האפליקציה:
- במסוף Firebase, עוברים לפרויקט Firebase.
- בחלונית הימנית, לוחצים על סמל גלגל השיניים לצד Project Overview (סקירת הפרויקט) ובוחרים באפשרות Project settings (הגדרות הפרויקט).
- בכרטיס 'האפליקציות שלך', בוחרים את אפליקציית האינטרנט.
- בקטע SDK setup and configuration (הגדרה וקביעת תצורה של SDK), בוחרים באפשרות Config (הגדרה).
- העתק את הקוד. הוא מתחיל ב-
const firebaseConfig ....
- מוסיפים את ההגדרה של Firebase לבסיס הקוד של אפליקציית האינטרנט:
- פותחים את הקובץ
src/lib/genkit/genkit.config.tsבכלי לעריכת קוד. - מחליפים את הקטע הרלוונטי בקוד שהעתקתם.
- שומרים את הקובץ.
- פותחים את הקובץ
תצוגה מקדימה של אפליקציית האינטרנט בדפדפן
- בטרמינל, מתקינים את התלות ומריצים את אפליקציית האינטרנט:
npm install npm run dev:next - בדפדפן, עוברים לכתובת ה-URL של האירוח שמתארח באופן מקומי כדי להציג את אפליקציית האינטרנט. לדוגמה, ברוב המקרים כתובת ה-URL היא http://localhost:3000/ או משהו דומה.

Compass היא אפליקציית Next.js שמשתמשת ב-React Server Components, וזהו דף הבית שלה.
לוחצים על חיפוש הטיול המושלם. אפשר לראות שהיא מציגה נתונים שמוגדרים בהגדרות קשיחות עבור כמה יעדים קבועים:

אתם מוזמנים לעיין בהמלצות. כשמוכנים להמשיך, לוחצים על הכפתור הראשי
(בפינה השמאלית העליונה).
6. היכרות עם AI גנרטיבי באמצעות Genkit
עכשיו אתם יכולים להשתמש ביכולות של AI גנרטיבי באפליקציה שלכם. בקטע הזה של ה-codelab מוסבר איך מטמיעים תכונה שמציעה יעדים על סמך השראה שהמשתמש מספק. תשתמשו ב-Genkit וב-Vertex AI של Google Cloud כספק של המודל הגנרטיבי (תשתמשו ב-Gemini).
Genkit יכול לאחסן את מצב העקבות והזרימה (מה שמאפשר לכם לבדוק את התוצאה של הפעלת זרימות Genkit). ב-codelab הזה, תשתמשו ב-Firestore כדי לאחסן את העקבות האלה.
בשלב האחרון של ה-Codelab הזה, תפרסו את אפליקציית Genkit שלכם ב-Firebase App Hosting.
קישור אפליקציית Genkit לפרויקט Firebase
כבר קישרנו את Genkit לפרויקט שלך בעריכת src/lib/genkit/genkit.config.ts בשלב הקודם.
הפעלת ממשק המשתמש למפתחים של Genkit
Genkit כולל ממשק משתמש מבוסס-אינטרנט שמאפשר לכם ליצור אינטראקציה עם מודלים גדולים של שפה (LLM), עם תהליכי עבודה של Genkit, עם כלי אחזור ועם רכיבי AI אחרים.
בטרמינל, מריצים את הפקודה:
npm run dev:genkit
בדפדפן, עוברים לכתובת ה-URL של Genkit שמתארחת באופן מקומי. ברוב המקרים, הכתובת היא http://localhost:4000/.
איך משתמשים ב-Gemini
עכשיו אפשר להשתמש בממשק המשתמש למפתחים של Genkit כדי ליצור אינטראקציה עם כל אחד מהמודלים הנתמכים או עם כל אחד מרכיבי ה-AI האחרים, כמו הנחיות, כלי אחזור וזרימות עבודה של Genkit.
לדוגמה, אפשר לבקש מ-Gemini להציע חופשה. שימו לב איך אפשר להשתמש בהוראות מערכת כדי לכוון את התנהגות המודל בהתאם לצרכים הספציפיים שלכם. השיטה הזו רלוונטית גם למודלים שלא תומכים באופן מובנה בהוראות מערכת.

ניהול ההנחיות
Genkit כולל את Dotprompt, תוסף ופורמט טקסט שנועדו לייעל את היצירה והניהול של הנחיות ל-AI גנרטיבי. הרעיון המרכזי מאחורי Dotprompt הוא להתייחס להנחיות כאל קוד, וכך לאפשר לכם לכתוב, לתחזק ולנהל גרסאות שלהן לצד קוד האפליקציה.
כדי להשתמש ב-Dotprompt, מתחילים עם hello-world:
- פותחים את הקובץ
prompts/1-hello-world.promptבכלי לעריכת קוד. - בממשק המשתמש למפתחים של Genkit, פותחים את
prompts/1-hello-world. - אפשר להשתמש בשם או בקוד של כל שפה שאתם מכירים, או להשאיר את המחרוזת ריקה.
- לוחצים על הפעלה.

- כדאי לנסות כמה ערכים שונים. מודלים גדולים של שפה (LLM) מצטיינים בהבנת הנחיות מקוצרות, עם שגיאות כתיב או לא שלמות בשאילתות פשוטות כמו זו.
העשרת הפלט בנתונים מובְנים
בנוסף ליצירת טקסט פשוט, Genkit מאפשר לכם לבנות את הפלט בצורה שתשפר את ההצגה והשילוב בממשק המשתמש של האפליקציה. הגדרת סכימה מאפשרת להנחות את מודל ה-LLM ליצור נתונים מובְנים שתואמים לפורמט הרצוי.
בחינת סכימות פלט
אפשר גם לציין את סכימת הפלט של קריאה ל-LLM.
- בעורך הקוד, בודקים את קובץ ההנחיות:
- פותחים את הקובץ
prompts/2-simple-itinerary.prompt. - בודקים את סכימות הקלט והפלט שהוגדרו.
- פותחים את הקובץ
- אינטראקציה עם ממשק המשתמש:
- בממשק המשתמש של Genkit Developer, עוברים לקטע
prompts/2-simple-itinerary. - כדי לספק קלט, מאכלסים את השדות
placeו-interestsבנתונים לדוגמה:{ "interests": [ "Museums" ], "place": "Paris" } - לוחצים על Run.
- בממשק המשתמש של Genkit Developer, עוברים לקטע

הסבר על פלט מבוסס-סכימה
שימו לב שהפלט שנוצר תואם לסכימה שהוגדרה. כשמציינים את המבנה הרצוי, מנחים את ה-LLM להפיק נתונים שאפשר לנתח בקלות ולשלב באפליקציה. Genkit מאמת באופן אוטומטי את הפלט מול הסכימה, כדי להבטיח את תקינות הנתונים.
בנוסף, אפשר להגדיר ב-Genkit ניסיון חוזר או ניסיון לתקן את הפלט אם הוא לא תואם לסכימה.
יתרונות חשובים של סכימות פלט
- הטמעה פשוטה יותר: קל לשלב נתונים מובנים ברכיבי ממשק המשתמש של האפליקציה.
- אימות נתונים: חשוב לוודא שהפלט שנוצר מדויק ועקבי.
- טיפול בשגיאות: הטמעת מנגנונים לטיפול בחוסר התאמה בסכימה.
שימוש בסכימות פלט משפר את חוויית השימוש ב-Genkit, ומאפשר לכם ליצור נתונים מובְנים בהתאמה אישית כדי לספק חוויית משתמש עשירה ודינמית יותר.
שימוש בקלט מולטי-מודאלי
נניח שהאפליקציה שלכם מציעה יעדים מותאמים אישית לחופשה על סמך תמונות שהמשתמשים שלכם מוצאים מעוררות השראה. Genkit, בשילוב עם מודל גנרטיבי רב-אופני, מאפשר לכם להפוך את החזון הזה למציאות.
- בעורך הקוד, בודקים את קובץ ההנחיות:
- פותחים את הקובץ
prompts/imgDescription.prompt. - שימו לב לשימוש ב-
{{media url=this}}, שהוא אלמנט בתחביר של Handlebars שמאפשר לשלב תמונות בהנחיה.
- פותחים את הקובץ
- אינטראקציה עם ממשק המשתמש:
- בממשק המשתמש למפתחים של Genkit, פותחים את ההנחיה
prompts/imgDescription. - מדביקים כתובת URL של תמונה בשדה
imageUrls. לדוגמה, אפשר להשתמש בתמונה ממוזערת מתוך ויקיפדיה שמציגה את מגדל אייפל:{ "imageUrls": [ "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg/556px-La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg" ] } - לוחצים על Run.
- בממשק המשתמש למפתחים של Genkit, פותחים את ההנחיה

7. הטמעה של אחזור באמצעות חיפוש דמיון וקטורי
יצירת תוכן קריאייטיבי באמצעות מודלים של AI היא מרשימה, אבל ביישומים מעשיים צריך לעיתים קרובות להוסיף הקשר ספציפי לפלט.
במקרה של ה-codelab הזה, יש לכם מסד נתונים של יעדים (מקומות ופעילויות), ואתם רוצים לוודא שההצעות שנוצרות על ידי מודל Gemini מתייחסות רק לרשומות במסד הנתונים הזה.
כדי לגשר על הפער בין שאילתות לא מובנות לבין תוכן רלוונטי, תשתמשו ביכולות של חיפוש דמיון וקטורי בהטמעות שנוצרו.
הסבר על הטמעות ודמיון וקטורי
- וקטורים: וקטורים הם ייצוגים מספריים של נקודות נתונים, שמשמשים לעיתים קרובות ליצירת מודלים של מידע מורכב כמו טקסט או תמונות. כל מאפיין בווקטור מתאים לתכונה ספציפית של הנתונים.
- מודלים של הטמעה: מודלים מיוחדים של AI שממירים נתוני קלט, כמו טקסט, לווקטורים עם הרבה ממדים. ההיבט המעניין הוא שקלט דומה ממופה לווקטורים שקרובים זה לזה במרחב רב-ממדי הזה.
- חיפוש דמיון וקטורי: בטכניקה הזו נעשה שימוש בקרבה של וקטורי הטמעה כדי לזהות נקודות נתונים רלוונטיות. בהינתן שאילתת קלט, המערכת מוצאת רשומות במסד הנתונים עם וקטורי הטמעה דומים, שמצביעים על קשר סמנטי.
הסבר על תהליך השחזור
- הטמעה של השאילתה: הקלט של המשתמש (לדוגמה, "ארוחה רומנטית בפריז") מועבר דרך מודל הטמעה, שמייצר וקטור של שאילתה.
- הטמעות של מסד נתונים: מומלץ לעבד מראש את מסד הנתונים של היעדים וליצור וקטורי הטמעה לכל רשומה.
- חישוב הדמיון: וקטור השאילתה מושווה לכל וקטור הטמעה במסד הנתונים באמצעות מדד דמיון (לדוגמה, דמיון קוסינוס).
- אחזור: המערכת מאחזרת את הרשומות הכי דומות ממסד הנתונים, על סמך הקרבה שלהן לווקטור השאילתה, כהצעות רלוונטיות.
אם משלבים את מנגנון האחזור הזה באפליקציה, אפשר להשתמש במודל Gemini כדי ליצור הצעות שהן לא רק יצירתיות אלא גם מבוססות על מערך הנתונים הספציפי שלכם. הגישה הזו מבטיחה שהפלט שנוצר יישאר רלוונטי מבחינת ההקשר ויתאים למידע שזמין במסד הנתונים.
הפעלת חיפוש דמיון וקטורי ב-Firestore
בשלב קודם ב-codelab הזה, מילאתם את מסד הנתונים של Firestore במקומות ובפעילויות לדוגמה. כל רשומה של מקום כוללת שדה טקסט knownFor שמתאר את המאפיינים הבולטים שלו, ושדה embedding תואם שמכיל את הייצוג הווקטורי של התיאור הזה.

כדי להשתמש ביכולות של חיפוש דמיון וקטורי בהטמעות האלה, צריך ליצור אינדקס של Firestore. האינדקס הזה מאפשר שליפה יעילה של מקומות על סמך הדמיון של וקטורי ההטמעה שלהם לשאילתה נתונה.
- יוצרים את האינדקס, ומקפידים להחליף את
YOUR_PROJECT_IDבמזהה הפרויקט.- ב-macOS / Linux
gcloud firestore indexes composite create \ --project=YOUR_PROJECT_ID \ --collection-group=places \ --query-scope=COLLECTION \ --field-config field-path=embedding,vector-config='{"dimension":"768","flat":"{}"}'- ב-Windows (PowerShell)
gcloud firestore indexes composite create ` --project=YOUR_PROJECT_ID ` --collection-group=places ` --query-scope=COLLECTION ` --field-config="field-path=embedding,vector-config={'dimension':'768','flat':'{}'}" - בממשק המשתמש למפתחים של Genkit, פותחים את
retrievers/placesRetriever. - לוחצים על Run. מתבוננים באובייקט עם placeholder לטקסט, שמציין איפה תטמיעו את הלוגיקה של כלי האחזור.
- פותחים את הקובץ
src/lib/genkit/placesRetriever.tsבכלי לעריכת קוד. - גוללים עד למטה ומחליפים את הפלייסולדר
placesRetrieverבטקסט הבא:export const placesRetriever = defineFirestoreRetriever(ai, { name: 'placesRetriever', firestore, collection: 'places', contentField: 'knownFor', vectorField: 'embedding', embedder: vertexAI.embedder('text-embedding-005', {outputDimensionality: 768}), distanceMeasure: 'COSINE', });
בדיקת רכיב מאחזר
- בממשק המשתמש למפתחים של Genkit, פותחים את רכיב המאחזר
retrievers/placesRetriever. - מזינים את השאילתה הבאה:
{ "content": [ { "text": "UNESCO" } ] } - אפשר גם להציג אפשרויות. לדוגמה, כך מציינים כמה מסמכים צריך להחזיר מאחזור המידע:
{ "limit": 4 } - לוחצים על Run.

אפשר להוסיף מסננים נוספים לנתונים מעבר לדמיון על ידי הוספת סעיפים של where אל האפשרויות.
8. יצירה משולבת-אחזור (RAG) באמצעות Genkit
בקטעים הקודמים יצרתם הנחיות נפרדות שיכולות לטפל בטקסט, ב-JSON ובתמונות, וליצור יעדים לחופשה ותוכן מעניין אחר למשתמשים. הטמעתם גם הנחיה שמחלצת יעדים רלוונטיים ממסד הנתונים של Firestore. עכשיו הגיע הזמן לתזמן את הרכיבים האלה לזרימה מגובשת של יצירת תוכן עם שליפה משופרת (RAG).
בקטע הזה נסביר על מושג חשוב ב-Genkit שנקרא flows (תהליכי עבודה). Flows הן פונקציות עם הקלדה חזקה שאפשר להפעיל באופן מקומי ומרחוק, עם יכולת מלאה של מעקב אחר נתונים. אפשר לנהל ולהפעיל תהליכי עבודה גם באמצעות ה-CLI של Genkit וגם באמצעות ממשק המשתמש למפתחים של Genkit.
- בעורך הקוד, בודקים את ההנחיה ליצירת מסלול הנסיעה:
- פותחים את הקובץ
prompts/itineraryGen.prompt. - שימו לב שההנחיה הורחבה כדי לקבל קלט נוסף, במיוחד נתוני פעילויות שמקורם בכלי לאחזור מידע.
- פותחים את הקובץ
- בממשק המשתמש של Genkit Developer, אפשר לראות את זרימת העבודה של Genkit בקובץ
src/lib/genkit/itineraryFlow.ts.
טיפ: כדי לייעל את ניפוי הבאגים, כדאי לחלק זרימות ארוכות לשלבים קטנים יותר ונוחים לניהול. - כדי לשפר את התהליך, אפשר לשלב שלב של 'תיאור תמונה':
- מאתרים את התגובה
TODO: 2(בסביבות שורה 81). כאן תוכלו לשפר את התהליך. - מחליפים את הפלייסהולדר הריק
imgDescriptionבבלוקai.run('imgDescription', ...)שיוצר תיאור מ-tripDetails.imageUrls.
- מאתרים את התגובה
- בודקים את התהליך:
- עוברים אל
flows/itineraryFlow. - משתמשים בקלט הבא כדי לבדוק שההפעלה של
itineraryFlowעם השלב החדש שנוסף בוצעה בהצלחה:{ "request": "Sightseeing in Paris", "imageUrls": [ "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg/556px-La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg" ] } - לוחצים על Run.
- בודקים את הפלט שנוצר, שצריך לכלול את תיאור התמונה בהצעה למסלול הטיול.

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

RAG לאפליקציית האינטרנט שלכם
- כדי לוודא שאפליקציית האינטרנט עדיין פועלת, עוברים אל http://localhost:3000/ בדפדפן.
- אם אפליקציית האינטרנט כבר לא פועלת, מריצים את הפקודות הבאות במסוף:
npm install npm run dev - אפשר לעיין בדף של אפליקציית האינטרנט Dream Your Vacation (http://localhost:3000/gemini).
- כדי לראות דוגמה לשילוב עם Next.js, אפשר לעיין בקוד המקור (
src/app/gemini/page.tsx).




9. פריסת האפליקציה באמצעות Firebase App Hosting
השלב האחרון בתהליך הזה הוא פריסת אפליקציית האינטרנט. תשתמשו ב-Firebase App Hosting, פתרון אירוח שמודע למסגרות, שנועד לפשט את הפריסה של אפליקציות Next.js ו-Angular בשרת עורפי בלי שרת (serverless).
- שומרים את השינויים במאגר git המקומי ואז מעלים אותם ל-GitHub.
- במסוף Firebase, עוברים אל App Hosting בפרויקט Firebase.
- לוחצים על Get started (שנתחיל?) > Connect to GitHub (קישור ל-GitHub).
- בוחרים את החשבון ב-GitHub ואת המאגר. לוחצים על הבא.
- בקטע הגדרת פריסה > ספריית הבסיס, משאירים את ערך ברירת המחדל. כדי להשתמש בהשקות אוטומטיות, מפעילים את האפשרות השקות אוטומטיות מופעלות.
- בקטע Live branch, בוחרים את הענף main במאגר GitHub. לוחצים על הבא.
- מזינים מזהה לשרת העורפי (לדוגמה,
compass). - כשמופיעה השאלה אם ליצור או לשייך אפליקציית אינטרנט ב-Firebase, בוחרים באפשרות בחירת אפליקציית אינטרנט קיימת ב-Firebase ובוחרים את האפליקציה שיצרתם בשלב מוקדם יותר ב-codelab הזה.
- לוחצים על סיום ופריסה.
מעקב אחר סטטוס הפריסה
תהליך הפריסה יימשך כמה דקות. אפשר לעקוב אחרי ההתקדמות בקטע App Hosting במסוף Firebase.
מתן הרשאות לחשבון השירות
כדי שהקצה העורפי של Node.js יוכל לגשת למשאבי Vertex AI, צריך להקצות את התפקיד aiplatform.user לחשבון השירות של האפליקציה:
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member "serviceAccount:firebase-app-hosting-compute@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/aiplatform.user"
אחרי שהתהליך יסתיים, משתמשים יוכלו לגשת לאפליקציית האינטרנט.
פריסה מחדש אוטומטית
Firebase App Hosting מייעל עדכונים עתידיים. בכל פעם שתדחפו שינויים להסתעפות הראשית של מאגר GitHub, שירות Firebase App Hosting יבנה מחדש את האפליקציה ויפרוס אותה מחדש באופן אוטומטי, כדי שהמשתמשים תמיד ייהנו מהגרסה העדכנית.
10. סיכום
כל הכבוד על השלמת ה-Codelab המקיף הזה!
השתמשתם בהצלחה ביכולות של Genkit, Firestore ו-Vertex AI כדי ליצור "תהליך" מתוחכם שמפיק המלצות מותאמות אישית לחופשה על סמך העדפות המשתמשים וההשראה שלהם, תוך התבססות על הנתונים של האפליקציה.
במהלך התהליך הזה, צברתם ניסיון מעשי בדפוסי הנדסת תוכנה חיוניים, שחשובים לבניית אפליקציות חזקות של AI גנרטיבי. הדפוסים האלה כוללים:
- ניהול הנחיות: ארגון הנחיות ותחזוקה שלהן כקוד, כדי לשפר את שיתוף הפעולה ואת ניהול הגרסאות.
- תוכן מולטי-מודאלי: שילוב של סוגי נתונים מגוונים, כמו תמונות וטקסט, כדי לשפר את האינטראקציות עם ה-AI.
- סכימות של קלט/פלט: ארגון הנתונים לשילוב ואימות חלקים באפליקציה.
- מאגרי וקטורים: שימוש בהטמעות וקטוריות לחיפוש יעיל של דמיון ולאחזור מידע רלוונטי.
- אחזור נתונים: הטמעה של מנגנונים לאחזור נתונים ממסדי נתונים ושילוב שלהם בתוכן שנוצר על ידי AI.
- שליפה משופרת גנרטיבית (RAG): שילוב של טכניקות שליפה עם AI גנרטיבי כדי ליצור פלט מדויק ורלוונטי להקשר.
- אינסטרומנטציה של Flow: בנייה ותזמור של תהליכי עבודה מורכבים מבוססי-AI לביצוע חלק וניתן לניראות.
אם תלמדו את המושגים האלה ותיישמו אותם בסביבת Firebase, תהיו מוכנים לצאת להרפתקאות משלכם עם AI גנרטיבי. אתם יכולים לחקור את האפשרויות הרבות, ליצור אפליקציות חדשניות ולהמשיך להרחיב את גבולות האפשרויות של AI גנרטיבי.
אפשרויות פריסה חלופיות
Genkit מציע מגוון אפשרויות פריסה שיתאימו לצרכים הספציפיים שלכם, כולל:
- Cloud Functions for Firebase
- Cloud Run
- Next.js
- כל סביבת Node.js
- Genkit תומך גם ב-Go
פשוט בוחרים את האפשרות שהכי מתאימה לכם על ידי הפעלת הפקודה הבאה בתוך תיקיית הצומת (package.json):
npx genkit start
השלבים הבאים
- כדאי להתנסות בהנחיות ולנצל את חלונות ההקשר הגדולים ב-Google AI Studio או ב-Vertex AI Studio.
- מידע נוסף על חיפוש באמצעות AI גנרטיבי עם שליפה משופרת (RAG)
- אפשר לעיין במסמכים הרשמיים של Genkit.
- מידע נוסף על יכולות החיפוש לפי דמיון ב-Firestore וב-Cloud SQL ל-PostgreSQL
- הפעלת פונקציות מאפשרת לכם לצלול לעומק של תהליכי עבודה עם AI גנרטיבי.