langchain-core, כך שהתקנת אחד משלושים מתקינה את השני.
התקנה
failproofai-sdk[langchain].
נתמך: langchain-core 1.4.7 עד 2.0, langgraph 1.2 עד 2.0. מחוץ לטווח זה, המתאם עדיין מותקן ומוציא אזהרה פעם אחת.
התקנה
instrument() רושם tracer דרך langchain_core.tracers.context.register_configure_hook. LangChain מזריק אותו לכל מנהל callback שהוא בונה, כך שגרפים, כלים ומודלים נתפסים ללא שינוי באתר הקריאה — כולל אלה בתוך ספריות שלא כתבת.
מה מתועד
צומת הופך לכן, לא לסוכן מקונן.
agent_id הוא ההיבט הראשוני בכל משטח לוח מחוונים — קידום retrieve, grade_documents ו-should_continue לסוכנים יטביע אותו, ויתייג את ההפעלה לאחר איזה צומת שקרה להריץ תחילה.
טווחי Hook משדרים באותו אופן ועדיין נותנים לך תצוגת חביון לכל צומת.
שם את הצמתים שלך כל דבר שאתה אוהב. ריצה של צומת מזוהה על ידי הצורה שלה — ריצה שאינה עלה הנושאת את תג הצעד של LangGraph בעצמו — לעולם לא על ידי שמה.
שם צומת אחרי הדבר שהוא מריץ היה גורם לאירועי הדבר הזה להיעלם. זה כבר לא קורה.
זרימה
.stream() ו-.astream()אינם פולטים אירועים לכל טוקן. הם משתקללים לתוךmodel_response` הסגירה:
ספירות טוקנים בתגובה זורמת
עניין נפרד, וקל להחמיץ: OpenAI שולח שימוש רק בתגובה זורמת כאשר מבוקש.model_response מגיע ללא ספירות טוקנים.
דוגמה
שם את הטווחים שלך
כברירת מחדל, הטווח השורש לוקח את שם הגרף בעצמו. עטפו אותו כדי לקבל תווית שבחרת:parent_id:
agent_id בעלי קרדינליות נמוכה. השתמש בתפקיד או שם צומת, לעולם לא UUID או מחרוזת לכל ריצה.
שלוט בהפעלה
מזהה ההפעלה מתפתר בסדר זה, התאמה ראשונה מנצחת:instrument("langchain", session_id=...)config={"metadata": {"failproofai_sdk_session_id": ...}}- הטווח הסוגר
failproofai_sdk.session() metadata["session_id"],metadata["conversation_id"], אוmetadata["thread_id"]- מזהה הריצה של השורש
אפשרויות
capture_content=False עבור נתונים מוסדרים. מבנה, תזמוני, ספירות טוקנים, שמות כלים ותוצאות עדיין מתועדות; גופי הודעות אינם.
include_chains חל על ריצות מקוננות בלבד. runnable שאתה משדר ברמה העליונה הוא השורש של ההפעלה, כך שהוא הופך לטווח הסוכן ולא לזוג כן, ושמה כאן אין השפעה.
בן אדם בלולאה
interrupt() מייצר ארבעה אירועים, וגם זוג אינו עודף:
human_wait ל-human_input נושא את הנושא והתשובה (שניהם נשמטים תחת capture_content=False, יחד עם מקורות מסמכי retrieval — ספירת המסמכים שורדת). agent_pause ל-agent_resume הוא הזוג היחיד שמזין זמן מושהה, אז ללא זה מתן אדם בן עשר דקות מחויב כזמן סוכן פעיל. הטווח השורש נשאר פתוח על פני הפער, שומר על שתי הקריאות בהפעלה אחת.
בעיות נפוצות
כלי מעלה מבטל את כל הגרף
כלי מעלה מבטל את כל הגרף
create_react_agent מפיץ את החריגה. כדי לתת למודל לראות את הכישלון ולהמשיך, בנה את צומת הכלי במפורש:tool_result הנושא שגיאה בכל מקרה. זה רק קובע אם הריצה שורדת אותה.סוכן שנקרא על שם מחלקת המודל מופיע בעקבות
סוכן שנקרא על שם מחלקת המודל מופיע בעקבות
llm.invoke() ישיר מחוץ לגרף כלשהו אין ריצת הורה, כך שהוא פותח טווח שורש ופולט זוג המודל שלו בתוכו. לוח המחוונים משדר עלים לסוכן פתוח, כך שהטווח הוא כוונתי. שם אותו:כל אירוע מופיע פעמיים
כל אירוע מופיע פעמיים
עברת טוכן Failproof ב-
config={"callbacks": [...]} וגם קראת instrument(). הסר אותו. ה-configure hook כבר מכסה כל מנהל callback בתהליך.אישורים אנושיים מופיעים כשגיאות
אישורים אנושיים מופיעים כשגיאות
הם לא. LangGraph מעלה
GraphInterrupt דרך אותה נתיב כמו חריגה אמיתית, כך שכל השהיה מגיעה לעוקב כקריאת שגיאה. כל תת-סוג GraphBubbleUp מטופל כזרימת בקרה במקום זאת, כך שאישור לא צובע שגיאה אדומה.כלום לא מתועד
כלום לא מתועד
בדוק בסדר זה:
instrument() רץ לפני שהגרף הוצא; יש with failproofai_sdk.session(): סביב הקריאה; FAILPROOFAI_SDK_STRICT=1 קבוע, כך שכן שהוגדל מעלה במקום להיות ספוג.הבא
איך זה עובד
זוגות, מזהים, מחזור חיי ההפעלה וההופעה.
קרא עקבה
עקוב את הסיבתיות דרך ההפעלה שרק תפסת.
מסגרות אחרות
CrewAI, LlamaIndex, Pydantic AI וסוכנים מותאמים אישית.

