שיעור 5 — כלים מקומיים ו־API
מטרות
- לחבר כלי מקומי וכלי שקורא שירות חינמי.
- לדחות קלט לא תקין ופעולה אסורה לפני ביצוע.
- לשמור יומן שבו רואים בקשה, החלטה, ותוצאה.
- להחזיר כשל של כלי כתוצאה שהסוכן יכול לקרוא, במקום לקרוס.
שני כלים
calculator מקבל פעולה ושני מספרים. הוא אינו מקבל מחרוזת להרצה.
weather קורא ל־Open-Meteo עבור קואורדינטות שמופיעות ברשימה סגורה, למשל תל אביב. עיר שאינה ברשימה נדחית בלי קריאת רשת. כך לומדים הרשאה גם כשהשירות עצמו חינמי. תנאי השימוש של Open-Meteo חלים על הקריאה, והיא מיועדת כאן לתרגול לא מסחרי.
MCP נכנס כאן כדרך שנייה לחשוף את אותו מחשבון: tools/list מחזיר את הסכמה, tools/call מפעיל אותה. השרת המקומי אינו מחליף את בדיקת ההרשאה.
סדר הבדיקות
כל קריאה עוברת באותו סדר, ורק השלב האחרון נוגע בעולם:
- סכמה: השדות הנדרשים קיימים, והטיפוסים נכונים.
"1400"כטקסט נדחה. - הרשאה: הפעולה מותרת למשתמש ולערך הזה. עיר מחוץ לרשימה נעצרת כאן.
- כלל: הערך עומד בכלל העסקי, למשל רצפת מחיר.
- ביצוע: רק עכשיו כותבים או פונים לרשת.
כל שלב מחזיר סטטוס משלו. invalid_request, forbidden ו־policy_rejected הם שלוש תשובות שונות, והסוכן צריך לדעת איזו מהן קיבל.
המגרש למעלה הוא גרסת החנות משיעור 2. במעבדה 2 מוסיפים את יומן הקריאות ואת שירות מזג האוויר.
יומן שאפשר לקרוא
שורה ביומן כוללת את שם הכלי, הארגומנטים, הסטטוס, ומה השתנה: כמה כתיבות, כמה קריאות רשת. שורה כזו עונה על השאלה „מה קרה” בלי לנחש מתוך הטקסט שהמודל כתב אחר כך.
weather {"city": "paris"} forbidden network_calls=0
weather {"city": "tel-aviv"} unavailable network_calls=0
כשל שמחזירים למודל
אם Open-Meteo אינו זמין, התוצאה היא שגיאת רשת, לא תחזית מומצאת. מותר ניסיון אחד נוסף. אחריו עוצרים ומדווחים מה חסר. שגיאת הרשאה אינה מקבלת ניסיון נוסף: עיר מחוץ לרשימה תישאר מחוץ לרשימה.
הריצו את מעבדה 2 בלי רשת. ודאו שעיר מורשית מחזירה unavailable ולא טמפרטורה. אחר כך הוסיפו עיר שלישית לרשימה, והראו ביומן שקריאה לעיר שאינה ברשימה עדיין רושמת אפס קריאות רשת.
בדיקת הבנה
סיכום
מצאתם טעות בעמוד? כתבו למרצה