عامل ماندگار: گردش‌کار هوش مصنوعی که در دنیای واقعی دوام می‌آورد

ت

تیم ژرف ای‌آی

۱۶ تیر ۱۴۰۵به‌روزرسانی ۸ مرداد ۱۴۰۵۱۱ دقیقه مطالعه
عامل ماندگار: گردش‌کار هوش مصنوعی که در دنیای واقعی دوام می‌آورد

عاملی که فقط تا زنده‌بودن یک فرایند، اتصال و اعتبارنامه کار می‌کند، یک درخواست API طولانی است نه گردش‌کار ماندگار. کار واقعی شب تا صبح منتظر تأیید می‌ماند، هنگام استقرار کارگرش را از دست می‌دهد، یک رویداد را دوبار دریافت می‌کند، به توکن منقضی می‌رسد و پس از مکث می‌فهمد یکی از پنج سامانه بیرونی تغییر کرده است.

ماندگاری یعنی فرایند تجاری پس از وقفه بتواند وضعیتش را بازسازی کند، اعتبار فرض‌ها را دوباره بسنجد و با ایمنی ادامه دهد. به این معنا نیست که هر تلاش دقیقاً یک بار اجرا می‌شود یا مدل از متن نامنظم چت به‌درستی از سر گرفته می‌شود. موتور گردش‌کار باید مالک حالت و زمان باشد و مدل درون آن تصمیم‌های محدود ارائه کند.

ماشین حالت را بیرون مدل قرار دهید

گردش‌کار را با حالت‌های صریح نمایش دهید:

دریافت → اعتبارسنجی → برنامه‌ریزی → انتظار_تأیید → مجوز → اجرا → تطبیق → تکمیل

حالت‌های پایانی یا استثنا مانند رد، لغو، انقضا، جبران و بررسی_انسانی را نیز مدل کنید. هر گذار باید این موارد را ثبت کند:

  • هویت گردش‌کار و کار؛
  • ورودی یا رویداد آغازگر گذار؛
  • حالت پیش و پس؛
  • نسخه کد، مدل، پرامپت، سیاست و طرح داده در صورت ارتباط؛
  • تصمیم عادی‌شده یا درخواست ابزار؛
  • مراجع مجوز و تأیید؛
  • زمان، شمار تلاش و مهلت؛
  • نتیجه معتبر یا عدم قطعیت حل‌نشده.

«آخرین پیام دستیار» را حالت گردش‌کار ندانید. تاریخچه چت زبان کاربر، دستور، محتوای واکشی‌شده، خروجی مدل و مشاهده ابزار را مخلوط می‌کند. زمینه مفیدی است، اما منبع حقیقت تراکنشی نیست.

اجرای ماندگار می‌تواند بر رویدادسپاری، نقطه‌بازیابی، ماشین حالت پایگاه داده یا سکوی گردش‌کار بنا شود. شرط اصلی این است که گذار تعهدشده از مرگ کارگر جان سالم به‌در ببرد و بدون تکرار اثر کامل‌شده بازپخش یا بازسازی شود.

هماهنگ‌سازی قطعی را از کار غیرقطعی جدا کنید

فراخوانی مدل، زمان جاری، تصادف، شبکه و تصمیم انسان غیرقطعی‌اند. گردش‌کار مبتنی بر بازپخش باید نتیجه آن‌ها را ثبت کند و هنگام بازسازی همان واقعیت ثبت‌شده را بخواند، نه اینکه دوباره آن‌ها را فراخوانی کند.

دو لایه مفهومی بسازید:

  • هماهنگ‌سازی: تصمیم قطعی درباره گام بعدی بر اساس تاریخچه ماندگار؛
  • فعالیت: عملیات اثرگذار یا غیرقطعی مانند فراخوانی مدل، نوشتن رکورد، ارسال پیام یا API بیرونی.

Temporal یک نمونه متن‌باز و خاص فروشنده از این الگو است و مستنداتش تاریخچه رویداد ماندگار و بازپخش را شرح می‌دهد. سکوهای دیگر مدل اجرا و تضمین متفاوت دارند. ادعای فروشنده را عیناً تضمین معماری ندانید؛ دقیقاً مستند کنید کدام بخش سامانه شما ماندگار است، تاریخچه کجا ذخیره می‌شود و در ازدست‌رفتن منطقه یا خطای اپراتور چه اتفاقی می‌افتد.

خروجی مفید فعالیت مدل را نگه دارید: شناسه مدل، مرجع ورودی عادی‌شده، نتیجه ساخت‌یافته، وضعیت اعتبارسنجی و تصمیم ایمنی. راز خام یا داده شخصی غیرضروری را وارد تاریخچه نکنید؛ تاریخچه ماندگار عمداً حذف و تغییر سختی دارد.

فرض کنید فعالیت بیش از یک بار اجرا می‌شود

صف و سامانه توزیع‌شده معمولاً تحویل «حداقل یک بار» را ترجیح می‌دهد. کارگر شاید اثر را کامل کند و پیش از تأیید دریافت از کار بیفتد. زمان‌بند دوباره تلاش می‌کند، با اینکه مقصد تغییر کرده است.

برای هر نوشتن، کلید یکتایی را از عملیات تجاری پایدار بسازید، نه شماره تلاش. نمونه:

مستأجر + شناسه_گردش‌کار + نوع_اقدام + شناسه_مقصد + نسخه_اقدام

خدمت مقصد باید کلید را هم‌زمان با اثر ذخیره و در درخواست تکراری نتیجه نخست را بازگرداند. اگر API بیرونی این قابلیت را ندارد، دفتر میانی بسازید، مرجع تجاری با محدودیت یکتا به‌کار ببرید یا پیش از تلاش دوباره تطبیق دهید.

معنای HTTP کمک می‌کند، اما مسئله تجاری را حل نمی‌کند. RFC 9110 متد HTTP را زمانی یکتااثر می‌داند که اثر مورد انتظار چند درخواست یکسان با یک درخواست برابر باشد. GET، PUT و DELETE معنای یکتااثر دارند؛ POST عموماً ندارد. حتی متد یکتااثر می‌تواند لاگ تکراری بسازد یا در هم‌زمانی رفتار دشواری داشته باشد؛ در مقابل، نقطه POST می‌تواند کلید یکتایی تجاری را اجرا کند.

در سراسر عامل، صف، پرداخت‌یار، ایمیل و پایگاه داده تضمین عمومی و عملی «دقیقاً یک بار» وجود ندارد. تضمین محدودتری را اعلام کنید که واقعاً اعمال می‌شود؛ مثلاً «یک سند دفتر برای هر کلید عملیات، با تطبیق نتیجه نامعلوم».

پیش از تلاش دوباره، خطا را طبقه‌بندی کنید

فقط وقتی دوباره تلاش کنید که تلاش بعدی هم ایمن و هم مفید باشد:

ردهمثالپاسخ پیش‌فرض
گذراقطع اتصال، محدودیت نرخ، 503 موقتپس‌روی نمایی محدود با تصادفی‌سازی
دائمیطرح نامعتبر، اقدام پشتیبانی‌نشده، منبع حذف‌شدهشکست یا بازگشت به برنامه‌ریزی
تعارضنسخه عوض‌شده، نوبت پرشده، موجودی تغییرکردهتازه‌سازی حالت و تصمیم جدید
مجوزتوکن منقضی یا دامنه لغوشدهاختیار تازه یا توقف؛ نه همان توکن
نتیجه نامعلومپایان مهلت پس از احتمال تعهدپرس‌وجو با کلید یکتایی یا تطبیق
سیاست/ایمنینبود تأیید، عبور از سقفرد یا ارجاع؛ هرگز دورزدن با تکرار

سقف تلاش، بودجه کل زمان، مهلت هر فعالیت و زمان بررسی بعدی تعیین کنید. حلقه بی‌نهایت، رخداد موقت را به بار کنترل‌نشده و اقدام کهنه آینده تبدیل می‌کند.

اگر راهنمای تلاش دوباره سرور قابل اعتماد است ثبتش کنید، اما سقف و تصادفی‌سازی محلی را حفظ کنید. کار خسته‌شده را با آخرین حالت معتبر و اقدام‌های ایمن اپراتور وارد صف بررسی قابل مشاهده کنید. «نامه مرده» نباید به معنی رهاشدن نامرئی باشد.

انتظار را حالت ماندگار بدانید

عامل ممکن است دقیقه‌ها یا هفته‌ها منتظر بماند:

  • تأیید انسان؛
  • زمان برنامه‌ریزی‌شده؛
  • بارگذاری سند؛
  • بازگشت ناهمگام ارائه‌دهنده؛
  • موجودی یا تسویه؛
  • بازیابی یک وابستگی.

شرط انتظار، مهلت، فرد مسئول، سیاست یادآوری و قاعده لغو را ثبت کنید. رشته خوابیده یا تب مرورگر را باز نگه ندارید. از رویداد احراز و اعتبارسنجی‌شده ادامه دهید، نه هر پیامی که شناسه گردش‌کار دارد.

برای callback هم‌بستگی و احراز را با هم به‌کار ببرید. اگر مشخصات CloudEvents انتخاب شود، پوش رویداد بی‌طرف آن فیلدهای مفید id، source، type و طرح داده می‌دهد و مصرف‌کننده می‌تواند source و id برابر را تکراری بداند. CloudEvents توصیف رویداد را استاندارد می‌کند، نه تضمین تحویل یا پردازش دقیقاً یک بار؛ مصرف‌کننده هنوز به حذف تکرار و مجوز نیاز دارد.

در ادامه، همه فرض‌های زمان‌حساس را دوباره بسنجید: نسخه رکورد، قیمت، موجودی، هویت، مجوز، سیاست و تأیید. تأیید باید به پیش‌نمایش یا هش درخواست متصل باشد. درخواست تغییرکرده تصمیم جدید است، نه ادامه قدیمی.

لغو و جبران را طراحی کنید

لغو همکاری‌محور است، نه جادویی. باید به فعالیت صف‌شده، گردش‌کار فرزند، درخواست ابزار و وضعیت کاربر منتقل شود. فعالیتی که در سامانه بیرونی تعهد شده شاید دیگر قابل لغو نباشد.

برای تراکنش چندمرحله‌ای، پیش از انتشار اقدام جبرانی تعریف کنید. مقاله کلاسیک Sagas سال ۱۹۸۷ نوشته Garcia-Molina و Salem کار بلندمدت را دنباله‌ای از تراکنش‌ها با تراکنش جبرانی شرح می‌دهد. جبران rollback نیست: بسته ارسال‌شده باید برگشت بخورد، ایمیل ارسال‌شده پس‌گرفتنی نیست و بازپرداخت سند جدیدی می‌سازد، نه حذف پرداخت.

برای هر اثر مستند کنید:

  • آیا پیش از اجرا قابل لغو است؛
  • چگونه تعهدشدن آن تشخیص داده می‌شود؛
  • آیا جبران دارد؛
  • چه کسی جبران را مجاز می‌کند؛
  • اگر جبران هم شکست خورد چه می‌شود.

اثر اصلی و جبران را در رد ممیزی نگه دارید. حالت نهایی تمیز نباید تاریخچه رخداد را پاک کند.

مثال عملی: تأیید و صدور سفارش خرید

عاملی را در نظر بگیرید که درخواست واحد را به سفارش خرید تبدیل می‌کند:

  1. دریافت: گردش‌کار PO-2026-481 را بسازید و رویداد ورودی تکراری را حذف کنید.
  2. اعتبارسنجی: تأمین‌کننده، مرکز هزینه، ارز، اقلام و مستأجر را تأیید کنید.
  3. برنامه: مدل طبقه‌بندی و کد حساب پیشنهاد دهد و اعتبارسنج قطعی آن را بررسی کند.
  4. استعلام: قیمت و موجودی جاری را در فعالیت بگیرید و شناسه و انقضای پیشنهاد را ذخیره کنید.
  5. تأیید: پیش‌نمایش ثابت شامل تأمین‌کننده، جمع، شروط و نسخه قیمت نشان دهید؛ هویت تأییدکننده و هش درخواست را ثبت کنید.
  6. انتظار: گردش‌کار بدون نگه‌داشتن فرایند دو روز متوقف می‌شود.
  7. ادامه: قیمت، بودجه، وضعیت تأمین‌کننده، سیاست و اختیار تأییدکننده را دوباره بسنجید.
  8. تعهد: فقط یک سفارش با کلید PO-2026-481:issue:v1 صادر کنید.
  9. نتیجه نامعلوم: اگر دروازه تأمین‌کننده پایان مهلت داد، پیش از تکرار با همان مرجع تجاری پرس‌وجو کنید.
  10. اعلان: رسید را فعالیت یکتا و جداگانه بفرستید و وضعیت تحویل را ثبت کنید.

اگر قیمت منقضی شد، گردش‌کار به نیاز_به_استعلام برگردد؛ زیر تأیید قدیمی با قیمت تازه خرید نکند. اگر سفارش صادر و اعلان شکست خورد، اعلان را تکرار کنید نه سفارش را. اگر پس از صدور لغو آمد، مسیر لغو یا جبران مستند را آغاز کنید.

نسخه گردش‌کار را بدون خراب‌کردن اجرای زنده تغییر دهید

اجرای بلندمدت از استقرارها عمر بیشتری دارد. تغییر کدی که فعالیت‌ها را جابه‌جا یا رویداد قدیمی را متفاوت تفسیر می‌کند ممکن است بازپخش را بشکند یا اثر جدیدی بسازد.

نسخه گردش‌کار و طرح داده را صریح کنید. کد تازه را با بازپخش تاریخچه شبیه تولید بیازمایید. برای تغییر ناسازگار، مسیر گذار قدیمی را برای اجرای موجود نگه دارید، حالت را با روش بازبینی‌شده مهاجرت دهید یا گردش‌کار تازه‌ای بسازید که به قبلی پیوند دارد.

نسخه مدل و پرامپت هم مهم است. گردش‌کار مکث‌شده نباید تأیید قدیمی را بی‌صدا وارد برنامه مدلی کاملاً متفاوت کند. مشخص کنید کدام تغییر برای کار در جریان امن و کدام نیازمند برنامه و تأیید دوباره است.

رشد تاریخچه را محدود کنید. با snapshot یا سازوکار «ادامه به‌عنوان اجرای جدید» حجم را کاهش دهید، اما تبار، شاهد و حذف تکرار را حفظ کنید. تنها مدرکی را که نشان می‌دهد نوشتن بیرونی انجام شده کوتاه نکنید.

عملیات را قابل مشاهده کنید

اپراتور بیش از لاگ نیاز دارد. نمای گردش‌کار باید نشان دهد:

  • حالت، سن، مهلت و مالک جاری؛
  • آخرین گذار موفق و اقدام مجاز بعدی؛
  • فعالیت در انتظار، تعداد تلاش و پس‌روی؛
  • وضعیت تأیید، اعتبارنامه و سیاست؛
  • گردش‌کار فرزند و مرجع بیرونی؛
  • کلید یکتایی و نتیجه نامعلوم؛
  • کنترل ایمن برای لغو، تلاش، تطبیق و ارجاع.

هر فعالیت را با شناسه رد، گردش‌کار، فعالیت و شماره تلاش ابزاربندی کنید. OpenTelemetry مشخصات بی‌طرف رد، معیار و لاگ دارد و پیوند span برای کار ناهمگام مفید است. تله‌متری جای دفتر رویداد ماندگار را نمی‌گیرد؛ رد نمونه‌برداری‌شده ممکن است ناقص باشد، اما دفتر گردش‌کار باید معتبر بماند.

برای ابزاربندی مدل و ابزار مشاهده‌پذیری عامل هوش مصنوعی و برای نگهداری شواهد هوش مصنوعی آماده ممیزی را ببینید.

شکست را بیازمایید، نه فقط مسیر موفق

پیش از تولید، در هر مرز شکست تزریق کنید:

  • کارگر را پیش و پس از تعهد ابزار بکشید؛
  • رویداد را چندبار و خارج از ترتیب تحویل دهید؛
  • اعتبارنامه را هنگام مکث منقضی یا لغو کنید؛
  • رکورد را پس از تأیید و پیش از تعهد تغییر دهید؛
  • callback را از مهلت عبور دهید؛
  • با اجرای قدیمی فعال، نسخه جدید مستقر کنید؛
  • جبران را خراب کنید؛
  • تله‌متری را قطع و گردش‌کار را ادامه دهید؛
  • در حالت صف، اجرا و نتیجه نامعلوم لغو کنید.

معیار انتشار باید شامل این موارد باشد:

  • نبود اثر مهم تکراری در آزمون crash و retry؛
  • کلید یکتایی و مسیر تطبیق معتبر برای هر نوشتن؛
  • ادامه هر حالت ذخیره‌شده روی کارگر دیگر؛
  • شکست بسته برای تأیید، سیاست، هویت یا نسخه رکورد کهنه؛
  • جلوگیری از بار فراری با بودجه و پس‌روی؛
  • امکان یافتن و حل همه نتیجه‌های نامعلوم توسط اپراتور؛
  • آزمون سازگاری بازپخش برای نسخه‌های زنده پشتیبانی‌شده؛
  • انطباق لغو و جبران با رفتار مستند؛
  • رسیدن به هدف زمان بازیابی و سن قدیمی‌ترین کار گیرکرده زیر بار؛
  • مالک مشخص هشدار سن صف، نرخ شکست و انتظار متوقف.

زمان تکمیل در هر حالت، نرخ تکرار، سن نتیجه نامعلوم، انتظار تأیید، نرخ جبران، شکست بازپخش، کار گیرکرده و مداخله اپراتور را پایش کنید. برای انضباط گسترده انتشار، چک‌لیست آمادگی عملیاتی هوش مصنوعی را اجرا کنید.

پرسش‌های متداول

آیا checkpoint مکالمه کافی است؟

خیر. نقطه بازیابی باید حالت ساخت‌یافته، اثرهای کامل‌شده، نسخه‌ها، اختیار، مهلت و داده حذف تکرار را داشته باشد. بازیابی پیام یا توکن به‌تنهایی تعهدشدن عملیات را اثبات نمی‌کند.

آیا مدل باید سیاست تلاش دوباره را تعیین کند؟

مدل می‌تواند خطای ناآشنا را برای بررسی طبقه‌بندی کند، اما سیاست قطعی باید کد قابل تکرار، سقف، پس‌روی و ایمنی را کنترل کند. متن تولیدی نباید مجوز یا یکتایی را کنار بزند.

آیا اجرای ماندگار «دقیقاً یک بار» را تضمین می‌کند؟

در سراسر سامانه‌های بیرونی دلخواه خیر. هماهنگ‌سازی ماندگار تصمیم را ثبت و مطمئن ادامه می‌دهد؛ اثر بیرونی هنوز یکتایی، تطبیق و گاهی جبران می‌خواهد.

چه زمانی گردش‌کار باید به انسان برسد؟

وقتی نتیجه نامعلوم است، وضعیت پس از تأیید تعارض دارد، جبران پرخطر است، سیاست مبهم است یا بودجه تلاش تمام شده. ارجاع یک حالت طراحی‌شده است، نه استثنای عمومی.

یادداشت منابع

منابع بررسی‌شده و جاری تا ۳۰ ژوئیه ۲۰۲۶:

#عامل هوش مصنوعی#گردش‌کار ماندگار#قابلیت اطمینان#اتوماسیون

مطالب مرتبط

ادامه مطالعه

گزارش روزانه و راهنماهای عملیاتی ژرف را ببینید. این صفحه یک آرشیو موضوعی است، نه دعوت به شروع پروژه.