الگوی PRG برای عاملهای هوش مصنوعی
عاملهای هوش مصنوعی در حال تکرار اشتباهی ۲۵ ساله هستند.
در دهه ۹۰ میلادی، فرمهای وب با یک باگ بزرگ مواجه بودند. کاربر سفارشی ثبت میکرد، دکمه refresh را میزد و مرورگر دوباره همان سفارش را ارسال میکرد. این اتفاق منجر به دو بار کسر وجه و یک مشتری عصبانی میشد.
راه حل، الگوی Post/Redirect/Get (PRG) بود. این الگو به این صورت عمل میکند:
- کاربر یک درخواست POST برای ارسال دادهها میفرستد.
- سرور دادهها را پردازش میکند.
- سرور یک redirect به یک URL جدید میفرستد.
- مرورگر یک درخواست GET برای نمایش نتیجه انجام میدهد.
اگر کاربر دکمه refresh را بزند، فقط درخواست GET را دوباره تکرار میکند. درخواست خطرناک POST دیگر وجود ندارد.
عاملهای هوش مصنوعی این باگ را دوباره بازگرداندهاند.
وقتی یک عامل (agent) ابزاری را برای کسر وجه از کارت یا ایجاد یک رکورد فراخوانی میکند، ممکن است اتصال شبکه قطع شود. عامل نمیداند که آیا آن عملیات با موفقیت انجام شده است یا خیر. بنابراین دوباره تلاش میکند. حالا مشتری دو بار هزینه پرداخت کرده است.
شما میتوانید این مشکل را با استفاده از کلیدهای idempotency حل کنید. یک کلید idempotency مانند یک redirect عمل میکند و «انجام کار» را از «نمایش نتیجه» جدا میکند.
الگوی مناسب برای عاملها باید به این صورت باشد:
- عامل قبل از اولین تلاش، یک کلید منحصربهفرد تولید میکند.
- از یک مقدار ثابت مانند user ID و cart ID استفاده میکند.
- این کلید را با هر بار فراخوانی ابزار ارسال میکند.
- سرور کلید را بررسی میکند. اگر دوباره همان کلید را ببیند، به جای اجرای دوباره عملیات، نتیجه قبلی را بازمیگرداند.
برای وظایف طولانی، شما به چیزی فراتر از یک کلید نیاز دارید. شما به checkpointing نیاز دارید. باید وضعیت (state) را در هر مرحله ذخیره کنید. این کار تضمین میکند که در صورت شروع مجدد، فرآیند از همان جایی که متوقف شده بود، ادامه یابد.
برای هر ابزارِ عاملی که دادهها را تغییر میدهد، این قوانین را رعایت کنید:
- هر ابزار تغییردهنده (mutating tool) باید یک کلید idempotency را بپذیرد.
- کلید را از قصد کاربر (user intent) استخراج کنید، نه از یک برچسب زمانی (timestamp).
- کلید را قبل از اولین تلاش تولید کنید.
- در هر بار تلاش مجدد، از همان کلید استفاده کنید.
- برای وظایف طولانی، هر مرحله میانی را checkpoint کنید.
لایه تغییر میکند، اما منطق ثابت میماند.
انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi
