عامل کدنویسی من برای هر قدم کوچک درخواست اجازه میکرد
دستیار هوش مصنوعی من مشکل بزرگی داشت. مشکل این نبود که درخواست اجازه نمیکرد؛ مشکل این بود که بیش از حد درخواست اجازه میکرد.
من یک کار ساده مثل خواندن یک فایل PDF به آن میدادم. دستیار یک قدم برمیداشت، درخواست تایید میکرد، دستور را اجرا میکرد و بلافاصله برای قدم کوچک بعدی دوباره درخواست میکرد. یک کار ساده به چرخه تکراری و بیپایانی از اعلانها تبدیل میشد.
اعلانهای تایید ضروری هستند. شما میخواهید که یک دستیار محلی قبل از اجرای دستورات، نوشتن فایلها یا باز کردن برنامهها متوقف شود. اما کار واقعی مستلزم مراحل متعددی است. خواندن یک PDF شامل بررسی وجود Python، پیدا کردن یک تبدیلکننده، اجرای آن تبدیلکننده و خواندن متن است.
اگر برای تکتک مراحل درخواست تایید شود، دیگر ریسک را ارزیابی نمیکنید. فقط برای اینکه از شر وقفهها خلاص شوید، شروع به کلیک کردن میکنید. این کار باعث میشود عادت کنید سیستم ایمنی را نادیده بگیرید؛ و این بسیار خطرناکتر از نبودِ سیستم ایمنی است.
گردش کار قدیمی به این صورت بود:
- دستیار یک ابزار را انتخاب میکند
- سیاست سیستم، تاییدیه میخواهد
- کاربر تایید میکند
- ابزار اجرا میشود
- دستیار دوباره برای ابزار بعدی درخواست میکند
دستیار هدف کاربر را درک نمیکرد. شما در حال تایید یک بررسی کوچک نبودید، بلکه در حال تایید یک وظیفه کامل بودید.
من نحوه عملکرد CliGate را تغییر دادم. اکنون، وقتی اولین اقدام در یک گفتگو را تایید میکنید، سیستم یک پرچم (flag) تنظیم میکند. این کار باعث میشود مراحل بعدی بدون دورهای جدید تایید، ادامه یابند. دستیار همچنان نتایج واقعی را دریافت میکند تا بتواند به کار خود ادامه دهد.
همچنین یک راه خروج اضافه کردم: /safe. این دستور حالت تایید صریح را دوباره فعال میکند.
همچنین یک باگ مربوط به زبان را برطرف کردم. وقتی سیستم کاری را ادامه میداد، گاهی زبان اعلانها را تغییر میداد. اگر شما چینی صحبت میکردید، دستیار برای اعلان بعدی به انگلیسی تغییر زبان میداد. اکنون، دستیار آخرین پیام واقعی شما را بررسی میکند تا زبان مناسب را انتخاب کند.
راه حل، غیرفعال کردن تاییدیه ها نیست؛ بلکه راه حل این است که به خاطر بیاوریم کاربر چرا تاییدیه را داده است.
برای ابزارهای محلی، از اعتماد در سطح وظیفه (task-scoped trust) استفاده کنید:
- قبل از عبور از یک مرز اصلی، سوال بپرسید
- تاییدیه مربوط به وظیفه فعلی را به خاطر بسپارید
- راهی برای بازگشت به حالت سختگیرانه فراهم کنید
- اجازه ندهید پیامهای سیستم، هدف کاربر را تغییر دهند
این روشی است که من سیستم تاییدیه را در CliGate میسازم. این ابزار، کنترلکننده (control plane) محلی من برای Claude Code، Codex CLI و Gemini CLI است.
شما چگونه با خستگی ناشی از تایید مداوم (approval fatigue) مقابله میکنید؟ آیا برای هر فراخوانی ابزار تایید میکنید، یا برای هر وظیفه، یا برای کل یک نشست (session)؟
عامل کدنویسی من برای هر قدم کوچک اجازه میخواست
اخیراً در حال آزمایش چندین عامل کدنویسی هوش مصنوعی بودهام و با وجود اینکه آنها فوقالعاده قدرتمند هستند، با یک مشکل کلافهکننده روبرو شدم: عامل من برای هر قدم کوچک، اجازه میخواست.
این عامل مدام میپرسید: «آیا میتوانم این فایل را بخوانم؟»، «آیا میتوانم این دستور را اجرا کنم؟»، «آیا میتوانم این دایرکتوری را بسازم؟»
این وقفههای مداوم، جریان کاری (flow) من را مختل میکرد و باعث میشد تجربه کار، بیشتر شبیه به پرستاری از یک عامل باشد تا همکاری با آن.
مشکل: خستگی از درخواست اجازه (Permission Fatigue)
وقتی از یک عامل هوشمند استفاده میکنید، هدف این است که بخشی از بار کاری را به او بسپارید. اما وقتی هر اقدام کوچکی نیاز به تایید دستی دارد، سرعت توسعه به شدت کاهش مییابد. این وضعیت باعث میشود که به جای تمرکز بر منطق کد، مدام درگیر تایید کردن عملیاتهای پیشپاافتاده شوید.
چرا این اتفاق میافتد؟
دلیل اصلی این موضوع معمولاً به دو مورد برمیگردد:
- پرامپتهای سیستم (System Prompts) بیش از حد محتاطانه: سازندگان عاملها اغلب برای جلوگیری از رفتارهای ناخواسته یا مخرب، دستورالعملهای بسیار سختگیرانهای در پرامپت سیستم قرار میدهند.
- تعریف ابزارها (Tool Definitions): اگر ابزارهایی که عامل به آنها دسترسی دارد (مانند اجرای دستور یا خواندن فایل) به گونهای تعریف شده باشند که حتماً نیاز به تایید انسانی داشته باشند، عامل همیشه متوقف خواهد شد.
راه حل: یافتن تعادل بین خودمختاری و ایمنی
برای حل این مشکل، من شروع به تنظیم سطح خودمختاری (autonomy) عامل کردم. به جای اینکه اجازه بدهم عامل برای هر چیزی سوال کند، به او اجازه دادم در چارچوبهای مشخصی بدون پرسیدن عمل کند.
به عنوان مثال، من پرامپت سیستم را به گونهای تغییر دادم که:
- اجازه دارد فایلهای موجود در دایرکتوری فعلی را بخواند.
- اجازه دارد دستورات
lsیاcatرا بدون تایید اجرا کند. - اما برای دستوراتی که تغییرات ساختاری ایجاد میکنند یا دستورات حساس شبکه، حتماً باید اجازه بگیرد.
نتیجهگیری
استفاده از عاملهای کدنویسی یک تعادل ظریف است. اگر بیش از حد آزاد باشند، ممکن است کارهای اشتباهی انجام دهند؛ اما اگر بیش از حد محدود باشند، تنها یک ابزار پرسشگر ساده خواهند بود. کلید موفقیت در تنظیم دقیق "سطح اعتماد" است.