چیت‌شیت

ایجنت‌های برنامه‌نویس: چشم‌انداز و پروژه‌های پایانی

Coding Agents: Landscape and Capstones

انتخاب ساختار پایه، تعیین بودجه‌ها و گیت‌های کنترلی، اجرای ایجنت‌های پروژه پایانی و سه پروژه‌ی ایجنت برنامه‌نویس.

  • ۱۲ بخش
  • ۵ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. فراخوانی ابزار JSON در مقابل CodeAct
  2. سه ایجنت پروژه پایانی
  3. چه زمانی استفاده کنیم؟
  4. اعدادی که باید بدانید
  5. بستر آزمایشی ایجنت ترمینال (01)
  6. اجرای درس‌ها
  7. سه پروژه
  8. دستورات پروژه
  9. بودجه‌ها در کد
  10. زنجیره گیت و ساندباکس (29)
  11. عیب‌یابی
  12. پرسش و پاسخ

فراخوانی ابزار JSON در مقابل CodeAct

مقایسه
عاملفراخوانی ابزار JSONCodeAct
یک اکشن شاملیک پی‌لود ساختاریافته‌ی JSONیک برنامه‌ی کامل Python
بازرسیساده، یک اکشن در هر نوبت گفت‌وگوسخت‌تر، شعاع تخریب گسترده
ترکیب‌پذیریمحدودحلقه‌ها، زنجیره‌سازی ابزارها، مدیریت خطاها
ایمنیاعتبارسنج روی هر فراخوانینیازمند یک ساندباکس تقویت‌شده
شعاع تخریب نمونه آزمایشی1 فایل در هر اکشنتمام فایل‌های دارای خطا به صورت همزمان
غالب درسرویس‌های مدیریت‌شدهپلتفرم‌های متن‌باز

سه ایجنت پروژه پایانی

مقایسه
عاملایجنت ترمینال (01)از ایشو تا PR (16)مهاجرت (09)
محرک اجراagent run <repo> "<task>"لیبل ایشو: @agent fix thismigrate <repo> --target java17
ساندباکسE2B یا Daytona، ورک‌تری gitDaytona یا E2B برای هر وظیفهDaytona برای هر branch
سقف نوبت گفت‌وگو50 نوبت گفت‌وگو30 نوبت گردش ایجنت20 نوبت گردش ایجنت
سقف هزینه5 دلار برای هر وظیفه20 دلار برای هر PR، سقف 5 PR در روز برای هر مخزن8 دلار برای هر مخزن
سایر محدودیت‌ها200 هزار توکن کانتکست30 دقیقه زمان واقعی30 دقیقه برای هر مخزن
گیت قبل از PRقبولی تست‌هااجرای کامل CI در ساندباکس، تغییر پوشش آزمونقبولی تست‌ها، عدم کاهش بیش از 2% در پوشش آزمون
هنگام شکستهوک Stop یک بسته ردگیری محاسبات می‌نویسدشکست CI: توقف، بدون ثبت PRدسته‌بندی شکست به همراه گام‌های بازتولید

چه زمانی استفاده کنیم؟

مفهوم‌ها
استفاده از فراخوانی ابزار JSON زمانی که
هر اکشن نیازمند اعتبارسنج صریح و بازرسی ساده باشد.
استفاده از CodeAct زمانی که
یک اکشن باید ابزارها را روی فایل‌های متعددی زنجیره‌سازی کند. ابتدا ساندباکس را ایمن‌سازی کنید.
استفاده از ایجنت ترمینال زمانی که
ورودی کار CLI، خروجی pull request و همراه با یک برنامه‌ی پویا باشد.
استفاده از ایشو تا PR زمانی که
رابط کاربری یک لیبل GitHub است. بدون حلقه‌ی تعاملی و بدون ترمینال.
استفاده از ایجنت مهاجرت زمانی که
مجموعه‌ی تست‌ها، حقیقت پایه در چندین مخزن است.
ابتدا از دستورالعمل‌های قطعی استفاده کنید
آنها 70 تا 80 درصد از اصلاحات مکانیکی مهاجرت را پوشش می‌دهند.

اعدادی که باید بدانید

مفهوم‌ها
معیار SWE-bench Verified
رشد از 4% به 80.9% در کمتر از سه سال. شامل 500 وظیفه با ارزیابی دستی انسانی.
تفاوت ساختار پایه
مدل Claude Sonnet 4.5 روی SWE-agent v1 امتیاز 43.2% و روی Cline امتیاز 59.8% گرفت.
بخش ساده تسک‌ها
161 وظیفه از 500 وظیفه در Verified فقط نیازمند 1 یا 2 خط تغییر هستند.
معیار SWE-bench Pro
تغییرات بیش از 10 خط. سیستم‌های پیشرو امتیاز 23 تا 59% کسب می‌کنند.
حلقه‌ی اعتبارسنج
ارتقای بیش از 10 نمره‌ای در SWE-bench.
سیستم Live-SWE-agent
امتیاز 79.2% در SWE-bench Verified با مدل Opus 4.5.

بستر آزمایشی ایجنت ترمینال (01)

معماری
فراخوانی می‌کندفراخوانی ابزاراجرارابط خط فرمان کاربراجرای ایجنتبستر آزمایشیواسط گرافیکی متنی Bun + Inkبرنامه‌ریزی، اقدام، مشاهدهوضعیت برنامه‌ریزی با TodoWriteمدلاز طریق OpenRouterتوزیع‌کننده‌ی وظایف ابزارپروتکل MCP StreamableHTTPساندباکسE2B یا Daytona، ورک‌تریهوک‌ها8 رویداد چرخه‌ی حیاتابزار OpenTelemetryسرویس Langfuse: اسپن‌ها، توکن‌ها، هزینهPRاز طریق اپلیکیشن GitHub

اجرای درس‌ها

کار و کد
وظیفهکد
مقایسه‌ی ساختارهای پایه‌ی ساده (L09)code/main.py
حلقه‌ی برنامه‌ریزی، اقدام، مشاهده (01)python main.py
دموی بستر آزمایشی TS به همراه ارزیابی آفلاینnpm start
شبیه‌سازی 50 مهاجرت (09)python main.py
توزیع 20 ایشو روی 3 مخزن (16)python main.py
اصلاح مجموعه‌داده‌ی نمونه fizz (29)python3 code/main.py
تست دموی سرتاسریpython3 -m pytest code/tests/ -v

سه پروژه

مقایسه
عاملtiny-coding-agentrust-agent-shellpr-review-reporter
خروجی ساختحلقه‌ی ترمیم محدود با پچ‌های دقیقحلقه‌ی اکشن stdin/stdout در Rustگزارش بررسی پچ تثبیت‌شده
زبانPython 3.10+زبان Rust همراه با یک تطبیق‌دهنده PythonTypeScript روی Node 22.18+، Python
ورودیفضای کاری همراه با proposals.jsonفضای کاری همراه با requests.jsonlتفاوت‌های بازنگری یکپارچه، stdin یا --repo
خروجیrepair-trace.jsonرویدادهای JSONL به ازای شناسه‌ی هر درخواستreview.json، review.html و SARIF
بودجه--max-steps پیش‌فرض 6--limit پیش‌فرض 50تفاوت‌های بازنگری حداکثر یک مگابایت
ایمنیمهار مسیر، یک دستور تست تکبدون شل سیستم‌عامل، خواندن حداکثر 16 کیلوبایتگریز از کاراکترهای HTML، گیت کنترلی نقل‌قول دقیق
وضعیت‌های پایانیcompleted، failed، budget_exhaustedok، error، rejectedیافته‌های تأییدشده یا ردشده

دستورات پروژه

دستورها
دستورعملکرد
project_test.py <project> --init learning-artifacts/<project>ایجاد یک فضای کاری برای یادگیرنده
project_test.py <project> --stage 1 --path <workspace>نمره‌دهی به یک مرحله
project_test.py <project> --all --solution --strictبررسی کد مرجع
cli.py <workspace> <proposals> --copy-to <dir> --out <trace>ترمیم یک نسخه‌ی موقت
client.py <workspace> <requests> --limit 8 --out <file>اجرای شل Rust از طریق تطبیق‌دهنده
node cli.ts --diff samples/change.diff --sarif review.sarifنوشتن خروجی‌های JSON، HTML و SARIF
--repo /path --base REF --head REFحالت فقط‌خواندنی تفاوت‌های بازنگری Git
--candidates recorded-findings.jsonاعتبارسنجی یافته‌های یک بازبین دیگر

بودجه‌ها در کد

پیش‌فرض‌ها
تنظیمپیش‌فرضتوضیحات
max_turns50Budget در پروژه پایانی 01
max_tokens200_000سقف کانتکست در پروژه پایانی 01
max_dollars5.00پروژه پایانی 01، برای هر وظیفه
TRUNCATE_BYTES4096سقف خروجی ابزار در 01
BUDGET_TURNS20مهاجرت، با BUDGET_USD معادل 8.0
step_budget12AgentRun در L29

زنجیره گیت و ساندباکس (29)

کد
python
chain = GateChain(gates=(
    WhitelistGate(allowed=frozenset({"read_file", "write_file", "run_tests"})),  # مجموعه‌ی مجازها (allow-set)
    RegexGate.from_strings(items=(r"\brm\s+-rf\b", r"\bsudo\b", r"^/etc/")),     # الگوهای ردشده
    BudgetGate(max_tokens=budget),                                               # بودجه‌ی مشاهده
))
outcome = self.chain.evaluate(call, ctx)                                         # توقف با اولین دستور نامجاز
sandbox = Sandbox(project_root=repo, timeout_seconds=10.0)                       # لیست سیاه همراه با زندان مسیر

عیب‌یابی

عیب‌یابی
  • کرش کردن حلقه روی 8 مگابایت خروجی ripgrep

    علت
    خروجی کوتاه نشده‌ی ابزار
    راه‌حل
    تعیین سقف 4 هزار توکن برای هر فراخوانی
  • رسیدن rm -rf به ساندباکس

    علت
    نبود گارد محافظتی PreToolUse
    راه‌حل
    destructive_guard وضعیت را به blocked تغییر می‌دهد
  • امتیاز Verified بالا اما نتایج ضعیف در دنیای واقعی

    علت
    بخش ساده تسک‌ها، 161 وظیفه از 500 وظیفه
    راه‌حل
    ارزیابی زیرمجموعه‌ای شبیه به تسک‌های Pro از بک‌لاگ خودتان
  • budget_exhausted

    علت
    مصرف شدن 30 دقیقه، 8 دلار یا 20 نوبت گفت‌وگو
    راه‌حل
    ثبت وضعیت مخزن با تفاوت‌های بازنگری فعلی
  • coverage_regression

    علت
    کاهش پوشش آزمون به میزان بیش از 2%
    راه‌حل
    دسته‌بندی در کلاس مربوطه، بدون ثبت PR
  • policy_denied

    علت
    تابع can("force_push") مقدار False برمی‌گرداند
    راه‌حل
    محافظت از branch، عدم حضور اپلیکیشن در لیست مجاز گذر از گیت
  • patch must match exactly once

    علت
    متن قبلی یافت نشد یا یکتا نیست
    راه‌حل
    استفاده از یک رشته‌ی متنی قدیمی، دقیق و یکتا
  • path escapes root

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

پرسش و پاسخ

پرسش و پاسخ
کدام ایجنت برنامه‌نویس بهترین است؟
سوال اشتباه است. قابلیت اطمینان را بر اساس توزیع وظایف خاص خود بسنجید.
چرا ساختار ساده‌ی CodeAct نوبت‌های گفت‌وگوی کمتری مصرف می‌کند؟
یک قطعه‌کد به صورت همزمان تمام فایل‌های دارای خطا را بازنویسی می‌کند.
چرا برای گیت ایمنی از assert استفاده نمی‌شود؟
فلگ python -O تمام عبارت‌های assert را حذف می‌کند.