Skip to main content
Failproof AI Observability יכול לדרג באופן אוטומטי כל הרצה של סוכן שהסתיימה מבחינת איכות: אתה מספק שירות דירוג קטן, ו-Observability מטפל בשאר. השתמש בו כדי לעקוב אחר הממדים שחשובים לך (עזרתיות, יעילות כלים, עובדתיות, בטיחות; אתה בוחר), לתפוס רגרסיות מוקדם, ולהשוות סוכנים או סביבות בהצצה. הדירוג הוא אופציונלי: הצינור לא עושה כלום עד שתגדיר את EVALUATOR_ENDPOINT בשרת.
הערה: אתה מגדיר את ממדי הציון. ההערכה שלך יכולה להחזיר כל מפתחות מספריים שהיא רוצה; Observability אחסן, טרנד ומציג כל מה שאתה שולח חזרה.

במבט חטוף

  1. כתוב מדרג. הקם שירות HTTP קטן שקורא תמליל של סשן ומחזיר ציונים. Observability משלח התייחסות עובדת שאתה יכול להעתיק. ראה כתיבת מעריך עם ה-SDK.
  2. הצביע ל-Observability על זה. קבע את EVALUATOR_ENDPOINT (ו-EVALUATOR_TOKEN משותף) בתהליך השרת.
  3. צפה בציונים שנחתו. כל סשן שהסתיים מדורג באופן אוטומטי; התוצאות מופיעות בעמוד פרטי הסשן, בגריד הסשנים ובלוחות שנשמרו.
תצוגת פרטי סשן עם סיכום ההערכה, סרגלי ציון לממד, וטקסט נמקות בפס ימני לאחר הגדרת מעריך, כל הרצה שהושלמה מדורגת והתוצאות מופיעות בפס הימני של הסשן: הסיכום בחלק העליון, ואחריו סרגלי ציון לממד עם נמקות.

איך זה עובד

כאשר Failproof AI Observability SDK פולט אירוע agent_end לסשן, השרת מתכנן הערכה. לאחר מכן הוא עושה POST של תמליל האירוע המלא לשירות ההערכה שלך, שיכול:
  • להחזיר את התוצאה בשורה עם {"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. התוצאה מנוספת לציר הזמן של ההערכה של הסשן. reasoning ו-summary הם אופציונליים.
  • לדחות עם {"status":"pending", "job_id":"abc-123"}. Observability ואז קורא GET {EVALUATOR_ENDPOINT}/evaluate/abc-123 עד שההערכה שלך מחזירה {"status":"done", ...} או {"status":"error", "error":"..."}. קצב הסקר הוא לכל עבודה: תגובת pending עשויה לכלול next_poll_secs כדי לדרוג; אחרת Observability משתמש בערך default_poll_interval_secs מ-GET /config; אחרת השרת חוזר אל EVALUATOR_POLLING_INTERVAL_SECS (ברירת מחדל 10 שניות). כל הערכים מוגבלים ל-[1 שניה, 1 שעה].
סשנים שלא פלטו agent_end (לדוגמה, תהליך סוכן שהתרסק) יכולים גם להיאסף: GET /config של ההערכה עשוי להחזיר {"inactivity_timeout_secs": 1800}, וה-Observability יעריך כל סשן שנשמר בחוסר פעילות לפי זמן זה. קבע את השדה ל-null או השמיט אותו כדי להשבית את הנופל החלופי. הצינור הוא כל ל-no-op כאשר EVALUATOR_ENDPOINT לא מוגדר. סשן יכול להצטבר הערכות מסוף מרובות לאורך זמן: כל אירוע agent_end (וכל הערכה חוזרת ידנית מלוח המחוונים) מוסיף שורת הערכה חדשה. זוהי הדרך הנתמכת להערכת שיחה שנעתקה: משתמש מסיים סוכן, חוזר מאוחר יותר, שולח עוד אירועים, מסיים את הסוכן שוב, והערכה שנייה רצה כנגד התמליל המעודכן המלא. לוח המחוונים משרטט את ההערכה העדכנית ביותר כהכותרת והערכות הקודמות כציר זמן ניתן לצמצום. בזמן שהערכה אחת פועלת לסשן, אירועי agent_end נוספים עבור אותו סשן מתעלמים; האחד הבא לאחר השלמת ההערכה הפועלת יתור הערכה טרייה כרגיל. הנופל החלופי של חוסר פעילות מחדש בסשנים שנעתקו: אם אירועים חדשים מגיעים לאחר הערכה סוף קודמת וסשן ואז הולך ללא פעילות בעבר inactivity_timeout_secs, הערכה טרייה מתורה. כשלים חולפים (5xx, 429, timeouts, שגיאות רשת) מנסים שוב עם backoff אקספוננציאלי עד EVALUATOR_MAX_ATTEMPTS; תגובות 4xx הן סופיות. Observability בטוח להריץ עם מספר מקבלות שרת במרובה; העבודה מחולקת כך שאותו סשן לעולם לא יישלח פעמיים במקביל.

חוזה HTTP

כל מסלול מאומת משתמש ב-Bearer Token Auth. אותו ערך חייב להיות מוגדר משני הצדדים:
  • שרת Observability: משתנה env EVALUATOR_TOKEN
  • שירות Evaluator: מוגדר באותו אופן (ה-SDK agenteye-evaluator קורא EVALUATOR_TOKEN לפי מוסכמה)
אם EVALUATOR_TOKEN לא מוגדר, השרת לא שולח כותרת Authorization; ההערכה עשויה לקבל בקשות אנונימיות, שזה בסדר לרשת פנימית בלבד אך מודחה באינטרנט הציבורי.

נתיבים שההערכה חייבת להגיש

גוף EvalRequest שנשלח על ידי השרת

צורות תגובה

סינכרוני (בוצע):
reasoning (מפת הנמקה לכל ציון) ו-summary (נרטיב אחד-פסקה כולל) שניהם אופציונליים. מפתחות ב-reasoning צריכים לשקף מפתחות ב-scores; לוח המחוונים משרטט כל ערך בשורה מתחת לסרגל הציון שלו. הערכות ישנות יותר שמחזירות רק scores ממשיכות לעבוד ללא שינוי; reasoning ו-summary פשוט קוראים כ-null ויכולות ה-UI המתאימות מושמטות. אסינכרוני (דחוי):
next_poll_secs הוא אופציונלי; אם מושמט השרת חוזר ל-default_poll_interval_secs של ההערכה מ-/config, ואז ל-משתנה ה-env EVALUATOR_POLLING_INTERVAL_SECS שלו. שגיאה סופית בצד המעריך:
השרת מתייחס לכל גוף 2xx אחר כשגיאת פרוטוקול ורושם error סופי לסשן.

כתיבת מעריך עם ה-SDK

אתה לא חייב ליישם את חוזה HTTP ביד. החבילה Python agenteye-evaluator נותנת לך ליפוף FastAPI מוקלד שמטפל בהתאמה, ניתוב וצורות בקשה/תגובה בשבילך. Failproof AI Observability גם משלח מעריך התייחסות עובד שמדרג helpfulness, tool_efficiency ו-factuality מצורת התמליל. העתק אותו כנקודת התחלה וחליף בלוגיקה שלך: שופט LLM, מנוע כללים, כל מה שמתאים לסטנדרט האיכות שלך. מעריך ברור ברירת מחדל:
מופע ה-app פועל תחת כל שרת ASGI, כך שתחילת uvicorn module:app. עבור הערכות שצריכות לדחות עבודה יקרה, החזור ב-JobPending בעוד רושם @app.job_lookup handler; שרת Observability סוקר GET /evaluate/{job_id} עד שתחזיר סטטוס סופי או עד שהמכסה EVALUATOR_MAX_POLL_DURATION_SECS (ברירת מחדל 1 שעה) חולפת. ה-API reference המלא, דפוס אסינכרוני וסכמת אירועים תועדו ב-README של SDK ה-agenteye-evaluator.

הרצת המעריך שלך

ההערכה היא השירות שלך — Failproof AI Observability לא משלח מעריך ברירת מחדל, כך שאתה בונה והרץ אותו במקום שבו אתה מריץ את השירותים שלך. הוא פועל תחת כל שרת ASGI (לדוגמה uvicorn my_evaluator:app); הגיש את נתיבי /health, /config ו-/evaluate מ-חוזה HTTP, ואז הצביע את השרת אליו (ראה הגדרת השרת). ברגע שההערכה ניתנת להשגה, GET /health מחזיר {"status":"ok"}. לאחר הרצה של סוכן מקצה לקצה, GET /evaluations בשרת מחזיר שורה עם status: "done" וציונים שההערכה שלך ייצרה.

הגדרת השרת

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

API reference

סינון לפי טווח ציון: score_filters

GET /evaluations מקבל פרמטר אופציונלי score_filters שמצמצם תוצאות לפי ערכים מספריים בתוך scores object. הפרמטר הוא רשימה המופרדת בפסיקים של ערכי key:min..max; כל קשר עשוי להיות מושמט. כניסות מרובות משלבות עם AND לוגי. שורות כאשר המפתח הנקוב חסר או לא מספרי מודדות. בקשה עשויה להכיל לכל היותר 20 ערכי סינון; חריגה מזה מחזיר HTTP 400. דוגמאות:
לכל אובייקט תגובה /evaluations יש שדות אלה:

הרשאות

ה-bootstrap admin (ADMIN_KEY, ADMIN_EMAIL) מקבל אלה באופן אוטומטי.

צפייה בתוצאות

  • /sessions/<id>: אירועים ציר זמן + פס ימני המציג את ציוני הסשן וכל שגיאה מניסיון ה-dispatch. אם המפתח שלך כולל evaluations:trigger, כפתור re-evaluate מופיע ליד כפתור ה-export, שימושי לסשנים שמעולם לא פלטו agent_end, או להרעיש ציונים לאחר פריסת מעריך חדש. לוח המחוונים סוקר את התוצאה החדשה ומעדכן את פס הימני כאשר הוא נוחת.
  • /sessions: גריד סשנים ניתן לסינון; עמודת הציון מציגה את סטטוס ההערכה וציונים של כל סשן בהצצה.
  • /dashboards: צפיות בריאות eval שמורה (ראה לוחות להלן).
גריד הסשנים עם כלולי סטטוס הערכה לכל סשן ובתגים מדורגים בצבע (עזרתיות, עובדתיות, tool_efficiency, בטיחות, קוהרנטיות) גריד הסשנים מציג את סטטוס ההערכה וציונים של כל הרצה בהצצה; תגים אדומים/כהים/ירוקים גורמים לציונים נמוכים לקפוץ החוצה.

לוחות

דף Dashboards (/dashboards) מאפשר לך שמירה של שילוב של סינני הערכה כתצוגה בשם וניתנת לשימוש חוזר וצפייה כיצד האות פרוסה של הערכות עושה בהצצה. לוחות הם משותפים בכל הארגון שלך; כולם עם dashboards:read רואים את אותה סט. כל לוח משמירה:
  • סינונים: אותם בקרים כמו עמוד הסשנים: סביבה, סטטוס, סוכן, חלון זמן מתגלגל וסינני טווח ציון (key:min..max).
  • תצורת תצוגה: איזה מפתחות ציון לתכונה, סף בריאות ירוק/כהה/אדום, איזה פנלים להציג והאם לצמצם לאחרון הערכה לכל סשן.
כל כרטיס מציג את מספר הסשנים התואמים, פירוט done/error/timeout, ממוצע של כל ציון בתכונה וטרנדלין ספארק קטן. פתיחת לוח מציגה את הפנלים במלוא הגודל; “פתח בסשנים” מושיב אותך לעמוד הסשנים מקדים מסונן לאותה פרוסה בדיוק. מדדים מחושבים בצד שרת על פני כל הסט התואם (דרך GET /evaluations/aggregate), כך המספרים מדויקים ולא דגומים. לוח בריאות eval עם סרגלי ציון ממוצע לממד evaluator, breakdown tool ok-vs-error, כלים למעלה וטרנד events-per-hour הרשאות: צפייה צריכה הן dashboards:read והן evaluations:read; יצירה ועריכה צריכה dashboards:write; מחיקה צריכה dashboards:delete. ה-bootstrap admin מקבל את כל אלה באופן אוטומטי.

פתרון בעיות

סשנים קיימים אך לא נוצרות הערכות. אשר כי EVALUATOR_ENDPOINT מוגדר בתהליך השרת, שהשרת וההערכה משתפים אותו ערך EVALUATOR_TOKEN וכי נקודת הסוף /health של ההערכה ניתנת להשגה מהשרת. עם EVALUATOR_ENDPOINT לא מוגדר הצינור הוא no-op. הערכות בטיסה צוברות. שאילתה GET /evaluation-jobs כדי לראות את התור בטיסה. בדוק את attempt_count, next_attempt_at ו-last_error על כל שורה. סיבות נפוצות: שירות ההערכה לא ניתן להשגה או מחזיר 5xx (מנסה שוב עם backoff), EVALUATOR_TOKEN שגוי (401 סופי) או מעריך אסינכרוני שמחזיר pending לנצח (ראה להלן). סשנים הושלמו אך לא הערכה סופית. שאילתה GET /evaluation-jobs?status=polling; התוצאה עדיין עשויה להיות בטיסה. אם עבודה תקועה ב-pending, לשרת יש בעיה להשגת ההערכה; בדוק שהערכה מעלה וכי EVALUATOR_TOKEN משחק. HTTP 401 from evaluator: invalid bearer token. ה-EVALUATOR_TOKEN בשרת לא משחק עם הערך שהשירות ההערכה מוגדר איתו. הם חייבים להיות זהים. מעריך אסינכרוני מחזיר pending לנצח. השרת סוקר GET /evaluate/{job_id} עד שההערכה מחזירה done או error, או עד ש-EVALUATOR_MAX_POLL_DURATION_SECS (ברירת מחדל 1 שעה) חולפת. לאחר הכובע ההערכה מוקלטת כ-timeout והוסרת מתור הבטיסה. הרם את EVALUATOR_MAX_POLL_DURATION_SECS אם ההערכה שלך בחוקיות צריכה יותר מברירת המחדל.

שלבים הבאים

  • מיומנות סוכן Evaluator: יש לסוכן קידוד עיצוב הממדים שלך כנגד סשנים אמיתיים וביצוע שירות זה בשבילך.
  • Python SDK: פלטו את אירועי agent_end שמפעילים דירוג.
  • API keys: הרשאות evaluations:read ו-evaluations:trigger.
  • Audits: תכונת בריאות אוטומטית נוספת של Observability, לבדיקה מבוססת מדיניות.