چیتشیت
ایجنتهای خودمختار و مجوزها
Autonomous Agents and Permissions
اجرای بینظارت ایجنت همراه با محدودیتها. حالتهای مجوز، بودجهها، سوییچهای قطع اضطراری، اجرای پایدار، تأییدیهها، بازگشت به عقب.
فهرست مطالب
وظایف اپراتور
کار و کد| وظیفه | کد |
|---|---|
| بررسی اولیه برنامه | permission mode `plan` |
| تأیید خودکار فقط برای ویرایش فایلها | permission mode `acceptEdits` |
| تعیین سقف برای هزینه و نوبتهای حلقه | `max_budget_usd`, `max_turns` |
| محدود کردن مجموعه ابزارها | `allowed_tools` / `disallowed_tools` |
| متوقف کردن کانتینر ایجنت | kubectl delete pod |
| فعال شدن مدارشکن با فراخوانیهای تکراری | CircuitBreaker(threshold=5) |
| بازپخش پس از کرش | workflow(EventLog(<path>), <query>) |
| ایمنسازی تأییدیه در برابر تلاش مجدد | k = p.key() |
لایههای کنترلی
معماریپیشنهاد، commit، اعتبارسنجی
گامبهگام- پیشنهادذخیره نیت، تبار، شعاع تخریب، بازگشت به عقب. وضعیت
waiting. - نمایشیک انسان متادیتا را بررسی میکند، نه ایجنت.
- تأییدتابع
checklist_approveنیازمند تأیید هر سه بررسی است. وضعیتapproved. - پیششرطوضعیت هنوز با تأییدیه مطابقت دارد؛ در غیر این صورت
aborted-precondition. - Commitابتدا نیت را ذخیره کن، سپس اثر جانبی را اجرا کن.
- اعتبارسنجیخواندن مجدد هدف. در صورت شکست، بازگشت به عقب اجرا میشود.
- تلاش مجددیک وضعیت پایانی، نتیجه ذخیرهشده را برمیگرداند. بدون اجرای مجدد.
فعالیت پایدار
کدpython
def activity(name: str):
def deco(fn):
@functools.wraps(fn)
def wrapper(log: EventLog, *args):
hit = log.lookup(name, args) # رویداد انجام در لاگ ثبت شد؟
if hit:
return hit["result"] # بازپخش، بدون اجرای مجدد
log.append({"name": name, "args": list(args), "status": "started"})
result = fn(*args) # اثر جانبی واقعی
log.append({"name": name, "args": list(args),
"status": "done", "result": result}) # ثبت خروجی در لاگ
return result
return wrapper
return deco
مهارکننده و مدارشکن
کدpython
gov = Governor(max_turns=200, max_budget_usd=50.0) # سقفهای نشست
if gov.enable_iter_cap and turn >= gov.max_turns:
run.stopped_by = "max_turns" # سقف تکرار
if gov.enable_session_cap and run.dollars >= gov.max_budget_usd:
run.stopped_by = "max_budget_usd" # سقف دلاری
if gov.enable_velocity and velocity_exceeded(run, gov, now_min):
run.stopped_by = "velocity_limit" # نرخ هزینه شناور
if kill_switch["enabled"]:
break # دکمه خاموش کردن خارجی
allowed = breaker.record(f"{a.kind}:{a.payload}")
if not allowed:
break # 5 فراخوانی یکسان آن را باز کرد
حالتهای مجوز
مفهومهاplan- کاربر برنامه را تأیید میکند. هر اقدام ابتدا بررسی میشود.
default- «دستی». برای اقدامات شل، مخرب و شبکهای پرامپت میدهد.
acceptEdits- نوشتن در فایل خودکار تأیید میشود. شل و شبکه همچنان پرامپت دارند.
auto- یک مدل طبقهبند هر اقدام را بررسی میکند. مانع از تشدید دسترسی میشود.
dontAsk- هرگز پرامپت نمیدهد. اقدامات تأییدنشده رد میشوند.
bypassPermissions- همهچیز را تأیید میکند. فقط برای کانتینرهای یکبارمصرف.
پیشفرضها در شبیهسازها
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
max_tokens_per_request | 10_000 | سقف تکمیل به ازای هر فراخوانی |
max_turns | 200 | تکرارهای حلقه در هر نشست |
max_budget_usd | 50.0 | سقف دلاری نشست، در صورت نقض لغو میشود |
velocity_usd_per_min | 5.0 | حد قطع نرخ هزینه شناور |
velocity_window_min | 10.0 | پنجره زمانی برای نرخ هزینه |
monthly_cap_usd | 500.0 | نشتیهای کند را دیر تشخیص میدهد |
threshold | 5 | فراخوانیهای یکسانی که مدارشکن را باز میکنند |
Half-open probes | default 1 | 1 تا 3 بار پس از دوره خنکسازی |
کدام سقف چه چیزی را مهار میکند
مفهومها- حلقه مهارنشدنی
- مهار توسط حد سرعت.
- نشتی کند
- حدود 2 برابر کار مورد انتظار؛ مهار توسط سقف روزانه.
- انتشار بد
- نسخه جدید 5 برابر توکن مصرف میکند؛ مهار توسط سقف هفتگی یا ماهانه.
- افزایش ناگهانی مجاز
- مهار توسط سقف ساعتی یا روزانه با یک لاگ شفاف.
- دریفت تدریجی ناشی از حمله
- آشکارسازهای آماری را دور میزند؛ با محدودیتهای قطعی مهار میشود.
- ترکیب اقدامات امن
- هیچ آشکارسازی آنها را مهار نمیکند.
عیبیابی
عیبیابیکرش باعث اجرای مجدد تمام فراخوانیهای ابزار میشود
- علت
- حلقه سادهی
while True - راهحل
- فعالیتها بههمراه لاگ رویدادها
انحراف در بازپخش
- علت
- استفاده از ساعت سیستم یا مقادیر تصادفی در جریان کاری
- راهحل
- ثبت آن بهعنوان یک اثر جانبی
اقدام تأییدشده دو بار اجرا میشود
- علت
- نبود کلید یکتایی تراکنش
- راهحل
- یک کلید به ازای هر پیشنهاد
کسری بودجه پس از ازسرگیری
- علت
- فقط بررسی کلید یکتایی تراکنش
- راهحل
- افزودن بررسی پیششرط
وضعیت «Committed» اما بدون اثر جانبی
- علت
- وضعیت ذخیره شده، اقدام از بین رفته است
- راهحل
- اعتبارسنجی با خواندن مجدد، سپس بازگشت به عقب
تأییدیهها بدون بررسی واقعی
- علت
- دکمه تأیید ساده
- راهحل
- چکلیست پرسش و پاسخ چالشی
سه برابر شدن صورتحساب پس از اضافه شدن ابزار جدید
- علت
- نبود سقف به ازای هر ابزار
- راهحل
- سقف به ازای هر ابزار، هشدار رشد روزانه
ایجنت توکن قناری خود را غیرفعال میکند
- علت
- آشکارساز در دسترس ایجنت است
- راهحل
- نگهداری آن در جایی که ایجنت دسترسی نوشتن ندارد
واژهنامه
اصطلاحها- HITL
- انسان در چرخه. یک فرد پیش از اقدام آن را تأیید میکند.
- افق METR
- طول وظیفهای که یک مدل با اطمینان 50٪ کامل میکند.
- محرومسازی کیف پول
- حلقهی ایجنتی که بیپایان خرج میکند و سقفی برای متوقف کردنش نیست.
- thread_id
- کلیدی که دامنه وضعیت پایدار را برای یک نشست تعیین میکند.
- اجاره
- مالکیتی کوتاهمدت که بر اساس آن ورکر یک اجرا را هدایت میکند و پس از کرش منقضی میشود.
- شعاع تخریب
- دامنه تأثیر در صورتی که اقدام اشتباه پیش برود.
- SAGA
- تراکنش جبرانی که اثر اقدام اولیه را خنثی میکند.
پرسش و پاسخ
پرسش و پاسخ- 99٪ در هر گام، 70 گام؟
- ایجنت همچنان در نیمی از موارد شکست میخورد.
- چرا پشتهای از سقفها؟
- یک سقف ماهانه زمانی فعال میشود که کیف پول خالی شده است.
- چرا ذخیره پایدار هر تغییر وضعیت؟
- بازپخش به هر نقطهای میرسد و بازیابی اجاره دقیق خواهد بود.
- چه زمانی اجرای پایدار نادیده گرفته شود؟
- اجراهای کوتاه بدون ورودی انسان، یا کارهای فقط-خواندنی.
- حالت
autoچه چیزی را از دست میدهد؟ - تزریقهای پنهان و توالیهای آسیبرسان از اقدامات امن.
نکات
نکتهها- هرگز
autoرا بدونmax_budget_usdاجرا نکنید. - در هر اقدام سرنوشتساز، سوییچ قطع اضطراری را بررسی کنید.
- فعالسازی مجدد سوییچ قطع اضطراری فقط باید با اقدام صریح انسانی باشد.
- به هر ابزار جدید سقف و هشدار اختصاصی بدهید.
- برای نوشتنهای غیرقابل بازگشت همیشه از انسان در چرخه استفاده کنید؛ برای خواندن هرگز.
- هر فرایند بازگشت به عقب را حداقل یک بار سرتاسری تمرین کنید.