تصور کنید یک برنامهنویس در تیمی کوچک است که میبیند کاربر هنوز باید جوابهایی را که هوش مصنوعی میداند، دستی در CRM تایپ کند. این دقیقاً همان لحظهای است که یک پروژه از یک دموی بیخطر به یک مسئلهٔ مهندسی با ریسک بالا تبدیل میشود. چرا یک انسان هنوز باید پاسخی را که هوش مصنوعی از پیش میداند، دوباره در سیستم مدیریت ارتباط با مشتری (CRM) وارد کند؟
معمولاً اولین نسخه از هر عامل (Agent) — شبیه دستیاری که فقط اجازه دارد کتابها را بخواند و یادداشت کند اما حق تغییر یک کلمه در آنها را ندارد — در حالت «فقط خواندنی» است. این عاملها اطلاعات را جستجو میکنند، آنها را خلاصه میکنند و پیشنویس پاسخها را مینویسند. چون این عامل نمیتواند وضعیت دنیای واقعی را تغییر دهد، کسی از آن نمیترسد. اما لحظهای که تیم تصمیم میگیرد به عامل اجازه دهد یک رکورد در پایگاهداده را تغییر دهد، تمام معادلات عوض میشود و ریسکها بهطور کامل تغییر میکنند.
یک دستیار «فقط خواندنی» در صورت اشتباه، فقط یک جمله بد تولید میکند؛ اما عاملی با دسترسی نوشتاری میتواند بهطور تصادفی یک بازپرداخت مالی را فعال کند، پیامک اشتباهی بفرستد، یک قرار ملاقات را اشتباه رزرو کند یا یک رکورد حیاتی مشتری را بهطور کامل پاک کند. طبق راهنمای فنی منتشر شده در dev.to در ۲ اکتبر ۲۰۲۶، این مشکل محدودیت هوش مدل نیست، بلکه چالش طراحی سیستم است. راهکار این است که خودمختاری را نه به صورت یک کلید کلی برای کل محصول، بلکه برای هر اقدام (Action) بهصورت مجزا و بر اساس هزینهٔ بازگرداندن خطا تعریف کنیم.
همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، اعتماد کورکورانه به خروجی مدل در محیطهای عملیاتی، بزرگترین ریسک استقرار است.
تعریف سطوح خودمختاری
بسیاری از توسعهدهندگان بهاشتباه میپرسند که آیا سیستم آنها «خودمختار» است یا خیر. در واقعیت، سیستمهای کاربردی سه سطح عملیاتی متمایز را ترکیب میکنند که برای هر اقدام بهطور جداگانه تصمیمگیری میشود:
- فقط خواندنی (Read-only): عامل اطلاعات را مییابد و به انسان میگوید. هیچ خروجیای تا زمان اقدام انسان به سیستم وارد نمیشود و هیچ تغییری در وضعیت دادهها ایجاد نمیگردد.
- پیشنویس و انتظار (Draft and wait): مدل رزرو، پاسخ یا ورودی دفتر کل را مینویسد، اما انسان باید دکمهٔ تایید را بزند. در اینجا مدل تمام کار سخت را انجام میدهد، اما اختیار نهایی و قدرت تصمیمگیری با انسان باقی میماند.
- اقدام بدون نظارت (Act unsupervised): عامل عمل را بهطور مستقیم انجام میدهد و تیم در نهایت از طریق بررسی لاگها (Logs) متوجه وقوع آن میشود.
به نقل از مستندات، عاملهای صوتی ساخته شده برای CallGuard AI و CallSetter AI رزرو قرارها را بهطور خودمختار انجام میدهند؛ چون جابهجایی یک زمان در تقویم در صورت بروز خطا، هزینه کمی دارد و بهراحتی قابل اصلاح است. اما هر چیزی که به قیمتها، سوالات پزشکی یا مدیریت مشتریان ناراضی مربوط شود، مستقیماً به انسان ارجاع داده میشود. این تفکیک یک تصمیم طراحی است، نه محدودیتی در تکنولوژی.
چارچوب هزینهٔ بازگشت (Undo-Cost)
توسعهدهندگان باید پیش از نوشتن کد ابزارها، تمام «افعال» (Verbs) را که عامل میتواند روی سیستمهای نامگذاری شده اجرا کند، لیست کرده و بر اساس هزینهٔ بازیابی در سه دسته قرار دهند:
- بازگشت رایگان (Free to undo): مواردی مثل یادداشتهای داخلی، تگها، پیشنویسها، ورودیهای لاگ یا فیلدهایی که فقط تیم داخلی میبیند. اصلاح این موارد هیچ هزینه یا دردسری ندارد.
- بازگشت دشوار (Awkward to undo): پیامکهای ارسالی به مشتریان، رزروهای زمانی یا فیلدهایی که در همان لحظه شخص دیگری در حال مشاهده آنهاست. اینها قابل بازیابی هستند، اما یک انسان باید عذرخواهی کند یا خطا را با طرف مقابل هماهنگ و اصلاح کند.
- غیرقابل بازگشت (Not undoable): «درهای یکطرفه» مانند خروج پول از حساب، ارسال ایمیل به یک لیست کلی، حذف رکوردهای اصلی یا هر چیزی که در یک سازمان ثالث ثبت شده باشد.
نویسنده پیشنهاد میکند این طبقهبندی مستقیماً در کد تعبیه شود تا در کنار ابزار قرار بگیرد، نه در یک سند برنامهریزی که هرگز باز نمیشود. این کار با تعریف یک رابط (Interface) ساده در کد امکانپذیر است:
type UndoCost = "free" | "awkward" | "one_way";
interface AgentAction { verb: string; system: string; undoCost: UndoCost; mode: "dry_run" | "needs_approval" | "autonomous"; maxPerHour: number; }
با استفاده از این ساختار، هیچ توسعهدهندهای نمیتواند ابزار جدیدی اضافه کند مگر اینکه در همان Pull Request صراحتاً پاسخ دهد: «بازگرداندن این عمل چه شکلی است و هزینه آن چقدر است؟»
مدیریت خستگی از تأیید
گیتهای تأیید (Approval Gates) فقط باید جایی باشند که قابلیت بازیابی تمام میشود؛ یعنی دقیقاً در مرز بین اقدامات «دشوار» و «غیرقابل بازگشت». اگر یک سیستم برای هر کار کوچک و جزئی اجازه بخواهد، کاربران دچار «خستگی از تأیید» (Approval Fatigue) شده و شروع میکنند به کلیک کردن روی «بله» بدون اینکه متن را بخوانند. این اتفاق، یک کنترل ایمنی را به یک ردپای حسابرسی دروغین تبدیل میکند؛ جایی که امضای انسان روی تصمیمی است که در واقع هیچکس آن را بررسی نکرده است. این موضوع یادآور چالشهای ثبت دلیل تاییدات است که در تحلیل ما درباره ضرورت ثبت ردپای تصمیمات بررسی کردیم تا از تاییدات بیمعنی جلوگیری شود.
برای اقدامات پرتکرار و کمهزینه، این راهنما توصیه میکند بهجای تأیید، از «محدودیتها» (Limits) استفاده شود. یک اقدام نادر و غیرقابل بازگشت میتواند منتظر تایید انسان بماند، اما عملی که هزار بار در روز رخ میدهد، نمیتواند. بهجای اینکه از طریق پرامپت (Prompt) مودبانه از مدل بخواهیم «لطفاً هزار پیامک نفرست» — که یک محدودیت واقعی نیست و مدل میتواند آن را نادیده بگیرد — توسعهدهندگان باید سقفهای سختافزاری (Hard-coded caps) در ساعت، لیستهای مجاز (Allowlists) برای مقصدهای ارسال و توقفهای سخت در زمان غیرعادی شدن نرخ عملیات را پیادهسازی کنند.
حل چهار شکست خاموش
لاگهای استاندارد اغلب خطرناکترین شکستهای هوش مصنوعی را نمیبینند، چون کد بهدرستی اجرا میشود حتی اگر منطق پشت آن غلط باشد. این شکستها استثنا (Exception) ایجاد نمیکنند و بنابراین باید در فاز طراحی حل شوند، نه در زمان بررسی حوادث:
۱. با اطمینان غلط (Confidently Wrong): عمل با موفقیت انجام میشود اما هرگز نباید رخ میداد. چون هیچ خطای سیستمی رخ نداده، هیچ هشدار یا Alertی صادر نمیشود. تنها دفاع، قابلبررسی بودن هر عمل پس از وقوع است. اگر یک انسان نتواند در کمتر از یک دقیقه بفهمد «چرا این رکورد ساعت ۲ صبح یکشنبه تغییر کرد»، یعنی لاگها ناکافی هستند.
۲. اجرای دوبار (Done Twice): تایماوتها و تلاشهای مجدد (Retries) منجر به رزرو یا پرداخت دوبار میشود. این یک مشکل استاندارد در مهندسی یکپارچهسازی است که با کلیدهای Idempotency و حذف تکراریها (Deduplication) حل میشود. منطق تلاش مجدد باید بداند کدام اثرات جانبی (Side effects) برای تکرار ایمن هستند.
۳. توقف در میانه (Stopped Halfway): توالیهای چندمرحلهای در وسط راه شکست میخورند (مثلاً رزرو زمان انجام میشود اما ارسال تاییدیه شکست میخورد). توسعهدهندگان باید از پیش تصمیم بگیرند که یک اجرای ناقص باید بازگردانی (Rollback) شود یا به انسان خبر دهد؛ در غیر این صورت، مشتریانی قرار ملاقاتهایی دارند که تیم از وجود آنها بیخبر است.
۴. پرش خاموش (The Silent Skip): عامل تصمیم میگیرد اقدامی نکند. چون اتفاقی نیفتاده، هیچ چیز غلط به نظر نمیرسد. نظارت باید روی «عدم وقوع» (Absence) اقدامات مورد انتظار متمرکز باشد.
برای مقابله با پرش خاموش، هر نقطه تصمیم — حتی رد کردن یک اقدام — باید ثبت شود. برای مثال، یک لاگ باید اینگونه باشد: { conversationId: "...", considered: "create_appointment", decision: "declined", reason: "caller asked about pricing, routed to human", at: "2026-09-30T14:02:11Z" }. اگر عاملی که معمولاً ۴۰ رزرو انجام میداد، ناگهان فقط ۳ رزرو ثبت کند، سیستم باید به کسی هشدار دهد، حتی اگر آن ۳ مورد با موفقیت انجام شده باشند.
استقرار در سه مرحله
برای حذف حدس و گمان در مورد اعتماد، نویسنده یک توالی استقرار فازبندی شده را پیشنهاد میکند که نظرات شخصی را با لاگهای واقعی جایگزین میکند:
- مرحله اول (اجرای آزمایشی/Dry Run): تمام اتصالات و یکپارچهسازیها برقرار شوند اما هیچ عملی اجرا نشود. عامل تصمیم میگیرد چه میکرد و آن اقدام مورد نظر را در لاگ مینویسد. یک یا دو هفته از این حالت، گزارش دقیقی از صحت عملکرد روی ترافیک واقعی میدهد، بهجای اینکه فقط روی مثالهای دستچین شده دموی پروژه تکیه کنیم.
- مرحله دوم (پیشنویس و تأیید): تیم بهجای انجام دستی کارها، صف اقدامات پیشنهادی را بررسی و تایید میکند. تاییدها و ردها به دادههای برچسبدار تبدیل میشوند که بر اساس کلاس اقدام (Action Class) تفکیک شدهاند تا مشخص شود کدام افعال آماده przejście به حالت خودمختاری هستند.
- مرحله سوم (ارتقای تدریجی): افعال یکییکی به حالت خودمختار تغییر میکنند؛ از ارزانترینها برای بازگشت شروع کنید. برای مثال، اگر
create_noteیک ماه بدون خطا در صف بوده است، خودمختار میشود، در حالی کهsend_smsباید ماه بدون خطای خود را طی کند. اقدامات غیرقابل بازگشت ممکن است برای همیشه در مرحله دوم بمانند.
با وجود فیلد mode در هر اقدام، این استقرار تنها با یک تغییر در تنظیمات (Config) انجام میشود و نیازی به استقرار مجدد کد (Redeploy) نیست، که امکان بازگشت سریع در ساعت ۲ صبح را با یک تغییر ساده در کانفیگ فراهم میکند.
چکلیست نهایی پیش از پرواز
پیش از اینکه به هر عاملی فعل جدیدی اعطا شود، باید به سوالات زیر پاسخ داده شود:
- بازگرداندن (Undo) این عمل چه شکلی است؟ چه کسی آن را انجام میدهد، چقدر زمان میبرد و چه کسی از وقوع خطا مطلع میشود؟
- چه چیزی جلوی اجرای خارج از کنترل (Runaway) را میگیرد؟ آیا سقف (Cap)، کلید قطع اضطراری (Kill switch) و یک شخص مسئول برای فعال کردن آن وجود دارد؟
- از کجا میفهمم که عامل این اقدام را نادیده گرفته (Skip) است؟ آیا هشداری برای «عدم وقوع» وجود دارد؟
- وقتی مدل تغییر میکند، چه کسی دوباره آن را تست میکند؟ از آنجایی که ارائهدهندگان مدلها بهطور ناخواسته آپدیتهایی میفرستند، هر ویرایش در پرامپت یا ارتقای مدل یک استقرار جدید است که باید دوباره از فیلتر لاگهای Dry-run عبور کند.
این تغییر دیدگاه، گفتگو را از «آیا مدل قابل اعتماد است؟» به سمت «آیا سیستم قابل بازیابی است؟» میبرد. با تمرکز بر هزینه بازگشت، توسعهدهندگان میتوانند عاملهایی بسازند که کاربرد واقعی دارند بدون اینکه آینده شرکت را روی یک دموی ساده شرطبندی کنند. این همان رویکردی است که برای سیستمهای رزرو در CallGuard AI و سیستمهای پذیرش چندزبانه صوتی و پیامکی در Fortell AI (که دادههای پذیرش واقعی را برای آژانسهای اقدام اجتماعی مینویسد) استفاده شده است. این سیستمها ایمن هستند، نه به دلیل پرامپتهای بهتر، بلکه به دلیل داشتن لیستی کوتاه و صریح از افعال و یک پاسخ بازیابی برای هر یک از آنها.
گام بعدی شما
- لیست تمام افعالی که عامل شما انجام میدهد را بنویسید و هر کدام را در یکی از سه دسته «رایگان»، «دشوار» یا «یکطرفه» قرار دهید.
- برای هر اقدام «غیرقابل بازگشت»، یک گیت تأیید انسانی اجباری تعریف کنید.
- سیستمی برای نظارت بر «عدم وقوع» (Absence Monitoring) اقدامات کلیدی طراحی کنید تا پرشهای خاموش شناسایی شوند.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو