סוכן ה-AI שלך לא צריך להיות חכם יותר. הוא צריך להיות אידמפוטנטי (Idempotent)
רוב סוכני ה-AI בסביבת ייצור (production) לא נכשלים בגלל הסקה (reasoning) לקויה. הם נכשלים בגלל שגיאות רשת.
המודל בוחר בכלי הנכון. הוא ממלא את הפרטים הנכונים. ואז, הוא מחייב לקוח פעמיים.
זה קורה מכיוון שסוכנים בעלי יכולת כתיבה (write-capable) פועלים ברשתות לא אמינות.
- בקשות חורגות מזמן ההמתנה (timeout).
- חיבורים מתנתקים.
- פריימוורקים מנסים שוב (retry) שלבים שכבר הסתיימו.
בסוכן לקריאה בלבד (read-only), ניסיון חוזר (retry) הוא בחינם. בסוכן בעל יכולת כתיבה, ניסיון חוזר הוא פעולה שנייה בלתי הפיכה.
הפתרון הוא אידמפוטנטיות (idempotency).
הביטו בכשל הנפוץ הזה:
- הסוכן קורא לפונקציה לשליחת חשבונית.
- השירות יוצר את החשבונית.
- החיבור מתנתק לפני שהתגובה מגיעה לסוכן.
- הסוכן מזהה timeout ומבצע ניסיון חוזר.
- עכשיו, יש לכם שתי חשבוניות.
מודל חכם יותר לא יפתור את זה. מודל חכם יותר עשוי אפילו להחמיר את המצב על ידי ביצוע ניסיונות חוזרים אגרסיביים יותר.
אפשר ללמוד ממערכות תשלום כמו Stripe. הן משתמשות ב-Idempotency-Key. השרת שומר את התוצאה של הבקשה הראשונה. אם הלקוח שולח שוב את אותו מפתח, השרת מחזיר את התוצאה השמורה במקום להריץ את הפעולה פעם שנייה.
עבור סוכן AI, עליכם לגזור את המפתח הזה מהכוונה (intent).
אל תשתמשו ב-IDs אקראיים. השתמשו ב-hash של שם הכלי והפרמטרים היציבים שלו.
דוגמה:
- כלי:
charge_customer - פרמטרים:
{customer_id: 42, amount: 500} - מפתח:
hash(tool + params)
אם הסוכן מבצע ניסיון חוזר לאותו חיוב בדיוק, המפתח נשאר זהה. המערכת מזהה זאת ומונעת חיוב כפול.
מילת אזהרה: המפתח שלכם טוב רק כמו ההגדרה שלכם לפעולה בודדת.
- אם תכללו חותמת זמן (timestamp) ב-hash שלכם, לכל ניסיון חוזר יהיה מפתח חדש. ההגנה שלכם תיכשל.
- אם תכללו גוף הודעה שנכתב על ידי LLM, המודל עלול לשנות מילה אחת. זה יוצר מפתח חדש ופעולה כפולה.
תמיד השתמשו במפתחות המבוססים על נתונים יציבים כמו מזהי לקוחות (customer IDs) או מזהי חשבוניות (invoice IDs). הוציאו מכל מה שהמודל עלול לשנות.
הפסיקו לנסות לתקן את האמינות של הסוכן באמצעות פרומפטים טובים יותר.
אמינות היא להפוך את העלות של החלטה חוזרת לאפס. אם הסוכן שלכם מבצע את אותה פעולה פעמיים, שום דבר לא אמור להישבר.
Optional learning community: https://t.me/GyaanSetuAi
