הוספת שלב קיים של סוכן

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

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

לפני שמשתמשים בתכונה הזו, צריך לבצע את השלבים הבאים:

  • מוודאים שאדמין ב-Gemini Enterprise הפעיל את המתג של התכונה 'Workflow Builder' בהגדרות ניהול התכונות של האפליקציה. מידע נוסף מופיע במאמר בנושא ניהול התכונות של אפליקציות אינטרנט.
  • מוודאים שהסוכנים שרוצים להוסיף זמינים בארגון. התכונה הזו תומכת בהוספה של הסוכנים הבאים:

הוספה של שלב קיים בסוכן

אפליקציה

  1. פותחים את אפליקציית האינטרנט של Gemini Enterprise בדפדפן.
  2. עוברים לסוכן קיים או יוצרים סוכן חדש.
  3. בכלי ליצירת תרשימי זרימה, לוחצים על הוספת שלב.
  4. בחלונית הוספת שלב, לוחצים על סוכנים קיימים כדי להרחיב את הקטע.
  5. מעיינים ברשימת הנציגים הזמינים.

  6. לוחצים על הסוכן שרוצים להוסיף.

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

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

    • פרומפט: מזינים את הפרומפט או ההוראות שמשמשים להפעלת הסוכן. אפשר לכלול טקסט סטטי או הפניות לפלט משלבים קודמים (לדוגמה, ${step_name.output}).

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

מידע נוסף על המגבלות של התכונה הזו זמין במאמר בעיות ידועות ומגבלות.

איך עובדות שאלות הבהרה

כשסוכן קיים מופעל בתהליך עבודה, הוא יכול להשהות את הביצוע כדי לשאול את המשתמש שאלה להבהרה אם חסר לו מידע להשלמת המשימה. שאלות הבהרה נתמכות באופן מובנה כשסוכן שאליו מתייחסים פולט אות input-required (A2A) או אירוע RequestInput (ADK).

כששלב קיים של סוכן פועל ונדרש מידע נוסף:

  1. ההרצה מושהית: זרימת העבודה מושהית בשלב הסוכן הקיים ומוצגת הנחיה שדורשת התערבות אנושית (HITL).
  2. המשתמש עונה על הפרומפט: אפליקציית האינטרנט של Gemini Enterprise מציגה למשתמש את השאלה המבהירה של הסוכן, יחד עם שדה טקסט להזנת התשובה.
  3. הביצוע נמשך: כשהמשתמש שולח את התשובה שלו, תהליך העבודה ממשיך את הסוכן הקיים ומעביר את התשובה של המשתמש בחזרה לסוכן.
  4. תמיכה בשיחה מרובת תפניות: הסוכן יכול לשאול כמה שאלות הבהרה ברצף, בכמה תפניות, עד שהוא אוסף את כל המידע הנדרש ומפיק את הפלט הסופי.

בידוד הקשר

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

הטמעה של שאלות הבהרה בסוכן

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

סוכני A2A (מקוריים)

אם הסוכנים מטמיעים את פרוטוקול Agent-to-Agent ‏ (A2A) ישירות, צריך להחזיר את המשימה במצב input-required עם TaskUpdater, ולספק את השאלה להבהרה במטען הייעודי של ההודעה:

from a2a.server.tasks import TaskUpdater
from a2a.types import Message, Part, Role, TextPart

# Inside your custom agent's task executor class:
async def execute(self, context, event_queue):
    updater = TaskUpdater(event_queue, context.task_id, context.context_id)
    if context.current_task is None:
        await updater.submit()
    await updater.start_work()

    user_input = context.get_user_input()
    if "weather" in user_input and "tokyo" not in user_input.lower():
        await updater.requires_input(
            Message(
                message_id=f"q-{context.task_id}",
                role=Role.agent,
                parts=[Part(root=TextPart(
                    text="Which city would you like the weather for?"))],
                task_id=context.task_id,
                context_id=context.context_id,
            )
        )
        return

    await updater.complete(
        Message(
            message_id=f"a-{context.task_id}",
            role=Role.agent,
            parts=[Part(root=TextPart(
                text="It is sunny and 72°F in Tokyo."))],
            task_id=context.task_id,
            context_id=context.context_id,
        )
    )

התשובה של המשתמש נשלחת בחזרה לסוכן שלכם כבקשת message/send עם אותו taskId.

סוכני A2A (שנוצרו באמצעות ADK)

אם הסוכן שלכם נוצר באמצעות הערכה לפיתוח סוכנים (ADK) ונחשף דרך A2A (באמצעות to_a2a()), צריך להוסיף את פונקציית השאלות לתג LongRunningFunctionTool:

from google.adk.agents import Agent
from google.adk.tools.long_running_tool import LongRunningFunctionTool
from google.adk.a2a.utils.agent_to_a2a import to_a2a

def get_weather(city: str) -> str:
    """Returns weather information for a city."""
    return f"It is sunny and 72°F in {city}."

def ask_clarifying_question(question: str) -> None:
    """Asks the user a question and waits for their reply."""
    return None

root_agent = Agent(
    model="gemini-2.5-flash",
    name="weather_agent",
    instruction=(
        "If the user asks for weather without specifying a city, call "
        "`ask_clarifying_question` and wait. Do not guess."
    ),
    tools=[get_weather, LongRunningFunctionTool(ask_clarifying_question)],
)

a2a_app = to_a2a(root_agent, port=8000)

סוכני ADK ב-Agent Engine

כדי להפעיל אירוע בסוכן מותאם אישית או בכלי גנרטור, צריך להשתמש בסוכנים של ADK שמתארחים ב-Agent Engine.RequestInput

from google.adk.events import RequestInput

# Inside a generator tool or custom agent step
def ask_for_details():
    """Requests user input during tool or step execution."""
    yield RequestInput(
        interrupt_id="weather_city",
        message="Which city would you like the weather for?",
    )

המאמרים הבאים