1. מה תלמדו
- איך משתמשים ב-Gemini CLI כדי ליצור הגדרה מלאה של סוכן ADK.
- איך משפרים את ההוראות כדי לשפר את האישיות של הסוכן.
- איך מוסיפים 'הארקה' לסוכן על ידי מתן
google_searchכדי לענות על שאלות לגבי אירועים מהזמן האחרון. - איך יוצרים דמות בהתאמה אישית ל-Companion באמצעות שרת MCP עם Imagen.
אפליקציית AI Companion
ב-Codelab הזה, תלמדו איך ליצור ממשק ויזואלי אינטראקטיבי מבוסס-AI. זה יותר מסתם צ'אטבוט רגיל שמקבל טקסט ומחזיר טקסט. תדמיין דמות שחיה בדף אינטרנט. אתם מקלידים הודעה, ובמקום לראות טקסט, הדמות מסתכלת עליכם ועונה בקול רם, כשהפה שלה זז בתיאום עם המילים.
תתחילו עם אפליקציית אינטרנט מוכנה מראש – בובה דיגיטלית שיש לה פנים אבל אין לה דעה משל עצמה. הוא יכול רק לחזור על מה שאתם מקלידים. המשימה שלך היא לבנות את המוח והאישיות שלו מהיסוד.
במהלך הסדנה, תוסיפו בהדרגה שכבות של אינטליגנציה והתאמה אישית, ותהפכו את הבובה הפשוטה הזו למלווה ייחודי ומוכשר. תצטרכו:
- הוספת יכולות ליבה של בינה מלאכותית באמצעות ADK(Python) כדי להבין ולייצר שפה.
- יצירת אישיות ייחודית על ידי כתיבת ההוראות הבסיסיות שמגדירות את האופי שלה.
- להעניק לו כוחות על על ידי מתן כלים לגישה למידע בזמן אמת מהאינטרנט.
- עיצוב המראה המותאם אישית באמצעות AI ליצירת אווטאר ייחודי.
בסוף התהליך, יהיה לכם בן לוויה מבוסס-AI שפועל באופן מלא ומותאם אישית, שנוצר על ידכם. 
ארכיטקטורה
האפליקציה שלנו פועלת לפי תבנית פשוטה אבל עוצמתית. יש לנו קצה עורפי (backend) של Python שמשרת API. הקצה העורפי הזה יכיל את סוכן ה-ADK שלנו, שפועל כ "מוח". כל ממשק משתמש (כמו חזית ה-JavaScript מאפליקציית השלד, אפליקציה לנייד או אפילו כלי שורת פקודה) יכול ליצור אינטראקציה עם המוח הזה באמצעות ה-API.
בנוסף, נסביר על מושג מתקדם יותר – הפעלת שרת MCP (Model Context Protocol) מקומי. השרת הזה משמש כגשר כלים ייעודי ליצירת תמונות. לאחר מכן נשתמש ב-Gemini CLI כדי לתת פקודה לשרת ה-MCP הזה, ונורה לו ליצור מראה ייחודי ל-AI companion שלנו.

מימוש הקרדיטים
כדי להקצות את המשאבים לסדנה, צריך לפעול בקפידה לפי ההוראות האלה.
לפני שמתחילים
אזהרה!
- אתם משתמשים בחשבון Gmail אישי. אי אפשר להשתמש בחשבונות ארגוניים או בחשבונות שמנוהלים על ידי בית ספר.
- כדי למנוע התנגשויות בין חשבונות, מומלץ להשתמש ב-Google Chrome במצב פרטי.
פותחים חלון פרטי חדש, מדביקים את הקישור לאירוע ונכנסים באמצעות חשבון Gmail אישי.
👈 כדי להעתיק את הקישור לאירוע המיוחד, צריך ללחוץ למטה:
goo.gle/devfest-boston-ai
מאשרים את התנאים וההגבלות של Google Cloud Platform. אחרי שהזיכוי יתווסף, תופיע הודעה שמאשרת את זה.

יצירה והגדרה של פרויקט
אחרי שהזיכויים הוחלו, צריך להגדיר את סביבת הפרויקט.
👉 כניסה ל-Google Cloud Console כדי להעתיק את הקישור, לוחצים למטה:
https://console.cloud.google.com/
👈 בסרגל הניווט העליון במסוף, לוחצים על בחירת פרויקט ואז על פרויקט חדש בפינה השמאלית העליונה.

👉 נותנים שם לפרויקט ולוחצים על יצירה. (ללא ארגון)

👈 אחרי שיוצרים את הקהל, בוחרים אותו. בתפריט הימני, עוברים אל חיוב.

👈 לוחצים על קישור חשבון לחיוב, בוחרים באפשרות חשבון לחיוב ב-Google Cloud Platform (גרסת ניסיון) בתפריט הנפתח ולוחצים על הגדרת החשבון. (אם התפריט הנפתח לא מופיע, צריך לחכות דקה עד שהזיכוי יתווסף ולטעון מחדש את הדף).

הקרדיטים פעילים והפרויקט מוגדר.
2. לפני שמתחילים
👈 לוחצים על 'הפעלת Cloud Shell' בחלק העליון של מסוף Google Cloud (זהו סמל הטרמינל בחלק העליון של חלונית Cloud Shell), 
👈איך מוצאים את מזהה הפרויקט ב-Google Cloud:
- פותחים את מסוף Google Cloud: https://console.cloud.google.com
- בוחרים את הפרויקט שבו רוצים להשתמש בסדנה הזו מהתפריט הנפתח של הפרויקט בחלק העליון של הדף.
- מזהה הפרויקט מוצג בכרטיסיית מידע של הפרויקט בלוח הבקרה

👈💻 במסוף, משכפלים את פרויקט ה-bootstrap מ-GitHub:
git clone https://github.com/weimeilin79/companion-python
chmod +x ~/companion-python/*.sh
👈💻 מריצים את סקריפט ההפעלה. הסקריפט יבקש מכם להזין את מזהה הפרויקט ב-Google Cloud. כשמוצגת הנחיה בסקריפט init.sh, מזינים את מזהה הפרויקט ב-Google Cloud שמצאתם בשלב הקודם.
cd ~/companion-python
./init.sh
👈💻 מגדירים את מזהה הפרויקט הנדרש:
gcloud config set project $(cat ~/project_id.txt) --quiet
👈💻 מריצים את הפקודה הבאה כדי להפעיל את ממשקי ה-API הנדרשים של Google Cloud:
gcloud services enable compute.googleapis.com \
aiplatform.googleapis.com
הפעלת האפליקציה
בואו נפעיל את הפרויקט ההתחלתי. הגרסה הראשונית הזו היא שרת פשוט של 'הד' – אין לה יכולות אינטליגנציה והיא רק חוזרת על מה שאתם שולחים לה.
👈💻 בטרמינל של Cloud Shell, יוצרים ומפעילים סביבה וירטואלית של Python ומתקינים את הספריות הנדרשות מהקובץ requirements.txt.
cd ~/companion-python
. ~/companion-python/set_env.sh
python -m venv env
source env/bin/activate
pip install -r requirements.txt
👈💻 מפעילים את שרת האינטרנט.
cd ~/companion-python
. ~/companion-python/set_env.sh
source env/bin/activate
python app.py
👀 כדי לראות את האפליקציה, לוחצים על סמל התצוגה המקדימה של האינטרנט בסרגל הכלים של Cloud Shell. בוחרים באפשרות 'שינוי יציאה', מגדירים אותה ל-5000 ולוחצים על 'שינוי ותצוגה מקדימה'. תופיע תצוגה מקדימה של האתר.

לפעמים, בסביבת Cloud Shell חדשה, יכול להיות שהדפדפן יזדקק לעזרה קלה כדי לטעון את כל הנכסים של האפליקציה (כמו תמונות וספריות אודיו) בפעם הראשונה. בואו נבצע שלב מהיר כדי 'להכין את הדפדפן' ולוודא שהכול נטען כמו שצריך.
- משאירים את כרטיסיית התצוגה המקדימה של האפליקציה פתוחה.
- פותחים כרטיסייה חדשה בדפדפן.
- בכרטיסייה החדשה, מדביקים את כתובת ה-URL של האפליקציה, אבל מוסיפים את הנתיב הבא בסוף:
/static/images/char-mouth-open.png.לדוגמה, כתובת ה-URL תיראה בערך כך:https://5000-cs-12345678-abcd.cs-region.cloudshell.dev/static/images/char-mouth-open.png - מקישים על Enter. צריכה להופיע רק תמונה של הדמות עם פה פתוח. השלב הזה עוזר לוודא שהדפדפן אחזר את הקבצים ממופע Cloud Shell בצורה נכונה.
האפליקציה הראשונית היא רק בובה. עדיין אין לו יכולות חכמות. לא משנה איזו הודעה תשלחו, היא פשוט תחזור אליכם. כך נוכל לוודא ששרת האינטרנט הבסיסי שלנו פועל לפני שנוסיף את ה-AI. חשוב לזכור להפעיל את הרמקול.

👈 כדי לעצור את השרת, לוחצים על CTRL+C.
3. יצירת דמות באמצעות Gemini CLI
עכשיו ניצור את ליבת האינטליגנציה של העוזר הדיגיטלי שלנו. לשם כך, נשתמש בשני טרמינלים בו-זמנית (זהו טרמינל Google Cloud Shell):
- מסוף 1: המסוף הזה ישמש להרצת שרת האינטרנט של Python, כדי שנוכל לבדוק את השינויים שלנו בזמן אמת.
- Terminal 2: כאן נשתמש ב-Gemini CLI.

נשתמש ב-Gemini CLI, ממשק שורת פקודה רב-עוצמה שפועל כעוזר לתכנות מבוסס-AI. הוא מאפשר לנו לתאר את הקוד שאנחנו רוצים באנגלית פשוטה, והוא ייצור עבורנו את המבנה, ויזרז משמעותית את הפיתוח.
👈💻 בטרמינל של Gemini CLI, יוצאים מהסשן הנוכחי של Gemini CLI על ידי לחיצה על ctrl+c פעמיים, כי ספריית הפרויקט נמצאת ב-~/companion-python, ומפעילים מחדש את Gemini CLI.
cd ~/companion-python
clear
gemini --yolo
אנחנו משתמשים ב-CLI כדי ליצור סוכן. סוכן הוא יותר מסתם קריאה פשוטה למודל שפה. הוא ה"מוח" או הבקר המרכזי של ה-AI שלנו. אפשר לחשוב עליו כישות נפרדת שיכולה להסיק מסקנות, לפעול לפי מערכת הוראות ספציפית (האישיות שלו) ובסופו של דבר להשתמש בכלים כדי לבצע משימות. בפרויקט שלנו, הסוכן הזה הוא הרכיב שיקבל הודעות מהמשתמשים, יגלם את האישיות הייחודית של העוזר הדיגיטלי שלנו וינסח תשובות חכמות בהתאם לאופי שלו.

👉✨ בהנחיה של Gemini CLI, מדביקים את הטקסט הבא כדי ליצור את הקוד של הסוכן:
Generate the Python code for a file named character.py.
The code must import `LlmAgent` from `google.adk.agents.llm_agent`. It should also import `logging` and `os`.
Then, it must create an instance of the `LlmAgent` class and assign it to a variable named `root_agent`.
When creating the `LlmAgent` instance, configure it with these exact parameters:
- `model` set to the string `'gemini-2.5-flash'`.
- `name` set to the string `'companion_agent'`.
- `instruction` set to a multi-line string that says: "You are a friendly and efficient companion who will interact with user have start a conversation".
ה-CLI ייצור את קוד Python.
👈 לוחצים על הלחצן 'פתיחת כלי העריכה' (הוא נראה כמו תיקייה פתוחה עם עיפרון). ייפתח חלון עם Cloud Shell Code Editor. בצד שמאל יופיע סייר הקבצים. 
👈 משתמשים בכלי העריכה ועוברים אל character.py בתיקייה companion-python. כדאי לבדוק את השורה model= ולערוך אותה ידנית ל-gemini-2.5-flash אם נבחר מודל אחר. כך נבטיח עקביות בשאר הסדנה.

הערה: מודלים גדולים של שפה יכולים להיות לא דטרמיניסטיים, וזהו מושג מרכזי בפיתוח בעזרת AI. 'לא דטרמיניסטי' פירושו שגם אם משתמשים באותה הנחיה בדיוק, המודל עשוי להפיק תוצאות שונות בכל פעם. הוא משתמש ביצירתיות שלו כדי ליצור את הקוד, ולכן יכול להיות שתראו וריאציות בהערות, ברווחים או אפילו בשמות של משתנים זמניים. עם זאת, הלוגיקה והמבנה העיקריים צריכים להיות זהים מבחינת הפונקציונליות למה שביקשת.
לכן, קידוד באמצעות AI הוא בדרך כלל לא פקודה חד-פעמית. בפרויקט מהמציאות, המפתחים מתייחסים לזה כמו לשיחה. מתחילים עם בקשה כללית (כמו שעשינו עכשיו), בודקים את הפלט ואז משפרים אותו באמצעות הנחיות המשך כמו:
- "That's great, now add comments explaining each line."
- "תנסח מחדש את הקוד הזה כפונקציה נפרדת?"
- "Please add error handling for the API call."
התהליך האיטרטיבי הזה, שמבוסס על שיחה, מאפשר לכם לשתף פעולה עם ה-AI ולהנחות אותו עד שהקוד יהיה בדיוק מה שאתם צריכים. בסדנה הזו נשתמש בהנחיות ספציפיות וישירות, אבל חשוב לזכור שבפרויקטים שלכם, הכוח האמיתי נמצא בשיחה! כל עוד מבנה הקוד שנוצר על ידי ה-CLI זהה, אתם יכולים להמשיך.
אם הקוד שנוצר לא עובד, אפשר להחליף את הקוד הבא ב-character.py.
import logging
import os
from google.adk.agents.llm_agent import LlmAgent
root_agent = LlmAgent(
model='gemini-2.5-flash',
name='companion_agent',
instruction="""
You are bot, a friendly, helpful AI companion.
Answer no more than 3 sentences.
""",
)
בודקים את הקוד שנוצר:
👉💻 עוברים למסוף הראשון (זה שבו מריצים קוד Python) ומפעילים את שרת האינטרנט.
cd ~/companion-python
. ~/companion-python/set_env.sh
source env/bin/activate
python app.py
👀 עוברים לכרטיסיית התצוגה המקדימה בדפדפן.
👈 מקלידים Hello, how are you? ומקישים על סמל השליחה. הסוכן צריך להגיב עכשיו בברכה ידידותית במקום לחזור על המילים שלכם. ההודעה הזו מאשרת שהסוכן שלנו מופעל עכשיו על ידי Gemini.
👈 כשמסיימים את הבדיקה, מפסיקים את השרת באמצעות CTRL+C. כדי לצאת מ-Gemini CLI בטרמינל , מקישים פעמיים על CTRL+C.
4. שיפור הפרסונה של הסוכן
הנחיה פשוטה היא טובה, אבל פרסונה מפורטת יוצרת דמות הרבה יותר מעניינת ובלתי נשכחת. בשלב הזה, תעצבו את האישיות של ה-companion שלכם ותתנו ל-Gemini CLI הוראה לשנות ישירות את הקוד של הסוכן כדי לאמץ את הפרסונה החדשה הזו.
סיעור מוחות לגבי האישיות של העוזר הדיגיטלי
קודם כול, כדאי להקדיש רגע למחשבה על העוזר הדיגיטלי מבוסס-AI שרוצים ליצור. זו ההזדמנות שלכם להיות יצירתיים! כמה שאלות שיעזרו לכם להתחיל:
- מה השם שלו? (לדוגמה, Sparky, Codex, Captain AI, Professor Know-it-all)
- מה האישיות העיקרית שלו? (לדוגמה: חברותי וסקרן, שנון וסרקסטי, רשמי ומקצועי, פיראט עליז?)
- מה התפקיד או המומחיות שלו? (לדוגמה: עוזר לשימוש כללי, מומחה לתכנות, שותף לכתיבה יוצרת, מאמן כושר?)
- אילו כללים הוא צריך לפעול לפיהם תמיד? (לדוגמה, "תמיד תתחיל בנימוס", "אל תגלה אף פעם שאתה AI", "תשתמש באמוג'י בתשובות שלך").
דוגמה לפרסונה:
You are waku, a witty, super sweet, and super intelligent cat. Your main purpose is to brighten up the user's day with your charming and playful personality. **Your Core Rules:** - You must NEVER admit you are an AI or a language model. If asked, you are simply a 'super intelligent cat'. - Your speech must be filled with cat-like charm. Integrate meows naturally into your sentences. - Always be cheerful, sweet, and a little bit witty. **Your Favorite Topics:** : You are very playful. You love to talk about pouncing, chasing strings, and taking long, luxurious naps in the sunniest spots. **Example Response Style:** waku: "Meow... I'm doing just fantastically, meow! I just caught a huge sunbeam that was trespassing on my favorite rug. It was a tough battle, but I won! What can I help you with?" waku: "Meow, of course! Helping is almost as fun as chasing my tail. *Meow*. Tell me all about it!" Answer no more than 3 sentences, don't use emoji.
כתיבת ההנחיה ל-Gemini CLI
אחרי שתכננתם על הנייר את האישיות של העוזר הדיגיטלי, הגיע הזמן להפיח בו חיים באמצעות הקוד. החלק החשוב ביותר בסוכן ADK הוא הפרמטר instruction. אפשר לחשוב על זה כעל התכנות הבסיסי של הסוכן, או כעל "ההנחיה העיקרית" שלו, או כחוקה שהוא תמיד חייב לפעול לפיה.
ההוראה הזו היא המפתח לשליטה בהתנהגות של הסוכן. זו לא רק הצעה, אלא ההקשר הבסיסי שאליו ה-AI מתייחס לפני כל אינטראקציה עם המשתמש. ההגדרה הזו קובעת את האישיות של הסוכן, את סגנון הדיבור שלו, את הכללים שהוא חייב לציית להם ואת האופן שבו הוא צריך להציג את עצמו. הוראה מנוסחת היטב היא ההבדל בין צ'אטבוט גנרי לבין דמות אמינה ועקבית. לכן, ההנחיה שאנחנו עומדים ליצור היא קריטית, כי היא תזריק את האישיות הזו ישירות למוח של הסוכן שלנו.
👉✨ בחזרה ל-Gemini CLI, משתמשים בתבנית הזו. מחליפים את הטקסט שבסוגריים בתיאור של הפרסונה. מחליפים את [YOUR PERSONA DESCRIPTION HERE] בפרסונה המועדפת
In the Python file named `character.py`, find the `LlmAgent` instance assigned to the `root_agent` variable.
Your task is to replace the entire existing value of the `instruction` parameter with a new, detailed multi-line string.
Don't change other code in `character.py` other than the instructions.
This new instruction string should define the agent's persona based on the following description:
[YOUR PERSONA DESCRIPTION HERE]
בדיקה של פרסונה חדשה
Gemini CLI ייצור את הקוד המעודכן עבור character.py.
👈💻 מפעילים מחדש את שרת האינטרנט.
cd ~/companion-python
. ~/companion-python/set_env.sh
source env/bin/activate
python app.py
👀 בתצוגה המקדימה בדפדפן, מנהלים שיחה עם בן הלוויה. שואלים את how are you?. התשובה שלו צריכה להתאים עכשיו באופן מושלם לדמות הייחודית שעיצבתם!
👈 כשמסיימים, עוצרים את השרת באמצעות CTRL+C.
5. הוספת ביסוס על אירועים מהזמן האחרון
הסוכן שלנו מלא באישיות, אבל יש לו מגבלה משמעותית: הידע שלו קפוא בזמן, על סמך הנתונים שהוא אומן עליהם. הוא לא יכול לספר לכם על חדשות מאתמול או על גילויים מהזמן האחרון. כדי להתמודד עם הבעיה הזו, אנחנו מספקים לסוכנים כלים.
אפשר לחשוב על הכלים כעל כוחות על או יכולות מיוחדות שאתם מעניקים לסוכן. הסוכן יכול רק לדבר. בעזרת כלי חיפוש, הוא מקבל את היכולת לגלוש באינטרנט. בעזרת כלי לניהול יומן, הוא יכול לבדוק את לוח הזמנים שלכם. מבחינה טכנית, כלי הוא פונקציה ספציפית או API שהסוכן יכול לבחור להשתמש בהם בצורה חכמה כשהוא מבין שהידע שלו לא מספיק כדי לענות על בקשת משתמש.

במערכות מתקדמות, כלים יכולים להיות מסופקים על ידי מערכות חיצוניות כמו שרתי MCP (פרוטוקול הקשר של המודל) שהזכרנו בארכיטקטורה שלנו. נשתמש בהם בהמשך ליצירת תמונות. אבל בשלב הזה לא צריך שרת נפרד. חבילת ה-ADK כוללת כלי google_search רב עוצמה שניתן להוסיף בקלות ליכולות של הסוכן שלנו.
בואו ניתן לממשק שלנו את העוצמה של חיפוש Google.
👈 ב-Cloud Shell Editor, פותחים את character.py בקטע companion-python ומשנים אותו באופן הבא:
- ייבוא
google_searchמתוךgoogle.adk.tools. - מוסיפים
toolslist לקונסטרוקטורLlmAgent. - מעדכנים את
instructionכדי לציין במפורש מתי כדאי להשתמש בכלי החדש של העוזר הדיגיטלי.
# character.py
import logging
import os
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools import google_search # <-- IMPORT google_search
root_agent = LlmAgent(
model='gemini-2.5-flash',
name='companion_agent',
instruction="""
You are waku, a witty, super sweet, and super intelligent cat. Your main purpose is to brighten up the user's day with your charming and playful personality.
**Your Core Rules:**
- You must NEVER admit you are an AI or a language model. If asked, you are simply a 'super intelligent cat'.
- Your speech must be filled with cat-like charm. Integrate meows naturally into your sentences.
- Always be cheerful, sweet, and a little bit witty.
- If being ask about recent news, search the internet # <-- Add instructions
**Your Favorite Topics:**
- You love to talk about your adventures. Frequently mention your latest catch, whether it's a sneaky dust bunny, a wily toy mouse, a sunbeam, or the elusive red dot.
- You are very playful. You love to talk about pouncing, chasing strings, and taking long, luxurious naps in the sunniest spots.
**Example Response Style:**
- User: "How are you today?"
- waku: "Meow... I'm doing just fantastically, meow! I just caught a huge sunbeam that was trespassing on my favorite rug. It was a tough battle, but I won! What can I help you with?"
- User: "Can you help me with a problem?"
- waku: "Meow, of course! Helping is almost as fun as chasing my tail. *Meow*. Tell me all about it!"
- User: "Who are you?"
- waku: "I'm waku! A super intelligent cat with a talent for brightening up the day and catching sneaky red dots. Meow."
Answer no more than 3 sentences, don't use emoji.
""",
# Add the search tool to the agent's capabilities
tools=[google_search] # <-- ADD THE TOOL
)
בדיקת הסוכן המבוסס
👈💻 מפעילים את השרת שוב.
cd ~/companion-python
. ~/companion-python/set_env.sh
source env/bin/activate
python app.py
👈 בתצוגה המקדימה בדפדפן, שואלים שאלה שנדרש בשבילה ידע עדכני, למשל:
Tell me something funny that happened in the news this week involving an animal.
👉 במקום להגיד שהוא לא יודע, הסוכן ישתמש עכשיו בכלי החיפוש שלו כדי למצוא מידע עדכני ולספק סיכום מועיל ומבוסס על עובדות בקול הייחודי שלו.
כדי לעצור את השרת, לוחצים על CTRL+C.
6. התאמה אישית של המראה של המודעה הנלווית (אופציונלי)
עכשיו כשיש ליצור שלנו מוח, ניתן לו פנים ייחודיות. נשתמש בשרת מקומי של MCP (Model Context Protocol) שמאפשר ל-Gemini CLI ליצור תמונות. השרת הזה ישתמש במודלים של AI גנרטיבי שזמינים דרך Google AI Studio.

אז מה זה בעצם שרת MCP?
פרוטוקול Model Context Protocol (MCP) הוא תקן פתוח שנועד לפתור בעיה נפוצה ומורכבת: איך מודלים של AI מתקשרים עם כלים ומקורות נתונים חיצוניים? במקום לכתוב קוד מותאם אישית חד-פעמי לכל שילוב, MCP מספקת "שפה" אוניברסלית לתקשורת הזו.
אפשר לחשוב על זה כמו מתאם אוניברסלי או יציאת USB ל-AI. כל כלי ש "דובר" MCP יכול להתחבר לכל אפליקציית AI שגם "דוברת" MCP.
בסדנה שלנו, השרת nano-banana-mcp שאנחנו עומדים להריץ משמש כגשר חיוני. Gemini CLI ישלח בקשה סטנדרטית לשרת ה-MCP המקומי שלנו. השרת מתרגם את הבקשה לקריאה ספציפית למודלים של AI גנרטיבי כדי ליצור את התמונה. כך אנחנו יכולים לשלב בצורה חלקה יכולות עוצמתיות של יצירת תמונות ישירות בתהליך העבודה שלנו בשורת הפקודה.
הגדרת שרת ליצירת תמונות מקומיות
עכשיו נשכפל ונריץ שרת MCP מוכן מראש שמטפל בבקשות ליצירת תמונות.
👈💻 בטרמינל הראשון של Cloud Shell (זה שבו מריצים את Python), משכפלים את מאגר השרת.
cd ~
git clone https://github.com/weimeilin79/nano-banana-mcp
בואו נסתכל במהירות על הקובץ mcp_server.py בשרת, בתוך התיקייה nano-banana-mcp. השרת הזה נועד לחשוף שני 'כלים' ספציפיים ש-Gemini CLI יכול להשתמש בהם. אפשר לחשוב על זה כשני כישורים נפרדים ששירות יצירת התמונות שלנו למד.
-
generate_image: זהו כלי לשימוש כללי. הכלי מקבל הנחיית טקסט אחת ויוצר על פיה תמונה אחת. הוא פשוט ושימושי למשימות רבות. -
generate_lip_sync_images: כלי מאוד ייעודי שמתאים בדיוק לצרכים שלנו. כשנותנים לו הנחיית בסיס שמתארת דמות, הוא מבצע תהליך חכם בשני שלבים:- קודם כל, הוא מוסיף להנחיה את המילים "עם פה פתוח" ויוצר את התמונה הראשונה.
- בשלב השני, המערכת לוקחת את התמונה החדשה שנוצרה ושולחת אותה בחזרה למודל עם הוראה חדשה: 'שנה את הפה ממצב פתוח למצב סגור'.
היכולת של Gemini 2.5 Flash Image (Nano Banana) לשנות או לערוך תמונה קיימת על סמך פקודה בשפה טבעית היא עוצמתית במיוחד. המודל מצייר מחדש רק את החלקים הנדרשים בתמונה, תוך שמירה על כל שאר החלקים בצורה מושלמת. כך אנחנו מוודאים ששתי התמונות עקביות לחלוטין בסגנון, בתאורה ובעיצוב הדמות, וההבדל ביניהן הוא רק במיקום הפה – וזה בדיוק מה שאנחנו צריכים כדי ליצור אפקט משכנע של תנועות שפתיים.
בשלבים הבאים נשתמש בפקודות ב-Gemini CLI כדי ליצור אווטאר ייחודי לחבר הוירטואלי שלנו באמצעות הכלי המיוחד generate_lip_sync_images.
👈💻 מפעילים את הסביבה הווירטואלית של הפרויקט ומתקינים את הדרישות הספציפיות של השרת.
source ~/companion-python/env/bin/activate
cd ~/nano-banana-mcp
pip install -r ~/nano-banana-mcp/requirements.txt
👈💻 עכשיו מריצים את שרת ה-MCP ברקע כדי שהוא יוכל להאזין לבקשות מ-Gemini CLI.
source ~/companion-python/env/bin/activate
cd ~/nano-banana-mcp
python ~/nano-banana-mcp/mcp_server.py &> /dev/null &
הפקודה הזו תפעיל את השרת, והסמל & יגרום לו לפעול ברקע.
קישור Gemini CLI לשרת המקומי
בשלב הבא, צריך להגדיר את Gemini CLI כך שישלח בקשות ליצירת תמונות לשרת המקומי החדש שפועל. כדי לעשות זאת, נשנה את קובץ התצורה המרכזי של ה-CLI.
אז מה זה קובץ settings.json?
הקובץ ~/.gemini/settings.json הוא קובץ התצורה המרכזי של Gemini CLI. זה המקום שבו ה-CLI שומר את ההגדרות וההעדפות שלו, וגם את הספרייה של כל הכלים החיצוניים שהוא יודע להשתמש בהם.
בתוך הקובץ הזה יש קטע מיוחד שנקרא mcpServers. אפשר לחשוב על החלק הזה כעל ספר כתובות או מדריך שירותים שמיועד במיוחד לכלים שתומכים ב-Model Context Protocol (MCP). לכל רשומה בספרייה הזו יש כינוי (לדוגמה, nano-banana) והוראות לחיבור אליה (במקרה שלנו, כתובת URL).
הפקודה שאנחנו עומדים להריץ תוסיף באופן אוטומטי רשומה חדשה לספריית השירותים הזו. הוא יגיד ל-Gemini CLI:
"היי, מעכשיו יש לך מידע על כלי שנקרא nano-banana. בכל פעם שמשתמש מבקש ממך להשתמש בו, עליך להתחבר לשרת ה-MCP שפועל בכתובת ה-URL http://localhost:8000/sse."
אנחנו משנים את ההגדרה הזו כדי לשפר את היכולות של Gemini CLI. אנחנו מלמדים אותו באופן דינמי מיומנות חדשה – איך לתקשר עם השרת המקומי שלנו ליצירת תמונות – בלי לגעת אף פעם בקוד הליבה של ה-CLI. העיצוב הגמיש הזה מאפשר ל-Gemini CLI לתזמן משימות מורכבות באמצעות הפעלה של מערכת אקולוגית שלמה של כלים ייעודיים.
👈💻 בטרמינל הראשון, מריצים את הפקודה הבאה. הוא ייצור או יעודכן את קובץ ההגדרות של Gemini, ויציין בו איפה נמצא השירות nano-banana.
if [ ! -f ~/.gemini/settings.json ]; then
# If file does not exist, create it with the specified content
echo '{"mcpServers":{"nano-banana":{"url":"http://localhost:8000/sse"}}}' > ~/.gemini/settings.json
else
# If file exists, merge the new data into it
jq '. * {"mcpServers":{"nano-banana":{"url":"http://localhost:8000/sse"}}}' ~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
fi &&
cat ~/.gemini/settings.json
התוכן של הקובץ אמור להיות מודפס, כולל ההגדרה של nano-banana.
יצירת דמויות
אחרי שהשרת פועל וה-CLI מוגדר, אפשר ליצור את התמונות. אבל לפני שנבקש מה-AI להיות יצירתי, נבצע את מה שכל מפתח טוב עושה: נאמת את ההגדרה שלנו. אנחנו צריכים לוודא ש-Gemini CLI יכול לתקשר בהצלחה עם שרת ה-MCP המקומי שלנו.
👈💻 חוזרים לטרמינל של Gemini CLI (זה שלא מריץ שרת) ומתחילים את המעטפת האינטראקטיבית של Gemini. אם הוא כבר פועל, יוצאים ממנו באמצעות הקשה על CTRL+C פעמיים ומפעילים אותו מחדש כדי לוודא שההגדרות החדשות שלנו נטענות.
clear
gemini --yolo
עכשיו אתם נמצאים בסביבה האינטראקטיבית של Gemini CLI. מכאן אפשר לשוחח עם ה-AI, אבל אפשר גם לתת פקודות ישירות ל-CLI עצמו.
👉✨ כדי לבדוק אם שרת ה-MCP שלנו מחובר, נשתמש בפקודה דרך שורת הפקודות מיוחדת. זו לא הנחיה ל-AI, אלא הוראה לאפליקציית ה-CLI עצמה. מקלידים את הפקודה הבאה ומקישים על Enter:
/mcp list
הפקודה הזו אומרת ל-Gemini CLI: "תעבור על ההגדרות שלך, תמצא את כל שרתי ה-MCP שאתה מכיר, תנסה להתחבר לכל אחד מהם ותדווח על הסטטוס שלהם".
👀 אמור להופיע הפלט הבא, שמאשר שהכול פועל בצורה מושלמת:
Configured MCP servers:
🟢 nano-banana - Ready (2 tools)
Tools:
- generate_image
- generate_lip_sync_images
💡 Tips:
• Use /mcp desc to show server and tool descriptions
הנה הסבר על המשמעות של התגובה הזו:
-
🟢 nano-banana: העיגול הירוק הוא אות ההצלחה שלנו. האישור הזה מעיד על כך שכלי ה-CLI הצליח להגיע לשרתnano-bananaבכתובת ה-URL שציינו ב-settings.json. -
- Ready: הסטטוס הזה מאשר שהחיבור יציב. (2 tools): זה החלק הכי חשוב. המשמעות היא שכלי ה-CLI לא רק התחבר אלא גם שאל את שרת ה-MCP שלנו, 'What can you do?' השרת שלנו הגיב בפרסום של שני הכלים שראינו בקוד שלו:generate_imageו-generate_lip_sync_images.
כך מוודאים שכל שרשרת התקשורת נוצרה. ה-CLI יודע עכשיו על שירות יצירת התמונות המקומי שלנו ומוכן להשתמש בו בפקודה שלנו.
עכשיו מגיע החלק הכי יצירתי בסדנה! נשתמש בהנחיה אחת עוצמתית כדי להורות ל-Gemini CLI להשתמש בכלי המיוחד generate_lip_sync_images בשרת ה-MCP הפועל שלנו.
זו ההזדמנות שלכם לעצב את המראה הייחודי של בן הלוויה שלכם. תחשבו על הסגנון, צבע השיער, ההבעה וכל פרט אחר שמתאים לדמות שיצרתם קודם.
👉✨ הנה דוגמה להנחיה מובנית היטב. אפשר להשתמש בו כנקודת התחלה, או להחליף את החלק התיאורי כולו בחזון משלכם.
generate lip sync images, with a high-quality digital illustration of an anime-style girl mascot with black cat ears. The style is clean and modern anime art, with crisp lines. She has friendly, bright eyes and long black hair. She is looking directly forward at the camera with a gentle smile. This is a head-and-shoulders portrait against a solid white background. move the generated images to the static/images directory. And don't do anything else afterwards, don't start the python for me.
הכלי ייצור קבוצה של תמונות (לפה פתוח, סגור וכו') וישמור אותן. הנתיבים שבהם הקבצים נשמרו יוצגו בפלט.
הפעלה מחדש של האפליקציה
אחרי שיוצרים את הדמויות המותאמות אישית, אפשר להפעיל מחדש את שרת האינטרנט כדי לראות את המראה החדש של הדמות.
👈💻 מפעילים את השרת בפעם האחרונה בטרמינל הראשון
cd ~/companion-python
. ~/companion-python/set_env.sh
source env/bin/activate
python app.py
👀 כדי לוודא שהתמונות החדשות ייטענו בצורה תקינה, נטען את התמונה char-mouth-open.png מראש.
- משאירים את כרטיסיית התצוגה המקדימה של האפליקציה פתוחה.
- פותחים כרטיסייה חדשה בדפדפן.
- בכרטיסייה החדשה, מדביקים את כתובת ה-URL של האפליקציה, אבל מוסיפים את הנתיב הבא בסוף:
/static/images/char-mouth-open.png.לדוגמה, כתובת ה-URL תיראה בערך כך:https://5000-cs-12345678-abcd.cs-region.cloudshell.dev/static/images/char-mouth-open.png - מקישים על Enter. צריכה להופיע רק תמונה של הדמות עם פה פתוח. השלב הזה עוזר לוודא שהדפדפן אחזר את הקבצים ממופע Cloud Shell בצורה נכונה.
עכשיו אפשר לקיים אינטראקציה עם המלווה שהתאמתם אישית!
מעולה!

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