Codex Fixing Codex: یک حلقه اجماع
من یک حلقه عامل (agent loop) ساختهام که کاری فراتر از پیشنهاد کد انجام میدهد. این حلقه کد مینویسد، آن را بازبینی میکند و Pull Requestهای خودش را ادغام (merge) میکند.
برای آزمایش آن، این حلقه را روی یک فورک (fork) از codex CLI تنظیم کردم. اجازه دادم عاملها خودشان سعی کنند نرمافزار را اصلاح کنند. این یک آزمایش خالص است. این فورک هیچ کاربر و ستارهای ندارد. موضوع بر سر مکانیسم است، نه یک محصول.
نحوه عملکرد این حلقه به این صورت است:
- ورودی (Intake): یک باگ در منبع اصلی (upstream) به یک Issue در فورک تبدیل میشود. این حلقه فقط باگهای کوچک و مکانیکی را انتخاب میکند که میتواند آنها را به پایان برساند.
- بحث میان حلکنندهها (Solvers Argue): چندین عامل، اصلاحات متفاوتی را پیشنهاد میدهند. یک حلکننده کوچکترین تغییر را میخواهد. دیگری ساختار تمیز را میپسندد. سومی میخواهد به جای اضافه کردن کد، آن را حذف کند. آنها با هم اختلاف نظر دارند.
- داوری توسط قاضی (Judge Arbitrates): یک قاضی بحث را میخواند. اگر حلکنندهها اختلاف نظر داشته باشند، قاضی آنها را برای دورهای بیشتر بازمیگرداند. قاضی همچنین ثبت میکند که چرا ایدههای خاصی را رد کرده است.
- اجرا و ادغام (Implement and Merge): زمانی که به اجماع برسند، حلقه وصله (patch) را مینویسد، تستها را اجرا میکند و یک PR باز میکند. اگر تستها با موفقیت انجام شوند، خودش آن را ادغام میکند.
میتوانید این فرآیند را در عمل در issue #34 مشاهده کنید. عاملها درباره یک باگ همزمانی (concurrency bug) بحث کردند. آنها پیش از رسیدن به تصمیم، سه دور داوری را پشت سر گذاشتند. این حلقه بدون اینکه یک انسان حتی یک خط کد تایپ کند، یک اصلاح واقعی و یک تست رگرسیون (regression test) تولید کرد.
یک نتیجه جالب در PR #16 رخ داد. حلقه نتوانست باگی را که گزارش شده بود بازتولید (reproduce) کند. به جای ساختن یک اصلاح جعلی، صرفاً یک تست برای تثبیت آن رفتار اضافه کرد و متوقف شد. حلقهای که بداند چه زمانی نباید وصله (patch) اعمال کند، مفیدتر از حلقهای است که همیشه یک diff تولید میکند.
این حلقه تا کنون حدود ۱۶ PR را ادغام کرده است. این حلقه وظایف کوچکی مانند مدیریت UTF-8 و اصلاح دستورات را انجام میدهد. این حلقه کل یک پایگاه کد (codebase) را مدیریت نمیکند، اما باگهای کوچک و محدود را از ابتدا تا انتها میبندد.
انسانها همچنان قوانین را تعیین میکنند و کار را بازبینی میکنند. ما هنوز هر PR را بررسی میکنیم. کدنویسی خودکار است، اما توجه و نظارت انسانی است.
میتوانید کل فرآیند را در GitHub مشاهده کنید. برای دیدن بحثها، به issue #34 و PR #37 نگاه کنید.
Optional learning community: https://t.me/GyaanSetuAi