Skip to main content
ראה בדיוק מה עשו הסוכנים ה-AI שלך בייצור: כל הרצת סוכן, קריאת כלי, בקשת מודל, hook והתערבות אנושית. ה-Python SDK של Failproof AI Observability מתעד את השביל הזה מתוך קוד הסוכן שלך כדי שתוכל לתקן, לבדוק ולהעריך מה קרה. השתמש בו בכל פעם שאתה רוצה ש-Failproof AI Observability יעקוב אחר הסוכנים שלך. תחת המכסה, ה-SDK כותב אירועים מובנים לקבצי JSONL מקומיים, ודימון הקולט אוסף אותם ושולח אותם לפלטפורמה באופן אוטומטי. אתה לא מנהל את הקבצים האלה בעצמך.
טיפ: חדש ב-Failproof AI Observability? דף זה היא ההתייחסות לאירועי ה-SDK המלאה.

התקנה

ה-SDK מופץ ללקוחות כקובץ wheel פרטי במקום מאינדקס חבילות ציבורי. ההטמעה שלך מכסה כיצד להשיג אותו, להתקין אותו ולהצמיד אותו — דבר עם אנשי הקשר של Failproof AI שלך אם אתה צריך גישה. לאחר התקנתו, אמת שיש לך אותו:
עדיף לתן לסוכן קודינג לעשות את כל ההשתלבות? ה-Python SDK Agent Skill מכיר את נתיב ההתקנה, מתכננת את נקודות ההשתלבות, כותבת אותן ומאמתת שהאירועים מגיעים.

התחלה מהירה

השתלבות בקריאה אמיתית

בפועל אתה עוטף את קוד הסוכן הקיים שלך. תחום קריאת מודל עם model_request לפני וmodel_response אחרי, כך שני האירועים משתרעים על הבקשה האמיתית וה-Failproof AI Observability יכול להזדווג עם הם:
עטוף קריאות כלים באותו אופן עם tool_use וtool_result, וודא שימוש באחד tool_call_id בכל הזוג. הנה איך נראים האירועים האלה ברגע שהם מגיעים לדשבורד, מקודדים בצבע לפי סוג וניתנים לסינון לפי סביבה, סוכן וסדרת: ה-Events stream החי, מקודד בצבע לפי סוג אירוע וניתן לסינון לפי סביבה, סוכן וסדרת

configure()

התקשר פעם אחת לפני כל קריאת event.*. בטוח להשמיט; הערכות ברירת המחדל עובדות מהקופסה. כל הטיעונים הם רק מילות מפתח; העבור אותם בשם כפי שמוצג למעלה. כאשר base_dir הוא None (ברירת המחדל), ה-SDK קורא $AGENTEYE_HOME אם הוגדר, אחרת חוזר ל~/.agenteye. זה תואם את הרזולוציה של הקולט עצמו, כך שמשתנה סביבה AGENTEYE_HOME יחיד מגדיר את ה-spool של אירועים משותפים לשניהם ה-SDK והקולט.

סביבה

תווית כל אירוע עם סביבת הפריסה (production, staging, qa, canary וכו’). הגדר אותה פעם אחת; ה-SDK מצרף אותה לכל אירוע באופן אוטומטי. אפשרות 1: דרך configure():
אפשרות 2: דרך משתנה סביבה:
עדיפות: configure(environment=...) מנצחת על משתנה הסביבה. אם לא הגדרת אף אחד מהם, ברירת המחדל היא "dev". ערך הסביבה מופיע כמסנן מהדרגה הראשונה בדשבורד וניתן לאחסון בשרת לשאילתות מהירות.
אזהרה: ערכי סביבה חייבים לא להכיל פסיק תחתוני ,. מסננים הדשבורד משתמשים בבחירה מרובה המופרדת בפסיקים ברשת (?environment=prod,staging), כך שסביבה בשם prod,blue היתה מחולקת לשני ערכים. אירועים עם סביבות המכילות פסיקים נדחים בזמן הצגת.

נתונים וסודיות

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

התייחסות לאירועים

רוב האירועים באים בזוגות התחלה/סיום שחולקים מזהה מתאם: tool_use וtool_result חולקים tool_call_id, hook_triggered וhook_completed חולקים hook_id, וhuman_wait וhuman_input חולקים input_id. פלוט את אירוע ההתחלה, בצע את העבודה, ואז פלוט את אירוע הסיום עם אותו מזהה. Failproof AI Observability תואם את הזוג ומחשב את duration_ms עבורך, כך שלעולם לא תעביר את duration_ms בעצמך. גרף הביצוע בסגנון git של סדרה ליד ציר הזמן של האירועים שלה, שנבנה מחדש מהאירועים המזווגים, עם לוח התמוספיה/מודל/ווק כל שיטות האירוע דורשות את שני השדות הבאים: כל השיטות גם קבלות **kwargs שרירותי לנתונים מטא מותאם אישית (ראה שדות מותאם אישית).

event.agent_start()

מתפוצץ כאשר סוכן מתחיל עבודה.

event.agent_end()

מתפוצץ כאשר סוכן סיים את העבודה.

event.tool_use()

מתפוצץ כאשר סוכן משדל כלי. זווג עם tool_result; ה-SDK מחשב באופן אוטומטי את duration_ms.

event.tool_result()

מתפוצץ כאשר כלי חוזר. מתאם עם tool_use דרך tool_call_id.

event.model_request()

מתפוצץ ממש לפני שליחת הנושא ל-LLM.
ערכי messages מקבלים או content של מחרוזת רגילה או Anthropic בסגנון רשימה-בלוקים content. פרמטרים של דגימה (temperature, max_tokens וכו’) יכולים להיות מועברים כ-kwargs נוספים.

event.model_response()

מתפוצץ כאשר ה-LLM חוזר בתגובה.
content מקבל או מחרוזת רגילה (ספקים גנריים) או רשימה של בלוקי תוכן בסגנון Anthropic. קריאות כלים חיות בתוך content כבלוקים של {"type": "tool_use", ...}, ללא שדה נפרד של tool_calls.

event.hook_triggered()

מתפוצץ כאשר ווק דולק. זווג עם hook_completed; ה-SDK מחשב באופן אוטומטי את duration_ms.

event.hook_completed()

מתפוצץ כאשר ווק מסיים. מתאם עם hook_triggered דרך hook_id.

event.error()

מתפוצץ כאשר שגיאה לא טופלת מתרחשת.

אירועי אדם-בתוך-לולאה

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

event.human_wait()

מתפוצץ כאשר הסוכן משהה את הביצוע בהמתנה לאדם לספק קלט. זווג עם human_input; ה-SDK מחשב באופן אוטומטי את duration_ms (כמה זמן האדם לקח להגיב).

event.human_input()

מתפוצץ כאשר אדם מספק קלט והסוכן מתחדש. מתאם עם human_wait דרך input_id. duration_ms מחושב באופן אוטומטי ולא יכול להיות מעביר על ידי הקורא.

event.human_pause()

מתפוצץ כאשר אדם משהה באופן פעיל את הסוכן (למשל דרך בקרה בדשבורד). הסוכן מושעה אך לא מסתיים.

event.human_interrupt()

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

שדות מותאם אישית

כל טיעונים מילת מפתח נוספים מצורפים לאירוע אחרי השדות הסטנדרטיים:
timestamp, type וenvironment שמורים ויגרום ValueError (Reserved field names cannot be used as custom fields: [...]) אם מועברים כשדות מותאם אישית. session_id וagent_id הם פרמטרים נדרשים בכל שיטת אירוע ולא ניתן לספק אותם פעם שנייה; Python מעלה TypeError אם אתה עושה זאת. הגדר את הסביבה עם configure(environment=...) (או המשתנה AGENTEYE_ENVIRONMENT) במקום. שמור משא כמו JSON מובנה כאשר אתה רוצה לשאול את השדות שלהם. ערכים שה-JSON לא תומך במקום בהם — כגון datetimes, UUIDs, decimals, sets, bytes, או אובייקטי מודל — מומרים למחרוזות כדי להמשיך בהקלטה בבטחה.

כיצד אירועים כתובים

אירועים מאוחסנים בתהליך ודחפו לדיסק כל שניות flush_interval (ברירת מחדל 500 ms). כל דחיפה כותבת קובץ JSONL אחד:
הקולט צופה בתיקייה זו וטוען קבצים באופן אוטומטי. אתה לא צריך לנהל את הקבצים האלה ישירות. כל קובץ כתוב בצורה אטומית: ה-SDK כותב לקובץ זמני ואחר כך שינה שם אותו למקום, כך שהקולט לעולם לא רואה קובץ שחצי כתוב. דחיפה סופית גם רצה כאשר התהליך שלך יוצא, כך שאירועים מאוחסנים במרווח האחרון לא אבדים. אם הקולט במצב לא מקוון, אירועים פשוט מצטברים כקבצים בדיסק וחומר ברגע שהוא חוזר.

שלבים הבאים

  • Event stream: צפה באירועים אלה להגיע בשידור חי, מקודדים בצבע וניתנים לסינון לפי סביבה, סוכן וסדרת.
  • Sessions: ראה כיצד האירועים המזווגים בנו מחדש כל הרצת סוכן כגרף ביצוע וציר זמן.