סיוטים במטבח: מהדורת LangChain Agents
בניתי אפליקציית בריאות לניתוח מתכונים ויצירת תוכניות ארוחות.
השתמשתי ב-FastAPI וב-React עבור אפליקציית הווב. השתמשתי ב-LangChain עבור הסוכנים (agents). השתמשתי ב-LangSmith כדי לראות מה הסוכנים שלי עושים.
המטרה הייתה פשוטה. משתמש מספק URL. האפליקציה שולפת את המתכון ומפרקת אותו לרכיבים כמו מנות עיקריות, תוספות ורטבים. לאחר מכן, המשתמשים יכולים לשלב ביניהם כדי לבנות ארוחות או לעקוב אחר קלוריות.
נתקלתי בבעיה משמעותית באמינות של הסוכנים.
בהתחלה, השתמשתי בסוכן אחד כדי לקבץ את המתכון ולעצב את הפלט. הוא נכשל כל הזמן. הוא ייצר פריטים כפולים. הוא השמיט הוראות. הוא איחד הכל לבלוק אחד ענק.
ניסיתי הגדרה של שני סוכנים כדי לתקן זאת:
- סוכן 1 (Grouping): מוצא את רכיבי המתכון השונים ומארגן את המרכיבים וההוראות.
- סוכן 2 (Structuring): לוקח את הטקסט המאורגן ההוא והופך אותו לפורמט JSON נקי.
זה עבד יום אחד. למחרת, השגיאות חזרו. סוכן ה-structuring החל להחזיר JSON שחסרים בו כל המרכיבים וההוראות.
הפסקתי להשתמש בפקודות print והתחלתי להשתמש ב-LangSmith.
LangSmith מראה לי latency, שימוש ב-tokens ועלות. חשוב מכל, הוא מראה לי בדיוק איפה השרשרת (chain) נשברת.
במקרה שלי, סוכן ה-grouping עבד בצורה מושלמת. הוא ייצר markdown מעולה עם כל הפרטים. הכשל קרה בסוכן השני. הוא איבד נתונים במהלך הטרנספורמציה.
כעת אני עובד על שלושה תיקונים:
- שיפור אמינות הסוכנים: שמתי לב שסוכן ה-structuring מנסה לנחש שדה cuisine שלא היה ב-prompt המקורי. הבלבול הזה גורם לשגיאות.
- הוספת וולידציה (validation): אשתמש בפונקציות Python כדי לבדוק את הפלט. אני רוצה לוודא שה-markdown תקין ושאין כפילויות.
- יכולת תצפית (observability) טובה יותר: אני רוצה לקשר כל הרצה של סוכן לבקשת משתמש ספציפית לצורך מעקב (tracing) קל יותר.
בנייה עם סוכנים היא לא משימה חד-פעמית. זהו לופ מתמיד של בדיקות ותיקונים.
מקור: https://dev.to/kristianroopnarine/kitchen-nightmares-langchain-agents-edition-45co
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi
