Како OpenAI користи Codex
Codex се свакодневно користи у бројним техничким тимовима у OpenAI-ју, као што су Security, Product Engineering, Frontend, API, Infrastructure и Performance Engineering. Тимови га користе да убрзају различите инжењерске задатке, од разумевања сложених система и рефакторисања великих кодних база до испоруке нових функција и решавања инцидената под кратким роковима.
Ослањајући се на интервјуе са OpenAI инжењерима и интерне податке о коришћењу, прикупили смо случајеве употребе и најбоље праксе које истичу како Codex помаже нашим тимовима да се крећу брже, побољшају квалитет рада и управљају сложеношћу у великом обиму.
Codex помаже нашим тимовима да се брзо снађу у непознатим деловима кодне базе током увођења у посао, отклањања грешака или истраживања инцидента.
Често користе Codex да пронађу основну логику неке функције, мапирају односе између сервиса или модула и испрате ток података кроз систем. Такође помаже да се уоче архитектонски шаблони или делови документације који недостају, а за чије би прављење иначе био потребан значајан ручни рад.
Током одговора на инциденте, Codex помаже инжењерима да се брзо укључе у нове области тако што открива интеракције између компоненти или прати како се стања отказа шире кроз системе.
Примери из наших тимова
„Када исправим баг, користим Ask mode да видим где би се још у кодној бази могао појавити исти проблем“
Где је у овом репозиторијуму имплементирана логика аутентификације?
Сажми како захтеви пролазе кроз овај сервис од улазне тачке до одговора.
Који модули комуницирају са [insert module name] и како се обрађују откази?
Codex се често користи за измене које обухватају више фајлова или пакета. На пример, када инжењери ажурирају API, мењају начин на који је неки шаблон имплементиран или мигрирају на нову зависност, Codex олакшава да се измене доследно примене.
Посебно је користан када исто ажурирање треба применити у десетинама фајлова, или када је за ажурирање потребно разумевање структуре и зависности које није лако ухватити regex-ом или простом претрагом и заменом.
Такође га користе за чишћење кода тако што разбијају превелике модуле, замењују старе шаблоне модерним или припремају код за бољу тестабилност.
Примери из наших тимова
„Codex је заменио сваки застарели getUserById( ) нашим новим шаблоном сервиса и отворио PR. За неколико минута је урадио оно за шта би биле потребне сате.“
Подели овај фајл на засебне модуле по намени и генериши тестове за сваки.
Пребаци сав приступ бази података заснован на callback-овима на async/await.
Codex се користи за идентификовање и решавање уских грла у перформансама.
Током подешавања или рада на поузданости, инжењери траже од Codex-а да анализира споре или меморијски захтевне путање кода, као што су неефикасне петље, сувишне операције или скупи упити, и предложи оптимизоване алтернативе, што често доводи до значајних добитака у ефикасности и поузданости.
Codex се такође користи као подршка здрављу кода тако што идентификује ризичне или застареле шаблоне који су и даље у активној употреби. Наши тимови се ослањају на њега да помогне у смањењу дугорочног техничког дуга и проактивном спречавању регресија.
Примери из наших тимова
„Користим Codex да тражи скупа DB позивања која се понављају. Одличан је у означавању hot path-ова и састављању batch упита које касније могу да дорадим.“
Оптимизуј ову петљу за ефикасније коришћење меморије и објасни зашто је твоја верзија бржа.
Пронађи скупе операције које се понављају у овом handler-у захтева и предложи могућности за кеширање.
Предложи бржи начин за batch обраду DB упита у овој функцији.
Codex помаже инжењерима да брже пишу тестове — посебно тамо где је покривеност танка или потпуно недостаје.
Када раде на исправци бага или рефакторисању, инжењери често траже од Codex-а да предложи тестове који покривају граничне случајеве или вероватне путање отказа. За нови код, може да генерише unit или integration тестове на основу потписа функције и околне логике.
Codex је посебно користан за идентификовање граничних услова као што су празни улази, максимална дужина или необична али валидна стања која се често пропусте у почетним тестовима.
Примери из наших тимова
„Усмерим Codex преко ноћи на модуле са слабом покривеношћу и ујутру ме сачекају PR-ови са unit тестовима спремни за покретање.“
Напиши unit тестове за ову функцију, укључујући граничне случајеве и путање отказа.
Генериши property-based тест за овај услужни програм за сортирање.
Прошири овај тест фајл тако да обухвати сценарије који недостају око null улаза и неважећих стања.
Codex помаже тимовима да се крећу брже тако што убрзава и почетак и крај развојног циклуса.
При покретању нове функције, инжењери га користе да направи boilerplate — генерише фасцикле, модуле и API stub-ове како би брзо добили покретљив код без ручног повезивања сваког дела.
Како се пројекти приближавају издању, Codex помаже да се испоштују кратки рокови тако што преузима мање, али кључне задатке као што су тријажа багова, попуњавање празнина у завршној имплементацији и генерисање rollout скрипти, telemetry hook-ова или config фајлова.
Такође се користи за претварање повратних информација о производу у почетни код. Инжењери често убаце кориснички захтев или спецификацију и пусте Codex да генерише груб нацрт којем могу касније да се врате и дораде га.
„Био сам цео дан на састанцима, а ипак сам спојио 4 PR-а јер је Codex радио у позадини.“
Направи основу за нову API руту за POST /events са основном валидацијом и логовањем.
Генериши telemetry hook за праћење успеха/неуспеха новог onboarding тока, користећи овај шаблон [insert example of your telemetry code].
Направи stub имплементацију на основу ове спецификације: [insert spec or product feedback].
Codex помаже нашим инжењерима да остану продуктивни када су им распореди исцепкани и пуни прекида.
Користи се за бележење недовршеног посла, претварање белешки у радне прототипове или покретање истраживачких задатака којима се могу касније вратити. То олакшава паузирање и наставак рада без губитка контекста, посебно када су дежурни или имају много састанака.
„Ако уочим успутну исправку, покренем Codex задатак уместо да мењам гране и прегледам његов PR кад будем слободан.“
Codex је користан и за отвореније задатке као што су проналажење алтернативних решења или потврђивање дизајнерских одлука. Можете тражити различите начине решавања проблема, истражити непознате шаблоне или тестирати претпоставке под притиском. То помаже да се уоче компромиси, прошире опције дизајна и изоштре избори имплементације.
Такође се користи за идентификовање повезаних багова. На основу познатог проблема или застарелог метода, Codex може да идентификује сличне шаблоне на другим местима у коду, што олакшава хватање регресија или довршавање чишћења кода.
„Codex ми помаже да решим проблем хладног старта — налепим спецификацију и документацију, а он направи основу кода или ми покаже шта сам заборавио.“
Како би ово радило када би систем био event-driven уместо request/response?
Пронађи све модуле који ручно граде SQL стрингове уместо да користе наш query builder.
Препиши ово у функционалнијем стилу, избегни мутације и споредне ефекте.
Codex најбоље ради када добије структуру, контекст и простор за итерацију. Ево неких навика које OpenAI тимови развијају како би из њега извукли доследну вредност у свакодневном раду.
За велике измене, почните тако што ћете тражити од Codex-а план имплементације користећи Ask mode, који затим постаје улаз за наредне инструкције када пређете на Code Mode. Овај двокорачни ток држи Codex усмереним и помаже да се избегну грешке у његовом излазу. Codex најбоље ради са добро ограниченим задацима за које би вама или колеги било потребно око сат времена да их завршите или неколико стотина линија кода да их имплементирате. Како се модели побољшавају, очекујте да ће расти и величина задатака које може да преузме.
Подешавање startup скрипте, променљивих окружења и приступа интернету значајно смањује стопу грешака Codex-а. Док покрећете задатке, тражите грешке при build-у које могу да се исправе у конфигурацији окружења за Codex. Ово може захтевати неколико итерација, али дугорочно доноси значајне добитке у ефикасности.
Codex боље одговара када инструкције одражавају начин на који бисте описали измену у PR-у или issue-у. То значи да, када је релевантно, треба укључити путање до фајлова, називе компоненти, diff-ове и исечке из документације. Инструкције са обрасцима као што је „Имплементирај ово на исти начин као у [module X]” побољшавају резултате.
Покрећите задатке да забележите споредне идеје, делимично урађен посао или успутне исправке. Нема притиска да одмах добијете цео PR. Codex добро служи као привремени простор коме можете да се вратите када поново будете фокусирани.
Одржавајте AGENTS.md фајл како бисте помогли Codex-у да ефикасније ради у вашем репозиторијуму кроз више инструкција. Ови фајлови обично укључују конвенције именовања, пословну логику, познате особености или зависности које Codex не може сам да закључи само из кода. Више о структурирању AGENTS.md фајла сазнајте у документацији.
Функција Best-of-N вам омогућава да истовремено генеришете више одговора за један задатак како бисте брзо истражили више решења и изабрали најбоље. За сложеније задатке можете прегледати више итерација и комбиновати делове различитих одговора да бисте добили јачи резултат.
Codex је и даље у истраживачком preview-у, али већ има стварни утицај на начин на који градимо, помажући нам да се крећемо брже, пишемо бољи код и преузимамо посао који иначе никада не би био приоритет.
Узбуђени смо због онога што долази — како наши модели постају бољи, а Codex све дубље интегрисан у наше токове рада, радујемо се откључавању још моћнијих начина за развој софтвера уз њега. Наставићемо да делимо оно што успут научимо.


