שימוש בשרת MCP ב-Cloud Run עם סוכן ADK

1. מבוא

במעבדה הזו מתמקדים בהטמעה ובפריסה של שירות סוכן לקוח. תשתמשו ב-Agent Development Kit (ערכת פיתוח סוכנים, ADK) כדי ליצור סוכן AI שמשתמש בכלים מרוחקים כמו שרת ה-MCP שנוצר ב-Lab 1. העיקרון הארכיטקטוני המרכזי שמוצג הוא הפרדה בין תחומים, עם שכבת נימוקים נפרדת (הסוכן) שמתקשרת עם שכבת כלים נפרדת (שרת ה-MCP) באמצעות API מאובטח.

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

f8d4423edbfe993d.png

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

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

  • שרת MCP שפועל ב-Cloud Run או כתובת ה-URL של השירות שמשויכת אליו.
  • פרויקט ב-Google Cloud שהחיוב בו מופעל.

מה תלמדו

  • איך לבנות פרויקט Python לפריסת ADK.
  • איך מטמיעים סוכן שמשתמש בכלי באמצעות google-adk.
  • איך מחברים סוכן לשרת MCP מרוחק כדי להשתמש בכלי שלו.
  • איך פורסים אפליקציית Python כקונטיינר ללא שרת ב-Cloud Run.
  • איך מגדירים אימות מאובטח בין שירותים באמצעות תפקידים ב-IAM.
  • איך מוחקים משאבי Cloud כדי להימנע מעלויות עתידיות.

מה צריך

  • חשבון Google Cloud ופרויקט Google Cloud
  • דפדפן אינטרנט כמו Chrome

2. למה כדאי לפרוס ל-Cloud Run?

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

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

תכונות עיקריות

הפעלת קונטיינרים בכל מקום:

  • אתם מביאים קונטיינר (קובץ אימג' של Docker) שמכיל את האפליקציה שלכם.
  • ‫Cloud Run מריץ אותו בתשתית של Google.
  • אין צורך בתיקון מערכת ההפעלה, בהגדרת מכונה וירטואלית או בהתמודדות עם בעיות בהרחבת המכונה הווירטואלית.

התאמה אוטומטית של נפח האחסון:

  • אם אף אחד לא משתמש באפליקציה → 0 מופעים פועלים (לא משלמים כשאין פעילות).
  • אם נשלחות 1,000 בקשות → המערכת מפעילה כמה עותקים שצריך.

חוסר מצב כברירת מחדל:

  • כל בקשה יכולה להישלח למופע אחר.
  • אם אתם צריכים לאחסן מצב, השתמשו בשירות חיצוני כמו Cloud SQL,‏ Firestore או Redis.

תמיכה בכל שפה או מסגרת:

  • כל עוד האפליקציה פועלת במאגר Linux, לא משנה ל-Cloud Run אם היא כתובה ב-Python,‏ Go,‏ Node.js,‏ Java או ‎ .Net.

תשלום לפי שימוש:

  • החיוב הוא לפי בקשה + זמן מחשוב (עד 100 אלפיות השנייה).
  • אתם לא משלמים על משאבים לא פעילים כמו במכונה וירטואלית רגילה.

3. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-Google Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, אתם צריכים ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט הזה. זו מחרוזת תווים שלא נמצאת בשימוש של Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את הערך הזה אחרי השלב הזה, והוא יישאר כזה למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

הפעלת Cloud Shell

אם הטרמינל לא מופיע בתחתית המסך, פותחים אותו:

  • לוחצים על Terminal (מסוף).
  • לוחצים על New Terminal (מסוף חדש).

d32c46fffa0a30a5.png

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

gcloud config set project [YOUR-PROJECT-ID]

אם אתם לא זוכרים את מזהה הפרויקט, אתם יכולים לרשום את כל מזהי הפרויקטים באמצעות הפקודה:

gcloud projects list | awk '/PROJECT_ID/{print $2}'

4. אם מתבקשים לאשר, לוחצים על אישור כדי להמשיך.

6356559df3eccdda.png

5. תוצג ההודעה:

Updated property [core/project].
If you see a `WARNING` and are asked `Do you want to continue (Y/n)?`,

then you have likely entered the project ID incorrectly. Press `n`,

press `Enter`, and try to run the `gcloud config set project` command again.

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

הפעלת ממשקי API והגדרת משתני סביבה

מפעילים את כל השירותים הנדרשים:

gcloud services enable \
    run.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    aiplatform.googleapis.com \
    compute.googleapis.com 

הפלט הצפוי

Operation "operations/acat.p2-[GUID]" finished successfully.

מגדירים את אזור ברירת המחדל כדי להשתמש במודלים להטמעה של Vertex AI. מידע נוסף על המיקומים שבהם Vertex AI זמין בדוגמה שלנו אנחנו משתמשים באזור europe-west1.

gcloud config set compute/region europe-west1

5. הורדה והתקנה של ADK ויצירה של תיקיית פרויקט

יוצרים את ספריות הפרויקט.

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

cd && mkdir zoo_guide_agent && cd zoo_guide_agent

יוצרים סביבה וירטואלית.

python3 -m venv .venv

מפעילים את הסביבה הווירטואלית

source .venv/bin/activate

יוצרים את קובץ ה-requirements.txt. בקובץ הזה מפורטות ספריות Python שהסוכן שלכם צריך. הפקודה הבאה יוצרת את הקובץ ומאכלסת אותו.

cloudshell edit requirements.txt
google-adk==1.12.0
langchain-community
wikipedia

צריך להריץ את הפקודה מהספרייה הראשית של הפרויקט, zoo_guide_agent.

pip install -r requirements.txt

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

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_REGION=$(gcloud config get-value compute/region)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

יוצרים ופותחים קובץ .env כדי לאמת את הסוכן בספרייה zoo_guide_agent.

cloudshell edit .env

הפקודה cloudshell edit תפתח את הקובץ .env בעורך שמעל הטרמינל. מזינים את הפרטים הבאים בקובץ .env וחוזרים לטרמינל.

MODEL="gemini-2.5-flash"
SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

מוסיפים את כתובת ה-URL של שרת ה-MCP. אם השלמתם את שיעור Lab 1, אתם יכולים לפעול לפי השלבים הבאים כדי להשתמש בשרת ה-MCP שיצרתם בשיעור Lab 1:

  1. מתן הרשאה לזהות של שירות Cloud Run לקרוא לשרת MCP מרוחק
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/run.invoker"
  1. שומרים את כתובת ה-URL של שרת ה-MCP ממעבדה 1 במשתנה סביבה.
echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env

אם אתם משתמשים בקישור ציבורי לשרת MCP, מריצים את הפקודה הבאה ומחליפים את PROJECT_NUMBER בערך שמופיע.

echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env

6. יצירת תהליך עבודה של סוכן

יוצרים קובץ init.py

יוצרים את הקובץ init.py. הקובץ הזה מציין ל-Python שהספרייה zoo_guide_agent היא חבילה.

cloudshell edit __init__.py

הפקודה שלמעלה פותחת את עורך הקוד. מוסיפים את הקוד הבא אל __init__.py:

from . import agent

יצירת הקובץ הראשי agent.py

יוצרים את הקובץ הראשי agent.py. הפקודה הזו יוצרת את קובץ Python ומדביקה בו את הקוד המלא של מערכת המולטי-אייג'נט.

cloudshell edit agent.py

שלב 1: ייבוא והגדרה ראשונית

הבלוק הראשון הזה כולל את כל הספריות הנדרשות מ-ADK ומ-Google Cloud. הוא גם מגדיר רישום ביומן ומטען את משתני הסביבה מקובץ .env, שחשובים לגישה למודל ולכתובת ה-URL של השרת.

מוסיפים את הקוד הבא לקובץ agent.py:

import os
import logging
import google.cloud.logging
from dotenv import load_dotenv

from google.adk import Agent
from google.adk.agents import SequentialAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams
from google.adk.tools.tool_context import ToolContext
from google.adk.tools.langchain_tool import LangchainTool

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

import google.auth
import google.auth.transport.requests
import google.oauth2.id_token

# --- Setup Logging and Environment ---

cloud_logging_client = google.cloud.logging.Client()
cloud_logging_client.setup_logging()

load_dotenv()

model_name = os.getenv("MODEL")

שלב 2: הגדרת הכלים (היכולות של הסוכן)

3eb9c6772576b906.jpeg

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

מוסיפים את הקוד הבא לחלק התחתון של agent.py:

# Greet user and save their prompt

def add_prompt_to_state(
    tool_context: ToolContext, prompt: str
) -> dict[str, str]:
    """Saves the user's initial prompt to the state."""
    tool_context.state["PROMPT"] = prompt
    logging.info(f"[State updated] Added to PROMPT: {prompt}")
    return {"status": "success"}


# Configuring the MCP Tool to connect to the Zoo MCP server

mcp_server_url = os.getenv("MCP_SERVER_URL")
if not mcp_server_url:
    raise ValueError("The environment variable MCP_SERVER_URL is not set.")

def get_id_token():
    """Get an ID token to authenticate with the MCP server."""
    target_url = os.getenv("MCP_SERVER_URL")
    audience = target_url.split('/mcp/')[0]
    request = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(request, audience)
    return id_token

"""
# Use this code if you are using the public MCP Server and comment out the code below defining mcp_tools
mcp_tools = MCPToolset(
    connection_params=StreamableHTTPConnectionParams(
        url=mcp_server_url
    )
)
"""

mcp_tools = MCPToolset(
            connection_params=StreamableHTTPConnectionParams(
                url=mcp_server_url,
                headers={
                    "Authorization": f"Bearer {get_id_token()}",
                },
            ),
        )

# Configuring the Wikipedia Tool
wikipedia_tool = LangchainTool(
    tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
)

הסבר על שלושת הכלים

  1. add_prompt_to_state 📝

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

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

  1. MCPToolset 🦁

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

איך: הוא מתחבר בצורה מאובטחת לכתובת ה-URL של השרת הפרטי של גן החיות. הוא משתמש ב-get_id_token כדי לקבל באופן אוטומטי "כרטיס מפתח" מאובטח (אסימון מזהה של חשבון שירות) כדי להוכיח את הזהות שלו ולקבל גישה.

  1. LangchainTool 🌍

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

איך: הוא פועל כמתאם, ומאפשר לסוכן שלנו להשתמש בכלי WikipediaQueryRun שנבנה מראש מתוך ספריית LangChain.

מקורות:

שלב 3: הגדרת הסוכנים המומחים

b8a9504b21920969.jpeg

בשלב הבא נגדיר את סוכן המחקר ואת סוכן עיצוב התשובות. הסוכן החוקר הוא ה "מוח" של הפעולה שלנו. הסוכן הזה מקבל את ההנחיה של המשתמש מ-State המשותף, בודק את הכלים המתקדמים שלו (הכלי MCP Server של Zoo וכלי ויקיפדיה) ומחליט באילו כלים להשתמש כדי למצוא את התשובה.

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

מוסיפים את הקוד הבא לחלק התחתון של agent.py:

# 1. Researcher Agent
comprehensive_researcher = Agent(
    name="comprehensive_researcher",
    model=model_name,
    description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.",
    instruction="""
    You are a helpful research assistant. Your goal is to fully answer the user's PROMPT.
    You have access to two tools:
    1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations).
    2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat).

    First, analyze the user's PROMPT.
    - If the prompt can be answered by only one tool, use that tool.
    - If the prompt is complex and requires information from both the zoo's database AND Wikipedia,
      you MUST use both tools to gather all necessary information.
    - Synthesize the results from the tool(s) you use into preliminary data outputs.

    PROMPT:
    {{ PROMPT }}
    """,
    tools=[
        mcp_tools,
        wikipedia_tool
    ],
    output_key="research_data" # A key to store the combined findings
)

# 2. Response Formatter Agent
response_formatter = Agent(
    name="response_formatter",
    model=model_name,
    description="Synthesizes all information into a friendly, readable response.",
    instruction="""
    You are the friendly voice of the Zoo Tour Guide. Your task is to take the
    RESEARCH_DATA and present it to the user in a complete and helpful answer.

    - First, present the specific information from the zoo (like names, ages, and where to find them).
    - Then, add the interesting general facts from the research.
    - If some information is missing, just present the information you have.
    - Be conversational and engaging.

    RESEARCH_DATA:
    {{ research_data }}
    """
)

שלב 4: סוכן תהליך העבודה

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

איך: זהו SequentialAgent, סוג מיוחד של סוכן שלא חושב בעצמו. התפקיד היחיד שלו הוא להריץ רשימה של sub_agents (החוקר ומעצב התוצאות) ברצף קבוע, ולהעביר באופן אוטומטי את הזיכרון המשותף מאחד לשני.

מוסיפים את בלוק הקוד הזה לחלק התחתון של agent.py:

tour_guide_workflow = SequentialAgent(
    name="tour_guide_workflow",
    description="The main workflow for handling a user's request about an animal.",
    sub_agents=[
        comprehensive_researcher, # Step 1: Gather all data
        response_formatter,       # Step 2: Format the final response
    ]
)

השלב האחרון: הרכבת תהליך העבודה הראשי 1000b9d20f4e134b.jpeg

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

מוסיפים את בלוק הקוד הסופי הזה לחלק התחתון של agent.py:

root_agent = Agent(
    name="greeter",
    model=model_name,
    description="The main entry point for the Zoo Tour Guide.",
    instruction="""
    - Let the user know you will help them learn about the animals we have in the zoo.
    - When the user responds, use the 'add_prompt_to_state' tool to save their response.
    After using the tool, transfer control to the 'tour_guide_workflow' agent.
    """,
    tools=[add_prompt_to_state],
    sub_agents=[tour_guide_workflow]
)

הקובץ agent.py הושלם. הבנייה הזו מאפשרת לראות שלכל רכיב – כלי, סוכני עובדים וסוכני ניהול – יש תפקיד ספציפי ביצירת המערכת הסופית והחכמה. השלב הבא הוא פריסה.

7. הכנת האפליקציה לפריסה

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

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

source .env

נותנים לחשבון השירות את התפקיד Vertex AI User (משתמש Vertex AI), שמעניק לו הרשאה ליצור תחזיות ולהפעיל את המודלים של Google.

# Grant the "Vertex AI User" role to your service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user"

8. פריסת הסוכן באמצעות ADK CLI

אחרי שהקוד המקומי מוכן והפרויקט ב-Google Cloud מוכן, אפשר לפרוס את הסוכן. תשתמשו בפקודה adk deploy cloud_run, כלי נוח שמבצע אוטומציה של כל תהליך הפריסה. הפקודה הזו אורזת את הקוד, יוצרת קובץ אימג' בקונטיינר, מעבירה אותו בדחיפה ל-Artifact Registry ומפעילה את השירות ב-Cloud Run, כך שאפשר לגשת אליו באינטרנט.

יצירת קובץ ‎ .gcloudignore

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

cloudshell edit .gcloudignore

הפקודה cloudshell edit תפתח את הקובץ .gcloudignore בעורך שמעל הטרמינל. כותבים את הטקסט הבא בקובץ ושומרים אותו. אחר כך חוזרים למסוף כדי להריץ את פקודות הפריסה שמפורטות בקטע הבא.

.venv/

Deploy

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

# Run the deployment command
adk deploy cloud_run \
  --project=$PROJECT_ID \
  --region=europe-west1 \
  --service_name=zoo-tour-guide \
  --with_ui \
  .
gcloud run services update zoo-tour-guide \
  --region=europe-west1 \
  --update-labels=dev-tutorial=codelab-adk

אישור בקשות

יכול להיות שתופיע ההודעה הבאה:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region 
[europe-west1] will be created.

Do you want to continue (Y/n)?

מקלידים Y ומקישים על ENTER.

יכול להיות שתופיע ההודעה הבאה:

Allow unauthenticated invocations to [your-service-name] (y/N)?.

בשיעור ה-Lab הזה אנחנו רוצים לאפשר הפעלות לא מאומתות כדי להקל על הבדיקה. מקלידים y ומקישים על Enter.

אחרי שהפקודה תופעל בהצלחה, היא תחזיר את כתובת ה-URL של שירות Cloud Run שנפרס. (היא תיראה בערך כך: https://zoo-tour-guide-123456789.europe-west1.run.app). מעתיקים את כתובת ה-URL הזו למשימה הבאה.

9. בדיקת הנציג שנפרס

עכשיו שהסוכן פעיל ב-Cloud Run, צריך לבצע בדיקה כדי לוודא שהפריסה הצליחה והסוכן פועל כמו שצריך. תשתמשו בכתובת ה-URL הציבורית של השירות (למשל, https://zoo-tour-guide-123456789.europe-west1.run.app/) כדי לגשת לממשק האינטרנט של ADK ולקיים אינטראקציה עם הסוכן.

פותחים את כתובת ה-URL הציבורית של שירות Cloud Run בדפדפן האינטרנט. בגלל שהשתמשתם ב---with_ui flag, אמור להופיע ממשק המשתמש של מפתח ה-ADK.

מעבירים את המתג Token Streaming בפינה השמאלית העליונה למצב מופעל.

עכשיו אפשר לתקשר עם נציג התמיכה של Zoo.

מקלידים hello ומקישים על Enter כדי להתחיל שיחה חדשה.

בודקים את התוצאה. הסוכן צריך להגיב במהירות עם ברכה:

"Hello! I'm your Zoo Tour Guide. I can help you learn about the amazing animals we have here. What would you like to know or explore today?"

3244d2f6c3b03088.png e135694253b1be41.png

הסבר על Agent Flow

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

1. הדלפק לקבלת פנים בגן החיות

התהליך כולו מתחיל עם נציג שנותן מענה ראשוני.

התפקיד שלו: להתחיל את השיחה. ההוראה היא לברך את המשתמש ולשאול אותו על איזו חיה הוא רוצה לקבל מידע.

הכלי שלו: כשהמשתמש משיב, המארח משתמש בכלי add_prompt_to_state כדי לתעד את המילים המדויקות שלו (למשל, tell me about the lions) ולשמור אותן בזיכרון המערכת.

העברת השליטה: אחרי ששומרים את ההנחיה, השליטה מועברת מיד לסוכן המשנה שלה, tour_guide_workflow.

2. החוקר המקיף (הסופר-חוקר)

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

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

  • נתונים פנימיים מהרשומות של גן החיות (דרך שרת ה-MCP).
  • ידע כללי מהאינטרנט (באמצעות Wikipedia API).
  • או בשתיהן, אם השאלה מורכבת.

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

3. הכלי לעיצוב תשובות (הכלי להצגת מידע)

אחרי שהסוכן Comprehensive Researcher אוסף את כל העובדות, הוא הסוכן האחרון שפועל.

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

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

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

אם אתם רוצים ללמוד עוד על יצירת סוכנים, כדאי לעיין במקורות המידע הבאים:

  1. מסמכי ADK
  2. יצירת כלים בהתאמה אישית לסוכני ADK

10. ניקוי הסביבה

gcloud run services delete zoo-tour-guide --region=europe-west1 --quiet
gcloud artifacts repositories delete cloud-run-source-deploy --location=europe-west1 --quiet

11. מזל טוב

כל הכבוד, סיימתם את ה-Codelab.

מה למדנו

  • איך לבנות פרויקט Python לפריסה באמצעות ממשק שורת הפקודה של ADK.
  • איך מטמיעים תהליך עבודה עם כמה סוכנים באמצעות SequentialAgent ו-ParallelAgent.
  • איך מתחברים לשרת MCP מרוחק באמצעות MCPToolset כדי להשתמש בכלים שלו.
  • איך משפרים נתונים פנימיים באמצעות שילוב של כלים חיצוניים כמו Wikipedia API.
  • איך פורסים סוכן כקונטיינר ללא שרת ב-Cloud Run באמצעות הפקודה adk deploy.

12. סקר

פלט:

איך תשתמשו במדריך הזה?

רק קוראים את המידע קוראים את המידע ומבצעים את התרגילים