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

ניפוי באגים בסוכן AI: לוח המחוונים שלך יודע את העלות, אך לא את הסיבה

מחבר

Alistair Wren

תאריך פרסום

מודלים אחרונים · 20צפו בכל המודלים
בנצ'מרקים: Artificial Analysis · מתעדכן יומית
חזרה לכל הפוסטים

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

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

התקלה שאינך יכול לשחזר

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

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

לא משנה איזה מודל הנתב בחר לריצה (GLM 5.3 Flash או כל דבר אחר): ברגע שהתהליך מסתיים, ההנמקה נעלמת יחד איתו. העדויות התקיימו רק בעוד הריצה פעילה: ההנחיות, קריאות הכלים, הפלטים, ההבדלים. אם דבר לא תיעד אותם, לשאלה 'למה זה שינה את הקובץ הזה' אין תשובה. יש לה תיאוריות.

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

A three-card scoreboard showing "agent: exit 0", "check: exit 1", and "run: exit 0".

מה מודד לוח המחוונים, ומה הוא מדלג עליו?

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

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

לוח מחוונים מתאר ריצה מבחוץ: שהיא התרחשה, מה היא שקלה, מה היא עלתה. הוא אינו יכול למסור לך את הריצה, ו״למה״ אינו תכונה של התיאור. הוא תכונה של הרצף.

• מה עלה ההרצה? — לוח העלויות עונה על כך לעומת טרייס מתועד שעונה על כך

• מדוע הסוכן שינה את הקובץ הזה? — לוח עלויות: ללא תשובה לעומת תיעוד מוקלט. העריכה, לפי הסדר, עם ה-diff שלה.

• איזו בדיקה נכשלה בתוך ריצה ירוקה? — לוח עלויות ללא תשובה לעומת טרייס מוקלט הבדיקה, עם קוד היציאה שלה

• האם ניתן להריץ שוב את התקלה המדויקת? — לוח עלויות: לא לעומת עקבות מוקלטות: כן, במצב לא מקוון, ללא עלות

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

The OrcaRouter recorded request logs solutions page, with its page title and introductory copy about recording the requests an agent makes.

קריאת ריצה אחת כציר זמן

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

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

דוגמה קונקרטית, שנלקחה מתיקון מוקלט: 14 אירועים, כולל שינוי הקובץ שהודפס כ-+1 -3 ובדיקה שנכשלה עם קוד יציאה 1. העריכה, ולאחריה הבדיקה שנכשלה בגללה, סמוכות ברישום. זהו כל ההבדל בין שיחזור ריצה משברים לבין קריאת ריצה אחת. זה חשוב בעיקר עבור סוכני קידוד במסוף, שסביבת העבודה שלהם היא מסוף שנסגר ברגע שהמשימה מסתיימת: ציר הזמן הוא היסטוריית הפלט ששורדת.

מוקלט או מוסק: מה שהטרייס יודע לעומת מה שהוא גזר

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

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

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

לשכפל אותו כמה פעמים שתרצה בחינם

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

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

גם הכלי אינו קופסה שחורה.OrcaReplayהוא קוד פתוח תחת Apache-2.0 ופורמט העקיבה הוא CC BY 4.0, כך שכל אחד יכול לממש אותו מחדש: ההקלטות שלכם אינן שבויות בידי פורמט קנייני, וגם שלנו לא. והוא נבחן בפועל, לא רק מודגם: 1393 בדיקות על Node 20 ו-Node 22. אתם יכולים לקרוא את קוד המקור, לבדוק את הפורמט ולהריץ את ערכת הבדיקות בעצמכם לפני שאתם נותנים בו אמון עם ריצות הצוות שלכם.

The OrcaReplay repository on GitHub, showing the repo name, its Apache-2.0 license badge, and the opening of the README.

התובנה

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

השיטה כולה היא ארבעה שלבים:

• רשמו את הריצות.

• קראו את ציר הזמן

• בדוק את צלעות הגרף.

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

הערת מקור: כל נתון במאמר זה מבוסס על דיווחי ספקים – מהמוצר שלנו וממאגר OrcaReplay ומהתיעוד שלו: התנהגות קוד היציאה של ריצה, תיקון מוקלט בן 14 אירועים עם ה-diff שלו של +1‏-3 ובדיקת היציאה 1 שלו, תיוג הקצוות בגרף האורקה, קצב צילומי המצב של פעם אחת לכל תור, ריצה חוזרת במצב לא מקוון עם חסימת רשת, ובדיקת 1393 הבדיקות על Node 20 ועל Node 22. אין במאמר זה ציטוט של מדידות צד-שלישי. ערכת הבדיקות של 1393 הבדיקות היא הטענה היחידה שבה תוכלו לוודא בעצמכם, על ידי שכפול המאגר והרצתו. כל הפריטים נבדקו לאחרונה ב-2026-09-04.

© 2026 OrcaRouter

לספקים

מפעילים פלטפורמת הסקה (inference)? הציגו את המודלים שלכם ב-OrcaRouter.

providers@orcarouter.ai

הצטרפו לקהילה שלנו

Discordsupport@orcarouter.aiXGitHubYouTube