چگونه OpenAI از Codex استفاده میکند
Codex بهصورت روزانه توسط تیمهای فنی متعددی در OpenAI، از جمله امنیت، مهندسی محصول، فرانتاند، API، زیرساخت و مهندسی عملکرد، استفاده میشود. تیمها از آن برای تسریع طیفی از کارهای مهندسی استفاده میکنند؛ از درک سیستمهای پیچیده و رفکتور کردنِ پایگاههای کدِ بزرگ گرفته تا ارائه قابلیتهای جدید و رسیدگی به رخدادها زیر فشار ضربالاجلهای فشرده.
با بهرهگیری از مصاحبهها با مهندسان OpenAI و دادههای استفاده داخلی، موارد استفاده و بهترین شیوههایی را گردآوری کردهایم که نشان میدهند Codex چگونه به تیمهای ما کمک میکند سریعتر پیش بروند، کیفیت کار را بهبود دهند و پیچیدگی را در مقیاس وسیع مدیریت کنند.
Codex به تیمهای ما کمک میکند هنگام آشنایی اولیه، اشکالزدایی یا بررسی یک رخداد، در بخشهای ناآشنای پایگاه کد سریع بهروز شوند.
آنها اغلب از Codex برای یافتن منطق اصلی یک قابلیت، ترسیم روابط بین سرویسها یا ماژولها، و ردیابی جریان داده در یک سیستم استفاده میکنند. همچنین به آشکار شدن الگوهای معماری یا بخشهای ازدسترفتهٔ مستندات کمک میکند؛ مواردی که در غیر این صورت تولید آنها به تلاش دستی قابلتوجهی نیاز داشت.
در طول پاسخ به رخداد، Codex با آشکار کردن تعاملات میان مؤلفهها یا ردیابی نحوه گسترش وضعیتهای خرابی در سراسر سیستمها، به مهندسان کمک میکند تا بهسرعت با حوزههای جدید آشنا شوند.
روایتهایی از تیمهای ما
«وقتی یک باگ را رفع میکنم، از حالت Ask استفاده میکنم تا بررسی کنم که این مشکل مشابه در کجای دیگری از پایگاه کد ممکن است ظاهر شود.»
منطق احراز هویت در این مخزن کد کجا پیادهسازی شده است؟
لطفاً نحوه جریان درخواستها از نقطه ورود تا پاسخ در این سرویس را خلاصه کنید.
کدام ماژولها با [insert module name] در تعاملاند و خطاها چگونه مدیریت میشوند؟
Codex معمولاً برای ایجاد تغییراتی استفاده میشود که چندین فایل یا بسته را در بر میگیرند. برای مثال، وقتی مهندسان در حال بهروزرسانی یک API، تغییر نحوه پیادهسازی یک الگو، یا مهاجرت به یک وابستگی جدید هستند، Codex اعمال یکپارچه تغییرات را آسان میکند.
وقتی لازم است یک بهروزرسانی یکسان در دهها فایل اعمال شود، یا زمانی که این بهروزرسانی نیازمند درک ساختار و وابستگیهایی است که بهراحتی با یک عبارت منظم (regex) یا جستوجو و جایگزینی ساده قابل تشخیص نیستند، این ابزار بهویژه کاربردی است.
آنها همچنین از آن برای پاکسازی کد استفاده میکنند؛ با تقسیم ماژولهای بزرگ، جایگزینی الگوهای قدیمی با الگوهای مدرن، یا آمادهسازی کد برای تستپذیری بهتر.
روایتهایی از تیمهای ما
«Codex همهٔ موارد قدیمیِ getUserById( ) را با الگوی سرویس جدید ما جایگزین کرد و درخواست ادغام (PR) را باز کرد.» این کار را در عرض چند دقیقه انجام داد که در غیر این صورت ساعتها طول میکشید».
این فایل را بر اساس موضوع به ماژولهای جداگانه تقسیم کنید و برای هر یک تست تولید کنید.
تمام دسترسیهای پایگاه داده را که بر پایهٔ توابع بازگشتی هستند، به الگوی ناهمگامِ/انتظارمحور تبدیل کن.
از Codex برای شناسایی و رفع گلوگاههای عملکرد استفاده میشود.
در طول تلاشهای مربوط به تنظیم عملکرد یا قابلیت اطمینان، مهندسان به Codex اعلان میدهند تا مسیرهای کدی را که کند هستند یا حافظه زیادی مصرف میکنند، مانند حلقههای ناکارآمد، عملیات اضافی یا پرسوجوهای پرهزینه، تحلیل کند و جایگزینهای بهینهتر پیشنهاد دهد؛ کاری که اغلب به بهبودهای چشمگیری در کارایی و قابلیت اطمینان منجر میشود.
Codex همچنین برای پشتیبانی از سلامت کد از طریق شناسایی الگوهای پرخطر یا منسوخی که همچنان بهطور فعال استفاده میشوند، به کار میرود. تیمهای ما برای کمک به کاهش بدهی فنی بلندمدت و جلوگیری پیشگیرانه از بروز بازگشتها به آن تکیه میکنند.
روایتهایی از تیمهای ما
«من از Codex برای شناسایی فراخوانیهای تکراری و پرهزینه پایگاه داده استفاده میکنم. در شناسایی مسیرهای پرترافیک و تهیهٔ کوئریهای دستهای که بعداً بتوانم تنظیمشان کنم، عالی است.»
این حلقه را از نظر مصرف حافظه بهینه کنید و توضیح دهید چرا نسخهٔ شما سریعتر است.
عملیات تکراری و پرهزینه را در این هندلرِ درخواست پیدا کنید و فرصتهای ذخیرهسازی موقت را پیشنهاد دهید.
یک روش سریعتر برای دستهبندی و اجرای کوئریهای پایگاه داده در این تابع پیشنهاد دهید.
Codex به مهندسان کمک میکند تستها را سریعتر بنویسند — بهویژه در جاهایی که پوشش کم است یا کاملاً وجود ندارد.
هنگام کار روی رفع باگ یا بازسازی، مهندسان اغلب از Codex درخواست میکنند که تستهایی را پیشنهاد کند که موارد مرزی یا مسیرهای محتمل شکست را پوشش دهند. برای کد جدید، میتواند بر اساس امضای تابع و منطق پیرامون آن، تستهای واحد یا یکپارچهسازی تولید کند.
Codex بهویژه برای شناسایی شرایط مرزی مانند ورودیهای خالی، حداکثر طول، یا حالتهای نامعمول اما معتبری که اغلب در تستهای اولیه نادیده گرفته میشوند، مفید است.
روایتهایی از تیمهای ما
«شبها Codex را روی ماژولهایی با پوشش تست پایین میگذارم و صبح با درخواستهای ادغام کدِ قابلاجرا برای تستهای واحد بیدار میشوم».
برای این تابع تستهای واحد بنویسید، از جمله برای موارد مرزی و مسیرهای شکست.
برای این ابزار مرتبسازی، یک تست مبتنی بر ویژگی تولید کنید.
این فایل آزمون را گسترش دهید تا سناریوهای پوششدادهنشده مربوط به ورودیهای null و حالتهای نامعتبر را پوشش دهد.
Codex به تیمها کمک میکند سریعتر پیش بروند و این کار را با تسریع هم آغاز و هم پایان چرخه توسعه انجام میدهد.
هنگام شروع یک ویژگی جدید، مهندسان از آن برای اسکفلد کردن کدهای تکراری استفاده میکنند — با تولید پوشهها، ماژولها و استابهای API تا بهسرعت به کدی قابل اجرا برسند، بدون اینکه لازم باشد هر بخش را بهصورت دستی به هم متصل کنند.
وقتی پروژهها به انتشار نزدیک میشوند، Codex با رسیدگی به کارهای کوچکتر اما ضروری، مانند اولویتبندی باگها، پر کردن شکافهای نهایی پیادهسازی، و تولید اسکریپتهای استقرار، هوکهای تلهمتری یا فایلهای پیکربندی، به رعایت مهلتهای فشرده کمک میکند.
همچنین برای تبدیل بازخورد محصول به کد اولیه مورد استفاده قرار میگیرد. مهندسان اغلب درخواست یا مشخصات کاربر را درج میکنند و از Codex میخواهند یک پیشنویس خام تولید کند تا بعداً به آن بازگردند و آن را پالایش کنند.
«تمام روز در جلسه بودم، اما باز هم ۴ درخواست ادغام کد را نهایی کردم، چون Codex در پسزمینه در حال کار بود.»
یک مسیر جدید در API برای ارسال رویدادها (POST /events) ایجاد کنید، همراه با اعتبارسنجی اولیه و ثبت رویدادها در گزارشها.
برای ردیابی موفقیت/شکست جریان جدید آنبوردینگ، با استفاده از این قالب [نمونهای از کد تلهمتری خود را وارد کنید] یک هوک تلهمتری ایجاد کنید.
یک پیادهسازی اولیه بر اساس این جزئیات ایجاد کنید: [جزئیات یا بازخورد محصول را وارد کنید].
Codex به مهندسان ما کمک میکند وقتی برنامههایشان پراکنده است و پر از وقفه است، بهرهور بمانند.
از آن برای ثبت کارهای ناتمام، تبدیل یادداشتها به نمونههای اولیهٔ کاربردی، یا ایجاد وظایف اکتشافیِ جداگانهای استفاده میشود که بعداً بتوان دوباره به آنها سر زد. این کار باعث میشود متوقف کردن کار و دوباره از سر گرفتن آن، بدون آنکه زمینه از دست برود، آسانتر شود؛ بهویژه وقتی افراد در شیفت آنکال هستند یا جلسات زیادی دارند.
«اگر یک اصلاح سریع و سرِراهی ببینم، بهجای اینکه شاخه عوض کنم، یک وظیفه به Codex میدهم و وقتی فرصت داشتم، درخواست ادغام کدش را بررسی میکنم.»
Codex همچنین برای کارهای باز، مانند یافتن راهحلهای جایگزین یا اعتبارسنجی تصمیمات طراحی، مفید است. میتوانید اعلانهای مختلف برای حل یک مسئله را مطرح کنید، الگوهای ناآشنا را بررسی کنید یا فرضیات را محک بزنید. این کار به آشکار شدن مصالحهها، گسترش گزینههای طراحی و دقیقتر شدن انتخابهای پیادهسازی کمک میکند.
همچنین برای شناسایی اشکالات مرتبط استفاده میشود. با داشتن یک مشکل شناختهشده یا یک روش منسوخشده، Codex میتواند الگوهای مشابه را در بخشهای دیگر کد شناسایی کند و شناسایی رگرسیونها یا تکمیل کار پاکسازی را آسانتر کند.
«Codex به من کمک میکند مشکل شروع سرد را حل کنم — مشخصات و مستندات را وارد میکنم و آن اسکلت کد را میسازد یا به من نشان میدهد چه چیزهایی را از قلم انداختهام.»
اگر سیستم بهجای درخواست/پاسخ، رویدادمحور بود، این چگونه عمل میکرد؟
همهٔ ماژولهایی را پیدا کنید که بهجای استفاده از سازندهٔ کوئری ما، رشتههای SQL را بهصورت دستی میسازند.
این را با سبکی تابعیتر بازنویسی کنید و از تغییر درجا و اثرات جانبی پرهیز کنید.
Codex زمانی بهترین عملکرد را دارد که ساختار، زمینه و فضای کافی برای تکرار و بهبود در اختیار آن قرار گیرد. در اینجا برخی از عادتهایی آمده است که تیمهای OpenAI در حال پرورش آنها هستند تا در کار روزمره بهطور مداوم از آن بهرهمند شوند.
برای تغییرات بزرگ، ابتدا با استفاده از حالت پرسش (Ask) از Codex بخواهید یک برنامهٔ پیادهسازی ارائه دهد؛ سپس وقتی به حالت Code تغییر میدهید، همان برنامه به ورودی اعلانهای بعدی تبدیل میشود. این فرایند دو مرحلهای Codex را در مسیر درست نگه میدارد و به جلوگیری از خطا در خروجی آن کمک میکند. Codex با وظایف با دامنه مشخصی که انجامشان برای شما یا یکی از همتیمیهایتان حدود یک ساعت زمان میبرد، یا برای پیادهسازیشان به چند صد خط کد نیاز است، بهترین عملکرد را دارد. با بهبود مدلها، انتظار داشته باشید که اندازه وظایفی که میتوانند بر عهده بگیرند افزایش یابد.
تنظیم یک اسکریپت راهاندازی، متغیرهای محیطی و دسترسی به اینترنت، نرخ خطای Codex را به طور قابل توجهی کاهش میدهد. هنگام اجرای وظایف، به دنبال خطاهای ساختی باشید که میتوان آنها را در پیکربندی محیط Codex برطرف کرد. این کار ممکن است به چند تکرار نیاز داشته باشد، اما در بلندمدت افزایش قابلتوجهی در کارایی به همراه دارد.
Codex زمانی بهتر پاسخ میدهد که اعلانها شبیه به حالتی باشند که شما یک تغییر را در قالب یک درخواست ادغام کد یا یک مسئله توضیح میدهید. یعنی در صورت مرتبط بودن، مسیرهای فایل، نامهای مؤلفهها، دیفها و بخشهایی از مستندات را نیز شامل شود. اعلاننویسی با الگوهایی مانند «این را همانطور پیادهسازی کن که در [ماژول X] انجام شده است» نتایج را بهبود میدهد.
برای ثبت ایدههای حاشیهای، کارهای نیمهتمام یا رفع اشکالهای موردی، وظایفی ایجاد کنید. هیچ فشاری نیست که یک درخواست ادغام کامل را در یک مرحله ایجاد کنید. Codex بهخوبی بهعنوان یک فضای موقت عمل میکند که وقتی دوباره تمرکزتان را به دست میآورید، میتوانید به آن برگردید.
یک فایل AGENTS.md را نگهداری کنید تا Codex بتواند در اعلانهای مختلف، در مخزن شما بهطور مؤثرتری عمل کند. این فایلها معمولاً شامل قراردادهای نامگذاری، منطق کسبوکار، رفتارهای خاص شناختهشده یا وابستگیهایی هستند که Codex نمیتواند صرفاً از روی کد استنباط کند. در مستندات درباره ساختاربندی فایل AGENTS.md خود اطلاعات بیشتری کسب کنید.
قابلیت Best-of-N به شما امکان میدهد برای یک وظیفه، چندین پاسخ را بهطور همزمان تولید کنید تا بهسرعت چندین راهحل را بررسی کرده و بهترین گزینه را انتخاب کنید. برای وظایف پیچیدهتر، میتوانید چندین تکرار را بررسی کنید و بخشهایی از پاسخهای مختلف را ترکیب کنید تا به نتیجهای بهتر برسید.
Codex هنوز در پیشنمایش تحقیقاتی است، اما همین حالا هم در شیوه ساخت ما تأثیر واقعی میگذارد و به ما کمک میکند سریعتر پیش برویم، کد بهتری بنویسیم و کارهایی را بر عهده بگیریم که در غیر این صورت هرگز در اولویت قرار نمیگرفتند.
ما از ظرفیتهای پیش رو هیجانزدهایم — هرچه مدلهای ما بهتر میشوند و Codex عمیقتر در جریانهای کاری ما یکپارچه میشود، مشتاقیم راههای قدرتمندتری را برای توسعه نرمافزار با آن بگشاییم. ما به اشتراکگذاری آنچه میآموزیم در طول مسیر ادامه خواهیم داد.


