تصور کنید یک برنامهنویس ساعتها وقت صرف میکند تا ابزاری دقیق برای مدیریت دادهها بسازد، اما عامل هوش مصنوعی او طوری رفتار میکند که انگار این ابزار اصلاً وجود ندارد. این شکست خاموش زمانی رخ میدهد که تنها یک خط متن ساده در مستندات فنی فراموش شده باشد. در واقع، حتی اگر هندلرهای خواندن و نوشتن (write and query handlers) کاملاً عملیاتی باشند، اگر یک رشته متنی ساده گم شود، این ابزارها برای عامل هوش مصنوعی که قرار است از آنها قدرت بگیرد، نامرئی باقی میمانند.
این تنش در یک تحلیل فنی در ۲۷ سپتامبر ۲۰۲۶ برجسته شد؛ جایی که توسعهدهندگان فاش کردند یک عامل هوش مصنوعی درونبرنامهای، مجموعهای از ابزارها را صرفاً به دلیل نبود رشتههای توصیفی (description strings) کاملاً نادیده گرفته است. در دنیای توسعه، بسیاری از برنامهنویسان مستندات را بهعنوان لایهای برای راهنمایی انسانها یا یک پرداخت نهایی (final polish) میبینند، اما برای یک عامل (Agent)، این توصیف در واقع همان «دروازه» ورود است. در حالی که یک انسان میتواند یک نقطه انتهایی (endpoint) را از طریق مسیر URL پیدا کند، یک عامل به مانیفستی متکی است که از هندلرها، صفحهها و موجودیتها ساخته شده است. اگر رشته توصیفی خالی باشد، آن ورودی از مانیفست حذف میشود و عامل هرگز متوجه نمیشود که چنین ابزاری وجود دارد.
همانطور که در تحلیلهای قبلی ما دربارهی امنیت و همراستاسازی مدلهای عاملمحور اشاره کردیم، تکیه بر ساختارهای تعریفشده برای کنترل رفتار مدل حیاتی است. در اینجا، اگر رشته توصیفی خالی باشد، ورودی مربوطه از مانیفست حذف شده و مدل هرگز متوجه وجود ابزار نمیشود.
طبق گزارش وبسایت dev.to، این مشکل ۲۱ هندلر را در خط لوله هوش مصنوعی و ویژگیهای فروشگاه پرامپت (prompt store) یک تیم تحت تأثیر قرار داده بود. کدها برای کاربران در رابط کاربری (UI) بهدرستی کار میکردند، اما عامل هوش مصنوعی بهسادگی از کنار آنها میگذشت. تیم متوجه شد که این توصیفات را نمیتوان در مرحله ترکیب (composition site) اصلاح کرد؛ بلکه باید دقیقاً در کنار تعریف هندلر قرار گیرند تا توسط برنامه به ارث برسند. برخی تلاش کردند تا مستندات را در داخل برنامه «اضافه کنند»، اما تستهای شکاف (gap tests) مدام شکست میخوردند زیرا ویژگیهای بستهبندی شده همچنان بهصورت خالی ارسال میشدند.
مدیریت ریسک و مجوزها
دیدن ابزار تنها اولین قدم است؛ گام بعدی تعیین سطح ریسک عملیات است. وقتی یک عامل ابزاری را میبیند، سیستم باید سطح ریسک آن اقدام را تعیین کند. این تیم یک سیستم ریسک طبقهبندیشده (tiered risk system) را برای جلوگیری از اقدامات بازگشتناپذیر بدون نظارت شدید اجرا کرد:
این رویکرد برای جلوگیری از خطاهای عملیاتی مشابه است با آنچه در لایه پاسخگویی جدید COGEXT برای انتقال وضعیت دیدیم تا از رفتارهای پیشبینینشده عاملها جلوگیری شود.
- ریسک پایین/متوسط: پرسوجوها (Queries) بهصورت پیشفرض ریسک پایین و عملیات نوشتن (Writes) ریسک متوسط دارند. اثرات جانبی قابل بازگشت — مانند
set-policy(تنظیم سیاست)،rollback(بازگشت به عقب) یاprompt revert(بازگرداندن پرامپت) — در این سطح پیشفرض باقی میمانند. این ساختار به رابط کاربری اجازه میدهد تا مجوز «همیشه اجازه بده» (always allow) را به کاربر پیشنهاد کند. - ریسک بالا: اقدامات بازگشتناپذیر بهعنوان ریسک بالا علامتگذاری میشوند. برای مثال، هندلر
delete-goldenکه یک نمونه مرجع (golden fixture) را برای همیشه حذف میکند تا دیگر نتوان از آن برای اجرای آزمایشی (dry-runs) استفاده کرد، در این دسته قرار میگیرد. همچنین هندلرeditکه محتوای جدیدی را برای یک قالب پرامپت ذخیره میکند و این محتوا در اجرای بعدی دقیقاً به عنوان پرامپت سیستمیِ ویژگی دیگری تبدیل میشود، در زمره ریسکهای بالا است.
برای ابزارهای پرریسک، حلقه مجوزها بهطور کلی گزینه «همیشه اجازه بده» را رد میکند. کاربر همچنان میتواند یک فراخوانی واحد را تأیید کند، اما نمیتواند به عامل یاد بدهد که این شکل خاص از عملیات نوشتن برای همیشه مجاز است. این سازوکار دقیقاً شبیه مجوزهای اپلیکیشنهای موبایل است؛ دسترسی به دوربین میتواند «همیشه» باشد، اما پاک کردن حافظه دستگاه هرگز. این سقف حفاظتی برای عاملی که میتواند دکمهها را سریعتر از توان بررسی یک انسان فشار دهد، ضروری است. برای اطمینان بیشتر از صحت این مجوزها، میتوان از آداپتور Universal Trust برای تأیید اعتبار سریع عاملها استفاده کرد تا سطح دسترسیها در لحظه اعتبارسنجی شوند.
حل شکستهای خاموش
از آنجا که نبود توصیفات باعث ایجاد خطاهای کدنویسی سنتی نمیشود، «سکوت» به حالت شکست تبدیل میشود. در این حالت، عامل صرفاً «ضعیف» یا «کمتوان» به نظر میرسد و توسعهدهندگان بهندرت برای موردی مثل «نبود رشته متنی در هندلر شماره ۱۴» تیکت ثبت میکنند. برای حل این مشکل، تیم «تستهای شکاف» (Gap Tests) را بهعنوان زنگ خطر پیاده کرد:
این متدولوژی برای مدیریت پاسخهای منفی نیز کاربرد دارد؛ همانطور که دستهبندی پاسخهای منفی برای جلوگیری از بداههپردازی به مدل کمک میکند تا بهجای حدس زدن، نبودِ ابزار یا داده را بهدرستی تشخیص دهد.
- تستهای شکاف مستندات (Doc Gap Tests): این تستها تضمین میکنند هر ویژگی که برای عامل در نظر گرفته شده، حتماً توصیفی را اکسپوز (expose) کند. برای مثال، تستی برای
createAiPipelineFeature([])بررسی میکند که تعداد شکافهای مستنداتی صفر باشد. - تثبیت ریسک (Risk Pinning): تصمیمات مربوط به ریسک در مجموعه تستها تثبیت شدند. آنها بهطور خاص تست میکنند که
delete-goldenحتماً ریسک بالا وset-policyریسک متوسط باشد.
این تستها تضمین میکنند که یک بازبینی کد (refactor) در آینده نتواند بهطور بیصدا، یک حذف دائمی پرریسک را به یک اقدام ریسک متوسط تنزل دهد؛ زیرا این اتفاق بهطور تصادفی آن ابزار را واجد شرایط مجوز «همیشه اجازه بده» میکند. تیم همچنین این بررسی (gap lint) را از طریق یک CLI روی کل پیکربندی برنامه اجرا میکند تا ویژگیهای جدید مصرفکننده، پیش از آنکه حتی دمو شوند، در صورت نقص قرمز شوند.
این تغییر، رشته توصیفی را از یک «توصیه» به یک «قرارداد» تبدیل میکند. در این معماری، توصیف تعیین میکند که آیا ابزار وجود دارد یا خیر، و سطح ریسک تعیین میکند که آیا مجوز دائمی قانونی است یا نه.
گام بعدی شما
اگر در حال ساخت گردشکارهای عاملمحور (agentic workflows) هستید، اولین قدم این است که از عامل خود بخواهید لیستی از تمام کارهایی که میتواند انجام دهد را بنویسد. این لیست را با هندلرهای واقعی نوشتن در کد خود مقایسه کنید؛ نامهای گمشده تقریباً همیشه ناشی از نبود رشتههای توصیفی هستند، نه نقص در مدلها.
- از عامل خود بخواهید لیستی از تمام کارهایی که میتواند انجام دهد را بنویسد.
- این لیست را با هندلرهای واقعی کد خود مقایسه کنید؛ نامهای گمشده معمولاً ناشی از نبود رشته توصیفی هستند، نه نقص مدل.
- برای هر ابزار پرریسک، یک مکانیزم تأیید انسانی (Human-in-the-loop) تعریف کنید تا از حذفهای تصادفی جلوگیری شود.
اما مدیریت این ابزارها در مقیاس بزرگ، چالشهای جدیدی در زمینه حافظه ایجاد میکند — به تحلیل ما دربارهی پروتکل زمینه مدل (MCP) مراجعه کنید.




گفتگو