Observability & Production
למה תצפית קריטית במיוחד באפליקציות אגנטיות
לוג רגיל מספר מה קרה בקוד דטרמיניסטי; agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית. הוא לא דטרמיניסטי — אותה שאלה יכולה להוביל בכל הרצה למספר שונה של סיבובי לולאה, כלים שונים שנבחרו, ואפילו תשובות שונות בניסוח. בלי כלי תצפית ייעודי קשה לדעת בדיעבד למה agent ספציפי הפעיל כלי מסוים, כמה זמן וכסף עלתה הרצה, או איפה בדיוק תהליך תקוע.
ככל שהוספנו יותר שכבות בפרקים הקודמים — middlewareהמנגנון ב-LangChain שמאפשר להתערב בלולאה האגנטית עצמה; המימוש הקונקרטי של ה-harness. מתוך LangChain, Middleware., structured outputסכימה שמתארת את צורת התשובה הסופית, כך שה-agent מחזיר אובייקט שתואם לה ולא רק טקסט חופשי. מתוך LangChain, Structured Output., subagentsסוכן שהסוכן הראשי מפעיל לחלק מוגדר מהמשימה, עם קונטקסט נפרד משלו; מבחינת ההורה זו עוד קריאת כלי. מתוך AI Agents, Subagents — האצלת משימות. — כך גדל מספר הצעדים הנסתרים בכל הרצה, וגדל הצורך בכלי שמראה את כולם במקום אחד, ולא רק את התשובה הסופית.
LangSmith: tracing ו-debugging
LangSmith הוא כלי התצפית הרשמי של LangChainפריימוורק בקוד פתוח לבניית אפליקציות מבוססות LLM ו-agents, שעוטף רכיבים חוזרים בממשק אחיד. מתוך LangChain, מבוא ל-LangChain.: מפעילים אותו דרך משתני סביבה, ומאותו רגע כל agent.invoke או agent.stream נשלח אוטומטית כ-tracetrace הוא תיעוד מלא של הרצה אחת: כל קריאה למודל, כל קריאת כלי עם הקלט והפלט, טוקנים, זמן ועלות. מתוך AI Agents, הערכת סוכנים (Evals). מלא — כולל כל קריאה למודל, כל tool call עם הפרמטרים והתוצאה שלו, וזמן/עלות לכל שלב — בלי לשנות שורת קוד אחת בלוגיקת ה-agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית. עצמה.
שמות משתני הסביבה המדויקים עשויים להשתנות בין גרסאות — כדאי לבדוק את התיעוד הרשמי לערכים העדכניים.
# .env
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=lsv2_...
LANGSMITH_PROJECT=my-langchain-appHuman-in-the-loop בסביבת production
בפרק ה-Safety בנושא AI Agents למדנו שמעורבות אנושית היא סקאלה, לא מתג בינארי, ושעקרון ההרשאה המינימליתלתת לכל סוכן רק את ההרשאות שהוא צריך למשימה הנוכחית, ולא גישה רחבה "ליתר ביטחון". מתוך AI Agents, הרשאות ובטיחות — סיכום הנושא. חל בעיקר כשיש כמה סוכניםLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית./worker-ים שכל אחד מקבל רק את מה שהוא באמת צריך. באפליקציית LangChainפריימוורק בקוד פתוח לבניית אפליקציות מבוססות LLM ו-agents, שעוטף רכיבים חוזרים בממשק אחיד. מתוך LangChain, מבוא ל-LangChain. אמיתית, שני העקרונות האלה מתממשים דרך אותו middlewareהמנגנון ב-LangChain שמאפשר להתערב בלולאה האגנטית עצמה; המימוש הקונקרטי של ה-harness. מתוך LangChain, Middleware. שראינו בפרק הקודם — approval gatesנקודה שבה ה-harness עוצר לפני פעולה רגישה ומבקש אישור מפורש מהמשתמש. מתוך AI Agents, The Harness — מי בפועל מריץ את הסוכן. שעוצרים פעולות מסוכנות, ומדיניות scoping לכלים של כל sub-agentסוכן שהסוכן הראשי מפעיל לחלק מוגדר מהמשימה, עם קונטקסט נפרד משלו; מבחינת ההורה זו עוד קריאת כלי. מתוך AI Agents, Subagents — האצלת משימות..
בסביבת production, שילוב הזה (middleware לאכיפה + LangSmithכלי התצפית הרשמי של LangChain, ששולח כל הרצה של agent כ-trace מלא בלי לשנות את הקוד. מתוך LangChain, Observability & Production. לתצפית) הוא מה שמאפשר לתת ל-agent אוטונומיה אמיתית בלי לאבד שליטה: אפשר לראות בדיוק מה הוא ניסה לעשות, ולעצור אותו לפני שהוא מזיק.
סיכום הנושא: מ-createAgent לאפליקציית production
התחלנו בפרק הראשון ממקום פשוט — למה בכלל צריך פריימוורק, ואיך LangChainפריימוורק בקוד פתוח לבניית אפליקציות מבוססות LLM ו-agents, שעוטף רכיבים חוזרים בממשק אחיד. מתוך LangChain, מבוא ל-LangChain. ממש את מושגי ה-agent/harness שכבר הכרנו מנושא AI Agents. משם בנינו agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית. ראשון עם createAgent, בחרנו וקינפגנו model, והגדרנו tools איכותיים עם schema ברור ותיאור מדויק.
בהמשך למדנו לקבל פלט מובנהסכימה שמתארת את צורת התשובה הסופית, כך שה-agent מחזיר אובייקט שתואם לה ולא רק טקסט חופשי. מתוך LangChain, Structured Output. עם responseFormat, להזרים התקדמות בזמן אמת עם stream, לשמר מידע בין שיחות עם memoryאחסון חיצוני לקונטקסט, כמו קובץ, מסד נתונים או אינדקס וקטורי, שהסוכן כותב אליו וקורא ממנו ב-session חדש. מתוך AI Agents, Memory — מה שורד מעבר לשיחה. ארוך-טווח, ולהתערב בלולאה האגנטיתהמחזור של סוכן: תצפית, תכנון ופעולה, כשה-harness מבצע את הכלי ומוסיף את התוצאה לקונטקסט לפני הסיבוב הבא. מתוך AI Agents, Agents והלולאה האגנטית. עצמה עם middlewareהמנגנון ב-LangChain שמאפשר להתערב בלולאה האגנטית עצמה; המימוש הקונקרטי של ה-harness. מתוך LangChain, Middleware. — ולבסוף, בפרק הזה, להרכיב כמה סוכנים יחד ולעקוב אחרי מה שהם עושים בפועל.
כל השכבות האלה יחד — לא אף אחת מהן לבד — הן מה שהופך createAgent בשורה אחת לאפליקציית AI production אמיתית: מודל שבוחרים ומקנפגים, כלים מתועדים היטב, פלט שאפשר לסמוך עליו, זיכרון שחוצה שיחות, מנגנוני בטיחות שאוכפים גבולות, ותצפית שמראה בדיוק מה קרה בכל הרצה.
שאלות נפוצות
האם LangSmith שולח את תוכן השיחות לשירות חיצוני?
כן. כברירת מחדל ה-traces כוללים את הקלטים והפלטים המלאים — הודעות המשתמש, תוצאות כלים ותשובות המודל — והם נשלחים לשירות של LangSmith. אם יש בהם מידע רגיש, בדקו לפני שמפעילים tracing בפרודקשן את האפשרויות להסתיר או לסנן קלטים ופלטים, ואת אפשרויות האחסון של השירות.
האם חובה להשתמש ב-LangSmith?
לא. הוא הכלי הרשמי ומשתלב בלי שינוי קוד, אבל אפשר לשלוח traces גם לכלי תצפית אחרים, למשל דרך OpenTelemetry, או לכתוב middleware שמתעד את מה שחשוב לכם. העיקר הוא שבכל הרצה אפשר לראות את כל הצעדים, ולא רק את התשובה הסופית.
איך מוודאים שה-agent לא נהיה גרוע יותר אחרי שינוי?
שומרים סט של שאלות מייצגות עם התוצאה הצפויה, ומריצים אותו לפני כל שינוי במודל, ב-prompt או בכלים ואחריו — בדיוק כמו ה-evals מנושא AI Agents. LangSmith תומך גם בהרצת הערכות כאלה על datasets, כך שה-traces וההשוואות נמצאים באותו מקום.