ניסיונות חוזרים מוגבלים לקריאות כלים של סוכנים
האירוע הגרוע ביותר שהסוכן שלנו גרם לא היה תשובה שגויה. זה היה לולאה.
קריאה לכלי נכשלה. הסוכן ניסה שוב. הניסיון החוזר נכשל שוב. הסוכן המשיך הלאה. הוא שרף טוקנים והכה ב-API שלנו מאות פעמים בדקה אחת.
הסוכן עשה את מה שאמרנו לו לעשות. אמרנו לו לנסות שוב אם כלי נכשל. שכחנו להגיד לו מתי להפסיק.
ניסיונות חוזרים (Retries) טובים לשגיאות זמניות. הבעיה היא שסוכנים לא יכולים להבחין בין שגיאה זמנית לשגיאה קבועה. ללא מגבלות, סוכן ינסה שוב קריאה תקולה עד שמשהו יעצור אותו.
קוד מסורתי משתמש במגבלות ניסיון חוזר. קריאות כלים של סוכנים העבירו את ההחלטה הזו אל תוך תהליך ההסקה (reasoning) של המודל. זה הפך את הלולאה לבלתי נראית ולא מוגבלת.
תיקנו זאת על ידי הוספת שני תקציבים מחוץ למודל:
• תקרת קריאה (Per-call cap): לכלי ספציפי מוקצית מספר קבוע של ניסיונות. אם הוא נכשל, הסוכן חייב לנסות נתיב אחר. • תקציב לכל סשן (Per-session budget): למשימה כולה יש מגבלה על סך כל קריאות הכלים. אם הסוכן מגיע למגבלה זו, הוא עוצר ומבקש עזרה.
המגבלה עצמה אינה הפתרון. מה שקורה אחרי המגבלה הוא מה שחשוב.
אם פשוט עוצרים, הסוכן נתקע. במקום זאת, אנחנו נותנים לסוכן הודעה ברורה. אנחנו אומרים לו שהקריאה נכשלה ושהוא לא חייב לנסות שוב. זה הופך לולאה להחלטה. בדרך כלל, הסוכן בוחר אז גישה חדשה.
מאז שהוספנו זאת, לולאות של שימוש לרעה בכלים כמעט נעלמו. כשהן קורות, הן מסתיימות בצורה מסודרת במקום ליצור חשבונות API ענקיים.
מציאת המגבלה הנכונה היא קשה. מגבלה הדוקה מדי הורגת משימות ארוכות. מגבלה רחבה מדי מאפשרת לולאות יקרות. אנחנו קובעים את המגבלות שלנו בהתבסס על אורך משימות בפרצנטיל ה-95.
האם יש לכם דרך טובה יותר לקבוע את התקציבים האלו? ספרו לי בתגובות.
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi