1. לפני שמתחילים
ב-codelab הזה תלמדו איך להשתמש ב-Genkit כדי לשלב בינה מלאכותית גנרטיבית באפליקציה שלכם. 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 הזה, תוכלו למצוא את קוד הפתרון בענף end
git.
התקנת 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 ולוחצים על אישור.
התקנת gcloud CLI של 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 (אינטרנט).
- בתיבת הטקסט App nickname (כינוי לאפליקציה), מזינים כינוי קליט לאפליקציה, כמו
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 עם תקופת ניסיון בחינם.
- אם אתם משתתפים בסדנת קוד כחלק מאירוע, כדאי לשאול את מארגן האירוע אם יש קרדיטים ל-Cloud.
מידע נוסף על התמחור של Vertex AI
כדי לשדרג את הפרויקט לתוכנית Blaze, פועלים לפי השלבים הבאים:
- במסוף Firebase, בוחרים באפשרות שדרוג התוכנית.
- בוחרים בתוכנית Blaze. פועלים לפי ההוראות במסך כדי לקשר חשבון לחיוב ב-Cloud לפרויקט.
אם הייתם צריכים ליצור חשבון לחיוב ב-Cloud כחלק מהשדרוג, יכול להיות שתצטרכו לחזור לתהליך השדרוג במסוף Firebase כדי להשלים את השדרוג.
הגדרת Cloud Firestore
- בחלונית הימנית במסוף Firebase, מרחיבים את Build ובוחרים באפשרות Firestore database.
- לוחצים על יצירת מסד נתונים.
- משאירים את הערך
(default)
בשדה מזהה מסד הנתונים. - בוחרים מיקום למסד הנתונים ולוחצים על הבא.
באפליקציה אמיתית, כדאי לבחור מיקום שקרוב למשתמשים. - לוחצים על התחלה במצב בדיקה. חשוב לקרוא את כתב הוויתור בנוגע לכללי האבטחה.
אין להפיץ או לחשוף אפליקציה באופן ציבורי בלי להוסיף כללי אבטחה למסד הנתונים. - לוחצים על יצירה.
הפעלת Vertex AI
משתמשים ב-CLI של gcloud
כדי להגדיר את Vertex AI. בכל הפקודות בדף הזה, צריך להחליף את YOUR_PROJECT_ID
במזהה של פרויקט Firebase.
- במסוף, מגדירים את פרויקט ברירת המחדל עבור Google Cloud SDK:
gcloud config set project YOUR_PROJECT_ID
- אם מופיעה הודעת אזהרה שאומרת "אזהרה: הפרויקט הפעיל לא תואם לפרויקט המכסה בקובץ המקומי של פרטי ברירת המחדל של האפליקציה. יכול להיות שזה יגרום לבעיות בלתי צפויות במכסה", ואז מריצים את הפקודה הבאה כדי להגדיר את פרויקט המכסה:
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.
קישור אפליקציית 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
במזהה הפרויקט.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. Retrieval augmented generation (RAG) with Genkit
בקטעים הקודמים יצרתם הנחיות נפרדות שיכולות לטפל בטקסט, ב-JSON ובתמונות, וליצור יעדים לחופשה ותוכן מעניין אחר למשתמשים שלכם. הטמעתם גם הנחיה שמחלצת יעדים רלוונטיים ממסד הנתונים של Firestore. עכשיו הגיע הזמן לתזמן את הרכיבים האלה לזרימה מגובשת של יצירת תוכן עם שליפה משופרת (RAG).
בקטע הזה נסביר על מושג חשוב ב-Genkit שנקרא תזרים עבודה. Flows הן פונקציות עם הקלדה חזקה שאפשר להפעיל באופן מקומי ומרחוק, עם יכולת מלאה של מעקב אחר נתונים. אפשר לנהל ולהפעיל תהליכי עבודה גם באמצעות ממשק שורת הפקודה (CLI) של Genkit וגם באמצעות ממשק המשתמש למפתחים של Genkit.
- בעורך הקוד, בודקים את ההנחיה ליצירת מסלול הנסיעה:
- פותחים את הקובץ
prompts/itineraryGen.prompt
. - שימו לב שההנחיה הורחבה כדי לקבל קלט נוסף, במיוחד נתוני פעילויות שמקורם בכלי לאחזור מידע.
- פותחים את הקובץ
- בממשק המשתמש למפתחים של Genkit, אפשר לראות את זרימת העבודה של Genkit בקובץ
src/lib/genkit/itineraryFlow.ts
.
טיפ: כדי לייעל את תהליך איתור הבאגים, כדאי לחלק זרימות ארוכות לשלבים קטנים יותר ונוחים לניהול. - משפרים את התהליך על ידי שילוב שלב של 'תיאור תמונה':
- מאתרים את התגובה
TODO: 2
(בסביבות שורה 81). כאן תוכלו לשפר את התהליך. - מחליפים את ה-placeholder הריק
imgDescription
בפלט שנוצר על ידי קריאת ההנחיהimgDescription
.
- מאתרים את התגובה
- בודקים את התהליך:
- עוברים אל
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.
- בודקים את הפלט שנוצר, שצריך לכלול את תיאור התמונה בהצעה למסלול הטיול.
- עוברים אל
- אם נתקלתם בשגיאות או בהתנהגויות לא צפויות, כדאי לבדוק את הכרטיסייה בדיקה כדי לראות פרטים. אפשר גם להשתמש בכרטיסייה הזו כדי לעיין בהיסטוריית ההרצות ממאגר המעקב.
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 בשרת עורפי ללא שרת.
- שומרים את השינויים במאגר 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 מאפשר לעדכן את האפליקציה בקלות בעתיד. בכל פעם שתדחפו שינויים לענף הראשי של מאגר GitHub, שירות Firebase App Hosting יבנה מחדש את האפליקציה ויפרוס אותה מחדש באופן אוטומטי, כדי להבטיח שהמשתמשים תמיד יחוו את הגרסה העדכנית ביותר.
10. סיכום
כל הכבוד על השלמת ה-Codelab המקיף הזה!
השתמשתם בהצלחה ביכולות של Genkit, Firestore ו-Vertex AI כדי ליצור 'תהליך' מתוחכם שמפיק המלצות מותאמות אישית לחופשה על סמך העדפות המשתמשים וההשראה שלהם, תוך התבססות על הנתונים באפליקציה שלכם.
במהלך התהליך הזה, צברתם ניסיון מעשי בדפוסי הנדסת תוכנה חיוניים, שחשובים לבניית אפליקציות חזקות של AI גנרטיבי. הדפוסים האלה כוללים:
- ניהול הנחיות: ארגון הנחיות ותחזוקה שלהן כקוד, כדי לשפר את שיתוף הפעולה ואת בקרת הגרסאות.
- תוכן מולטימודאלי: שילוב של סוגי נתונים מגוונים, כמו תמונות וטקסט, כדי לשפר את האינטראקציות עם ה-AI.
- סכימות של קלט/פלט: ארגון הנתונים לשילוב חלק ולאימות באפליקציה.
- מאגרי וקטורים: שימוש בהטמעות וקטוריות לחיפוש יעיל של דמיון ולאחזור מידע רלוונטי.
- אחזור נתונים: הטמעה של מנגנונים לאחזור נתונים ממסדי נתונים ושילוב שלהם בתוכן שנוצר על ידי AI.
- יצירה משופרת באמצעות אחזור (RAG): שילוב של טכניקות אחזור עם AI גנרטיבי כדי ליצור פלטים מדויקים ורלוונטיים להקשר.
- Flow Instrumentation: בנייה ותזמור של תהליכי עבודה מורכבים של AI לביצוע חלק וניתן לצפייה.
אם תלמדו את המושגים האלה ותיישמו אותם בסביבת Firebase, תוכלו לצאת להרפתקאות משלכם בתחום ה-AI הגנרטיבי. אתם יכולים לחקור את האפשרויות הרבות, ליצור אפליקציות חדשניות ולהמשיך להרחיב את גבולות האפשרויות של AI גנרטיבי.
אפשרויות פריסה חלופיות
Genkit מציע מגוון אפשרויות פריסה שיתאימו לצרכים הספציפיים שלכם, כולל:
- Cloud Functions for Firebase
- Cloud Run
- Next.js
- כל סביבת Node.js
- Genkit תומך גם ב-Go
פשוט בוחרים את האפשרות שהכי מתאימה לכם על ידי הרצת הפקודה הבאה בתוך תיקיית הצומת (package.json
):
npx genkit init
השלבים הבאים
- כדאי להתנסות בהנחיות ולנצל את חלונות ההקשר הגדולים ב-Google AI Studio או ב-Vertex AI Studio.
- מידע נוסף על חיפוש באמצעות AI גנרטיבי עם שליפה משופרת (RAG)
- אפשר לעיין במסמכים הרשמיים של Genkit.
- מידע נוסף על יכולות חיפוש דמיון ב-Firestore וב-Cloud SQL ל-PostgreSQL
- הפעלת פונקציות מאפשרת לכם להעמיק את השימוש בתהליכי עבודה של AI גנרטיבי.