כשפורסים סוכן ב-Agent Runtime, הוא זמין מרחוק לטיפול בבקשות. במאמר הזה מוסבר איך לפרוס סוכן בהתאם לתהליך העבודה של הפיתוח: מאובייקט הפעלה, מקובצי מקור מקומיים, מקובץ Dockerfile, מקובץ אימג' של קונטיינר שמתארח ב-Artifact Registry או ישירות ממאגר Git מקושר.
כדי לפרוס סוכן ב-Agent Runtime, אפשר לבחור באחת מהשיטות הבאות:
Developer Connect
מומלץ לפרויקטים שמנוהלים במאגר Git שמקושרים דרך Developer Connect. השיטה הזו מייעלת את פריסת הסוכן ישירות מקוד המקור, ותומכת באופן מובנה בבקרת גרסאות, בשיתוף פעולה בין צוותים ובצינורות CI/CD. לפני שמשתמשים בשיטה הזו, צריך להגדיר את הקישור למאגר Git. לשם כך, פועלים לפי ההוראות במאמר הגדרת קישור למאגר Git של Developer Connect.
אפשר להשתמש בשיטת הפריסה הזו רק עם Python.
קובצי מקור
מתאים במיוחד לתהליכי עבודה אוטומטיים כמו צינורות CI/CD וכלים של תשתית כקוד (IaC) כמו Terraform, שמאפשרים פריסות דקלרטיביות ואוטומטיות לחלוטין. הוא פורס את הסוכן ישירות מקוד המקור המקומי ולא דורש קטגוריה של Cloud Storage.
אפשר להשתמש בשיטת הפריסה הזו רק עם Python.
קובץ Docker
דומה לפריסה מקובצי מקור. אתם פורסים את הסוכן ישירות מקוד מקור מקומי בלי צורך בקטגוריה של Cloud Storage. השיטה הזו מתאימה אם אתם צריכים להגדיר ולשלוט בשרת ה-API שנפרס. המאגר שנפרס חייב לעמוד בדרישות של חוזה זמן הריצה.
אפשר להשתמש בשיטת הפריסה הזו בכל שפה. הדוגמאות בדף הזה מבוססות על Python.
קובץ אימג' של קונטיינר
דומה לפריסה מקובץ Dockerfile. אתם פורסים קובץ אימג' של קונטיינר שמתארח ב-Artifact Registry. כדאי להשתמש בשיטה הזו אם נדרשת לכם שליטה בתהליך הבנייה של קובץ האימג' של הקונטיינר וזמן אחזור נמוך יותר של הפריסה. קובץ אימג' של קונטיינר חייב לעמוד בחוזה זמן הריצה.
אפשר להשתמש בשיטת הפריסה הזו בכל שפה. הדוגמאות בדף הזה מבוססות על Python.
Agent Platform SDK
הן מתאימות במיוחד לפיתוח אינטראקטיבי בסביבות כמו Colab, ומאפשרות פריסה של אובייקטים בזיכרון local_agent. השיטה הזו מתאימה במיוחד לסוכנים עם מבנים שלא מכילים רכיבים מורכבים שלא ניתן לסדר אותם בסדר מסוים.
כדי להתחיל, פועלים לפי השלבים הבאים:
- השלמת הדרישות המוקדמות
- אופציונלי: הגדרת הסוכן לפריסה
- יצירת מופע של Agent Platform
- אופציונלי: קבלת מזהה המשאב של הסוכן
- אופציונלי: רשימת הפעולות הנתמכות
- אופציונלי: מתן הרשאות לסוכן הפרוס
דרישות מוקדמות
לפני שמפעילים סוכן, צריך לוודא שביצעתם את המשימות הבאות:
אופציונלי: הגדרת הסוכן לפריסה
אפשר לבצע הגדרות אופציונליות לסוכן. בדוגמאות שבקטע הזה נעשה שימוש ב-Python.
יצירת מופע של Agent Platform
בקטע הזה מוסבר איך ליצור מופע של Agent Platform כדי לפרוס סוכן. אפשר לבחור מבין השיטות הבאות:
Developer Connect
כדי לבצע פריסה מ-Developer Connect ב-Agent Platform, משתמשים ב-client.runtimes.create ומספקים את developer_connect_source, entrypoint_module ו-entrypoint_object במילון ההגדרות, יחד עם הגדרות אופציונליות אחרות. בשיטה הזו אפשר לפרוס קוד ישירות ממאגר Git מקושר.
אפשר להשתמש בשיטת הפריסה הזו רק עם Python.
remote_agent = client.runtimes.create( config={ "developer_connect_source": { # Required. "git_repository_link": "projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID/gitRepositoryLinks/REPO_ID", "revision": "main", "dir": "path/to/dir", }, "entrypoint_module": "agent", # Required. "entrypoint_object": "root_agent", # Required. "requirements_file": "requirements.txt", # Optional. # Other optional configs: # "env_vars": {...}, # "service_account": "...", }, )
הפרמטרים לפריסה של Developer Connect הם:
-
developer_connect_source(dict): ההגדרה לאחזור קוד המקור. פרטים נוספים זמינים במאמר בנושא הגדרת קישור למאגר Git של Developer Connect.-
git_repository_link(str): שם המשאב של הקישור למאגר Git של Developer Connect. -
revision(str): מספר הגרסה לאחזור (ענף, תג או SHA של קומיט). -
dir(str): ספריית הבסיס של קוד הסוכן במאגר.
-
-
entrypoint_module(str): שם מודול Python שמכיל את נקודת הכניסה של הסוכן, ביחס לספרייה שצוינה ב-developer_connect_source.dir. -
entrypoint_object(str): השם של האובייקט שאפשר להפעיל בתוךentrypoint_moduleשמייצג את אפליקציית הסוכן (לדוגמה,root_agent). -
requirements_file(str): אופציונלי: הנתיב לקובץ דרישות של pip ביחס לשורש המקור. ברירת המחדל היאrequirements.txt.
הפריסה נמשכת כמה דקות, ובמהלכן השלבים הבאים מתבצעים ברקע:
- שירות Agent Runtime מאחזר את קוד המקור מהגרסה שצוינה במאגר Git.
- השירות מתקין יחסי תלות מ-
requirements_file(אם הם מסופקים). - השירות מפעיל את אפליקציית הסוכן באמצעות
entrypoint_moduleו-entrypoint_objectשצוינו.
זמן ההמתנה לפריסה תלוי בזמן הכולל שנדרש להתקנת החבילות הנדרשות. אחרי הפריסה, remote_agent מתאים למופע של
local_agent שפועל ב-Agent Platform ואפשר לשלוח לו שאילתות או למחוק אותו.
האובייקט remote_agent תואם למחלקה AgentRuntime שמכילה את הרכיבים הבאים:
remote_agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-remote_agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-remote_agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות.remote_agent.api_clientשמאפשרת אינטראקציות סינכרוניות בין שירותים-
remote_agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות עם שירותים
קובצי מקור
כדי לבצע פריסה מקובצי מקור ב-Agent Platform, משתמשים ב-client.runtimes.create ומספקים את הערכים source_packages, entrypoint_module, entrypoint_object ו-class_methods במילון ההגדרות, יחד עם הגדרות אופציונליות אחרות. בשיטה הזו לא צריך להעביר אובייקט של סוכן או קטגוריה של Cloud Storage.
אפשר להשתמש בשיטת הפריסה הזו רק עם Python.
# Example file structure: # /agent_directory # ├── agent.py # ├── requirements.txt # Example agent_directory/agent.py: # class MyAgent: # def ask(self, question: str) -> str: # return f"Answer to {question}" # root_agent = MyAgent() remote_agent = client.runtimes.create( config={ "source_packages": source_packages, # Required. "entrypoint_module": entrypoint_module, # Required. "entrypoint_object": entrypoint_object, # Required. "class_methods": class_methods, # Required. "requirements_file": requirements_file, # Optional. "display_name": display_name, # Optional. "description": description, # Optional. "labels": labels, # Optional. "env_vars": env_vars, # Optional. "build_options": build_options, # Optional. "identity_type": identity_type, # Optional. "service_account": service_account, # Optional. "min_instances": min_instances, # Optional. "max_instances": max_instances, # Optional. "resource_limits": resource_limits, # Optional. "container_concurrency": container_concurrency, # Optional "encryption_spec": encryption_spec, # Optional. "agent_framework": agent_framework, # Optional. }, )
הפרמטרים לפריסת מקורות מוטבעים הם:
-
source_packages(list[str]): רשימה של נתיבים לקבצים או לספריות מקומיים שצריך לכלול בפריסה. הגודל הכולל של הקבצים והספריות ב-source_packagesלא יכול להיות גדול מ-8MB. -
entrypoint_module(str): השם המוגדר במלואו של מודול Python שמכיל את נקודת הכניסה של הסוכן (לדוגמה,agent_dir.agent). -
entrypoint_object(str): השם של האובייקט שאפשר להפעיל בתוךentrypoint_moduleשמייצג את אפליקציית הסוכן (לדוגמה,root_agent). -
class_methods(list[dict]): רשימה של מילונים שמגדירים את השיטות הגלויות של הסוכן. כל מילון כולל את השדותnameו-api_mode, ואת השדה האופציונליparameters. מידע נוסף על השיטות של סוכן מותאם אישית זמין במאמר בנושא רשימת פעולות נתמכות.לדוגמה:
class_methods = [ { "name": "method_name", "api_mode": "", # Options: "", "async", "async_stream", "stream", "bidi_stream" "parameters": { "type": "object", "properties": { "param1": {"type": "string", "description": "Description of param1"}, "param2": {"type": "integer"} }, "required": ["param1"] } } ]
-
requirements_file(str): אופציונלי: הנתיב לקובץ דרישות של pip בנתיבים שצוינו ב-source_packages. ברירת המחדל היאrequirements.txtבספריית הבסיס של המקור הארוז.
הפריסה נמשכת כמה דקות, ובמהלכן השלבים הבאים מתבצעים ברקע:
- Agent Platform SDK יוצר ארכיון
tar.gzשל הנתיבים שצוינו ב-source_packages. - הארכיון הזה מקודד ונשלח ישירות אל Agent Platform API.
- שירות Agent Runtime מקבל את הארכיון, מחלץ אותו, מתקין תלויות מ-
requirements_file(אם צוין) ומפעיל את אפליקציית הסוכן באמצעותentrypoint_moduleו-entrypoint_objectשצוינו.
זמן ההמתנה לפריסה תלוי בזמן הכולל שנדרש להתקנת החבילות הנדרשות. אחרי הפריסה, remote_agent מתאים למופע של
local_agent שפועל ב-Agent Platform ואפשר לשלוח לו שאילתות או למחוק אותו.
האובייקט remote_agent תואם למחלקה AgentRuntime שמכילה את הרכיבים הבאים:
remote_agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-remote_agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-remote_agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות.remote_agent.api_clientשמאפשרת אינטראקציות סינכרוניות בין שירותים-
remote_agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות עם שירותים
קובץ Docker
הפריסה מקובץ Docker ב-Agent Platform דומה לפריסה מקובצי מקור, רק שבמקום entrypoint_module, entrypoint_object ו-requirements_file משתמשים ב-image_spec בהגדרה. הקונטיינר שנבנה מקובץ ה-Dockerfile חייב לעמוד בדרישות החוזה של זמן הריצה.
אפשר להשתמש בשיטת הפריסה הזו בכל שפה. בדוגמה שבקטע הזה נעשה שימוש ב-Python.
הדוגמה הבאה מראה איך פורסים סוכן באמצעות קובץ Dockerfile:
# Example file structure: # /current_directory # ├── agent.py # ├── main.py # ├── requirements.txt # ├── Dockerfile remote_agent = client.runtimes.create( config={ "source_packages": [ "agent.py", "main.py", "requirements.txt", "Dockerfile", ], "image_spec": {}, # tells Agent Runtime to use the Dockerfile # Other optional configs "display_name": "Dockerfile agent", } )
זמן ההמתנה לפריסה תלוי בזמן הכולל שנדרש להתקנת החבילות הנדרשות. אחרי הפריסה, remote_agent מתאים למופע של
local_agent שפועל ב-Agent Platform ואפשר לשלוח לו שאילתות או למחוק אותו.
האובייקט remote_agent תואם למחלקה AgentRuntime שמכילה את הרכיבים הבאים:
remote_agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-remote_agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-remote_agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות.remote_agent.api_clientשמאפשרת אינטראקציות סינכרוניות בין שירותים-
remote_agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות עם שירותים
קובץ אימג' של קונטיינר
כדי לבצע פריסה מקובץ אימג' של קונטיינר, קודם צריך לפעול לפי הוראות ההגדרה של שימוש בקונטיינר משלכם, ולוודא שמותקנת גרסה של google-cloud-aiplatform שעומדת בדרישות של >=1.144. קובץ אימג' של קונטיינר חייב לעמוד בחוזה סביבת זמן הריצה.
אפשר להשתמש בשיטת הפריסה הזו בכל שפה. בדוגמה שבקטע הזה נעשה שימוש ב-Python.
הדוגמה הבאה מראה איך פורסים סוכן באמצעות קובץ אימג' של קונטיינר:
remote_agent = client.runtimes.create( config={ "container_spec": { "image_uri": "CONTAINER_IMAGE_URI", }, # Other optional configs "display_name": "Container image agent", }, )
CONTAINER_IMAGE_URI הוא ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry (למשל us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag).
זמן ההמתנה לפריסה תלוי בזמן הכולל שנדרש להתקנת החבילות הנדרשות. אחרי הפריסה, remote_agent מתאים למופע של
local_agent שפועל ב-Agent Platform ואפשר לשלוח לו שאילתות או למחוק אותו.
האובייקט remote_agent תואם למחלקה AgentRuntime שמכילה את הרכיבים הבאים:
remote_agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-remote_agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-remote_agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות.remote_agent.api_clientשמאפשרת אינטראקציות סינכרוניות בין שירותים-
remote_agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות עם שירותים
Agent Platform SDK
כדי לפרוס את הסוכן ב-Agent Platform, משתמשים ב-client.runtimes.create כדי להעביר את האובייקט local_agent יחד עם הגדרות אופציונליות:
remote_agent = client.runtimes.create( agent=local_agent, # Optional. config={ "requirements": requirements, # Optional. "extra_packages": extra_packages, # Optional. "gcs_dir_name": gcs_dir_name, # Optional. "display_name": display_name, # Optional. "description": description, # Optional. "labels": labels, # Optional. "env_vars": env_vars, # Optional. "build_options": build_options, # Optional. "identity_type": identity_type, # Optional. "service_account": service_account, # Optional. "min_instances": min_instances, # Optional. "max_instances": max_instances, # Optional. "resource_limits": resource_limits, # Optional. "container_concurrency": container_concurrency, # Optional "encryption_spec": encryption_spec, # Optional. "agent_framework": agent_framework, # Optional. }, )
הפריסה נמשכת כמה דקות, ובמהלכן השלבים הבאים מתבצעים ברקע:
- חבילה של הארטיפקטים הבאים נוצרת באופן מקומי:
-
*.pklקובץ pickle שמתאים ל-local_agent. requirements.txtקובץ טקסט שמכיל את הדרישות של החבילה.dependencies.tar.gzקובץ tar שמכיל חבילות נוספות.
-
- החבילה מועלית ל-Cloud Storage (בתיקייה המתאימה) כדי להכין את הארטיפקטים.
- מזהי ה-URI של Cloud Storage עבור הפריטים הרלוונטיים שנוצרו בתהליך פיתוח מצוינים ב-PackageSpec.
- שירות Agent Runtime מקבל את הבקשה, בונה מאגרי תגים ומתחיל שרתי HTTP בקצה העורפי.
זמן ההמתנה לפריסה תלוי בזמן הכולל שנדרש להתקנת החבילות הנדרשות. אחרי הפריסה, remote_agent מתאים למופע של
local_agent שפועל ב-Agent Platform ואפשר לשלוח לו שאילתות או למחוק אותו.
האובייקט remote_agent תואם למחלקה AgentRuntime שמכילה את הרכיבים הבאים:
remote_agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-remote_agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-remote_agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות.remote_agent.api_clientשמאפשרת אינטראקציות סינכרוניות בין שירותים-
remote_agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות עם שירותים
אופציונלי: קבלת מזהה משאב של סוכן
לכל סוכן שמוטמע יש מזהה ייחודי. כדי לקבל את שם המשאב של הסוכן שפרסתם, מריצים את הפקודה הבאה:
remote_agent.api_resource.name
התגובה אמורה להיראות כמו המחרוזת הבאה:
"projects/PROJECT_NUMBER/locations/LOCATION/reasoningEngines/RESOURCE_ID"
איפה
PROJECT_IDהוא Google Cloud מזהה הפרויקט שבו הסוכן שנפרס פועל.
LOCATIONהוא האזור שבו הסוכן שנפרס פועל.
RESOURCE_IDהוא המזהה של הסוכן שנפרס כמשאבreasoningEngine.
אופציונלי: הצגת רשימה של הפעולות הנתמכות
לכל סוכן שמוטמע יש רשימה של פעולות נתמכות. אפשר להשתמש בפקודה AgentRuntime.operation_schemas כדי לקבל את רשימת הפעולות שהסוכן הפרוס תומך בהן:
remote_agent.operation_schemas()
הסכימה של כל פעולה היא מילון שמתעד את המידע של שיטה לסוכן שאפשר לקרוא לה. קבוצת הפעולות הנתמכות תלויה במסגרת שבה השתמשתם כדי לפתח את הסוכן:
אופציונלי: מתן הרשאות לסוכן שנפרס
אם צריך להעניק לסוכן הפרוס הרשאות נוספות, פועלים לפי ההוראות שבמאמר הגדרת הזהות וההרשאות של הסוכן.
אופציונלי: פריסת סוכנים עם תשתית ארגונית
כדי לפרוס את הסוכן עם סביבה מלאה שכוללת שכבות אבטחה וניהול, מעתיקים את התבניות הבאות של Application Design Center ומבצעים בהן התאמה אישית: