האם handoff היא אבסטרקציה דולפת?

18/08/2025

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

from agents import Agent

billing_agent = Agent(name="Billing agent")
refund_agent = Agent(name="Refund agent")


triage_agent = Agent(name="Triage agent", handoffs=[billing_agent, refund_agent])

וזאת מתוך ה SDK של מיסטרל:

finance_agent = client.beta.agents.update(
    agent_id=finance_agent.id,
    handoffs=[ecb_interest_rate_agent.id, web_search_agent.id]
)

# Allow the ecb_interest_rate_agent to handoff the conversation to the graph_agent or calculator_agent
ecb_interest_rate_agent = client.beta.agents.update(
    agent_id=ecb_interest_rate_agent.id,
    handoffs=[graph_agent.id, calculator_agent.id]
)

# Allow the web_search_agent to handoff the conversation to the graph_agent or calculator_agent
web_search_agent = client.beta.agents.update(
    agent_id=web_search_agent.id,
    handoffs=[graph_agent.id, calculator_agent.id]
)

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

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

אבסטרקציה דולפת היא אבסטרקציה שלא ניתן לעבוד איתה בלי להבין מה קורה מתחת לפני השטח ומכריחה אותנו "לצאת" מהשפה של האבסטרקציה כמעט בכל use case. בואו נראה איך זה מסתדר עם handoffs:

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

  2. אם נקרא את רשימת ההודעות ב Session ונרצה להמשיך להשתמש בה נצטרך לשים לב שכל Handoff הוא בעצם הודעת Tool Call וחייבים להעביר את התשובה שלו ל AI (כי בהודעות Tool Call ה AI מצפה לראות תשובה של כל Tool Call בהיסטוריית השיחה).

  3. שם הכלי הדיפולטי של handoff ב agents sdk הוא transfer_to_. זה אולי לא משהו שנבחר בטעות לעתים קרובות אבל בטוח צריכים להיות מודעים לזה שיש כלי כזה שנשלח למודל כשאנחנו מסתכלים על היסטוריית שיחה ומנסים להבין מה קרה. הרבה פעמים נצטרך תיאור יותר יצירתי לכלי ה handoff.

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

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

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