איך מגדירים לסוכן קוד מה נחשב הצלחה?
בפוסט שלי על הגדרת הצלחה לסוכנים הבחנתי בין "תעשה ריפקטור" לבין משימה עם ממשק שנשמר, גבולות ברורים ובדיקות. העיקרון נשאר שימושי גם בתיקון קטן: התוצאה צריכה להיות מוגדרת לפני שהסוכן מכריז שסיים.
בקצרה
מצרפים למשימה תוצאה שאפשר לבדוק, גבולות שינוי, בדיקות נדרשות ומי מאשר את הסיום. הסוכן צריך להחזיר ראיות מההרצה, לצד מה שלא נבדק.
תשובה קצרה: מצרפים למשימה תוצאה שאפשר לבדוק, גבולות שינוי, בדיקות נדרשות ומי מאשר את הסיום. הסוכן צריך להחזיר ראיות מההרצה, לצד מה שלא נבדק.
כשמבקשים "תתקן את הבאג", הסוכן יכול לבחור פתרון שנראה סביר אבל משנה התנהגות שלא התכוונו לשנות. הגדרה טובה מצמצמת את הבחירה לפני כתיבת הקוד.
מגדירים התנהגות, ולא רק קובץ לעריכה
כתבו מה המשתמש או הקוד הקורא צריכים לקבל. למשל, כהמחשה: פונקציה לקריאת קובץ צריכה להחזיר את אותם נתונים גם אחרי התיקון. קובץ חסר או פגום צריך להמשיך להחזיר שגיאה לקורא. החזרת מילון ריק במקום שגיאה אינה תיקון של אותה התנהגות.
נותנים לבדיקה אפשרות להיכשל
שמרו מקרה שמראה את התקלה לפני התיקון. אותה בדיקה צריכה לעבור אחריו. בדיקה שעוברת גם בקוד המקורי אינה ראיה שהתקלה הזאת תוקנה.
דוגמה ציבורית מפרויקט DDD ממחישה את ההבדל. פונקציית Python העבירה ל-tomllib.load קובץ שנפתח במצב טקסט. ברשומת הניסוי תועדה שגיאת TypeError לפני השינוי. התיקון היה לפתוח את הקובץ במצב בינארי, "rb", כפי שדורש תיעוד Python 3.11. אחרי התיקון עברו שתי בדיקות, ובדיקה נוספת אישרה שקובץ TOML פגום עדיין מעלה TOMLDecodeError. זה ניסוי של מחבר הפרויקט, לא ניסוי שלי ולא מדד לחיסכון בזמן.
מפרידים בין הצלחה לבין הרשאות
כתבו מה מותר לשנות ומה נשאר מחוץ למשימה: ממשק ציבורי, תלויות, סודות, קבצים אחרים או פריסה. אפשר להרשות תיקון והרצת בדיקות בתיקיית ניסוי בלי להרשות התקנה גלובלית או פרסום.
קובץ הוראות יכול להזכיר את הגבול לסוכן. הוא אינו מחליף הרשאות גישה, הפרדת סביבות או אישור של מי שאחראי למערכת.
מבקשים סיום שאפשר לבדוק
תבנית להמחשה:
"תקן את התקלה הזאת בלי לשנות את הממשק הציבורי. שמור בדיקה שנכשלת בקוד המקורי ועוברת אחרי התיקון. בדוק גם את התנהגות השגיאות. ערוך רק את הקבצים המורשים, בלי תלות חדשה ובלי פריסה. בסיום הצג את השינוי, הפקודות שהרצת, התוצאות בפועל ומה נשאר לא בדוק."
בדוח הסיום אני רוצה להבחין בין ארבעה דברים: קוד שנכתב, בדיקה שהורצה, תוצאה שנצפתה ואישור לשימוש. אלה שלבים שונים. אפשר להשלים את התיקון המקומי ועדיין להמתין לביקורת או לבדיקת סביבה נוספת.
מחליטים מה עושים כשהבדיקה נכשלת
קבעו מראש אם הסוכן רשאי לנסות תיקון נוסף, צריך לעצור או חייב לחזור לגרסה יציבה. הגדירו גם מתי לפנות לאדם: מידע חסר, חריגה מהקבצים המורשים או שינוי שנוגע לנתונים אמיתיים.
כך אותה משימה יכולה לעבור לסוכן אחר בלי לאבד את התוצאה הרצויה ואת הגבולות שלה.
מקורות ופרטים נוספים
התהליך מתואר מניסיונו של הכותב. המחירים, כשמופיעים, הם מחירי השירות שלו ולא נתוני שוק.
שאלות נפוצות
מה ההבדל בין משימה לבין הגדרת הצלחה?
המשימה אומרת מה לעשות. הגדרת ההצלחה אומרת איזו התנהגות צריכה להתקבל, איך בודקים אותה ומה הגבולות.
האם בדיקה שעברה מוכיחה שכל המערכת תקינה?
היא מעידה על המקרה והסביבה שנבדקו. צריך לציין מה לא נבדק ולא להסיק ממנה על כל המערכת.
האם קובץ הוראות נותן לסוכן הרשאה לפרסם?
לא. הוראות למשימה אינן תחליף להרשאות גישה ולאישור לפריסה או לפעולה חיצונית.