שטויות שלמדתי על Agents בדרך הקשה
כתיבת אייג'נט, כלומר תוכנה שעוטפת LLM כדי לשלב מבנה דטרמניסטי עם "חשיבה" לא דטרמניסטית דורשת שינוי גישה מסוים בעבודת הפיתוח. אלה כמה טיפים שלמדתי בדרך הקשה אבל היום כבר לא אוותר עליהם:
תיקיית Prompts - את כל הפרומפטים ל LLM אני שומר בתיקייה מסודרת, כל פרומפט בקובץ markdown משלו עם משתנים (בתוך סוגריים מסולסלים). מבנה כזה מאפשר לי לבדוק את הפרומפטים בתוך סביבות הפיתוח של הפלטפורמות ולעשות את כל ההתאמה דרך הצבת ערכים במשתנים. וכן הפרומפטים הם חלק מהקוד ונשמרים בגיט בדיוק כמו כל קובץ אחר.
קבלת מידע מובנה מה LLM - לאנגצ'יין וגם Vercel AI SDK יודעים לבקש מה LLM לקבל את התוצאה בצורת אוביקט וגם מוודאים שקיבלו את האוביקט הצפוי. אין שום סיבה היום לפרסר לבד תשובות של LLM-ים.
חלק לא מבוטל מהבקשות ייכשלו או יחזירו מידע לא נכון. יש לוודא מנגנוני Retry לכל שלב במערכת שמשתמש ב LLM.
עבודה עם LLM-ים יכולה לקחת זמן. יש לוודא שהמערכת תמיד יכולה לעצור תהליך באמצע ולהמשיך מאותה נקודה. זה אומר שאני מחלק את השיחה עם LLM למשימות קטנות ושומר את התוצאות של המשימות אחרי כל אחת שבוצעה כדי שאפשר יהיה להמשיך תמיד מהמשימה הבאה.
שילוב מידע LLM-י עם קוד רגיל - למרות ש LLM שמח לענות על כל שאלה, לא כל התשובות שלו מדויקות. אם אני רוצה להוציא מילים משיר עדיף לי להשתמש ב API מסודר שמחזיר את המילים במקום לבקש מ LLM שיאזין לשיר, כי אולי ה LLM לא יבין חלק מהמילים. אם אני צריך להוציא טקסט מ HTML שהמבנה שלו צפוי עדיף להשתמש בספריית Web Scraping קלאסית במקום לסמוך על LLM שאולי ימציא תוכן. הרבה פעמים אני אשתמש בקוד קלאסי כדי לאסוף את המידע וב LLM כדי לנתח אותו ולתמצת אותו.
שימו לב למודל וגם לטמפרטורה - בקריאת API אני יכול לבחור את הטמפרטורה, כלומר את מידת היצירתיות של ה LLM. יש משימות שדורשות טמפרטורה גבוהה ואחרות שעדיף שיהיו יותר דטרמניסטיות ולכן נעדיף טמפרטורה נמוכה. עדיף לשחק עם הפרמטרים בסביבת הפיתוח של הפלטפורמה ולבחור ערכים שנותנים לכם את התוצאות הטובות ביותר. וכן התוצאה היא תמיד שילוב של הפרומפט, המודל והטמפרטורה.