Kako OpenAI uporablja Codex
Codex vsakodnevno uporabljajo številne tehnične ekipe pri OpenAI, kot so varnost, razvoj izdelkov, razvoj vmesnika, API, infrastruktura in inženiring zmogljivosti. Ekipe ga uporabljajo za pospešitev različnih inženirskih nalog, od razumevanja kompleksnih sistemov in preoblikovanja velikih zbirk kode do uvajanja novih funkcionalnosti in reševanja incidentov v kratkih rokih.
Na podlagi intervjujev z inženirji OpenAI in internih podatkov o uporabi smo zbrali primere uporabe in dobre prakse, ki prikazujejo, kako Codex pomaga našim ekipam hitreje delati, izboljšati kakovost dela in obvladovati kompleksnost v velikem obsegu.
Codex našim ekipam pomaga, da se med uvajanjem, razhroščevanjem ali preiskovanjem incidenta hitro seznanijo z neznanih delov kodne baze.
Pogosto uporabljajo Codex za iskanje osnovne logike funkcionalnosti, začrtanje odnosov med storitvami ali moduli ter sledenje toku podatkov skozi sistem. Pomaga tudi razkriti arhitekturne vzorce ali manjkajoče dele dokumentacije, za pripravo katerih bi sicer bilo potrebno precejšnjega ročnega dela.
Pri odzivanju na incidente Codex inženirjem pomaga, da se hitro uvedejo v nova področja: prikaže interakcije med komponentami in sledi temu, kako se stanja okvar širijo med sistemi.
Zgodbe naših ekip
»Ko odpravljam napako, uporabim način Ask, da preverim, kje drugje v kodni zbirki bi se lahko pojavila ista težava«
Kje je v tem repozitoriju implementirana logika preverjanja pristnosti?
Povzemi, kako zahteve potekajo skozi to storitev od vstopne točke do odgovora.
Kateri moduli sodelujejo z [vstavi ime modula] in kako se obravnavajo napake?
Codex se pogosto uporablja za uvajanje sprememb, ki zajemajo več datotek ali paketov. Na primer, ko inženirji posodabljajo API, spreminjajo način implementacije vzorca ali prehajajo na novo odvisnost, Codex omogoča dosledno uvajanje sprememb.
Še posebej uporabno je, kadar je treba isto posodobitev izvesti v več deset datotekah ali kadar posodobitev zahteva poznavanje strukture in odvisnosti, ki jih z regexom ali funkcijo iskanja in zamenjave ni mogoče zlahka zajeti.
Uporabljajo ga tudi za čiščenje kode z razdeljevanjem prevelikih modulov, zamenjavo zastarelih vzorcev s sodobnejšimi ali pripravo kode za boljšo testabilnost.
Zgodbe naših ekip
»Codex je vse stare funkcije getUserById() zamenjal z našim novim vzorcem storitve in odprl zahtevek za pull request. To, kar bi sicer trajalo več ur, je opravil v nekaj minutah.«
To datoteko razdeli v ločene module glede na odgovornost in ustvari teste za vsakega od njih.
Pretvori vse dostopne točke podatkovne zbirke, ki uporabljajo povratne klice, v async/await.
Codex se uporablja za prepoznavanje in odpravljanje ozkih grl v delovanju.
Med prilagajanjem zmogljivosti ali izboljševanjem zanesljivosti inženirji pozovejo Codex, da analizira počasne ali pomnilniško zahtevne poti izvajanja kode, kot so neučinkovite zanke, odvečne operacije ali potratne poizvedbe, in predlaga optimizirane alternative, kar pogosto vodi do občutnih izboljšav učinkovitosti in zanesljivosti.
Codex se uporablja tudi za podporo zdravju kode z odkrivanjem tveganih ali zastarelih vzorcev, ki so še vedno v uporabi. Naše ekipe se zanašajo nanj za zmanjševanje dolgoročnega tehničnega dolga in proaktivno preprečevanje regresij.
Zgodbe naših ekip
“Codex uporabljam za iskanje ponavljajočih se dragih klicev zbirke podatkov. Odlično se obnese pri prepoznavanju kritičnih poti in pripravi paketnih poizvedb, ki jih lahko pozneje prilagodim.
Optimiziraj to zanko za pomnilniško učinkovitost in pojasni, zakaj je tvoja različica hitrejša.
Poišči ponavljajoče se drage operacije v tem obdelovalniku zahtev in predlagaj možnosti za predpomnjenje.
Predlagaj hitrejši način za izvajanje paketnih poizvedb v zbirki podatkov v tej funkciji.
Codex pomaga inženirjem hitreje pisati teste — še posebej tam, kjer je pokritost skromna ali povsem manjkajoča.
Pri odpravljanju napak ali refaktoriranju inženirji pogosto ukažejo Codexu, naj predlaga teste, ki zajemajo robne primere ali verjetne poti napak. Za novo kodo lahko generira enotne ali integracijske teste na podlagi podpisa funkcije in okoliške logike.
Codex je še posebej uporaben za prepoznavanje mejnih pogojev, kot so prazni vnosi, največja dolžina ali neobičajna, vendar veljavna stanja, ki jih pogosto spregledamo pri začetnih testih.
Zgodbe naših ekip
»Codex čez noč usmerim na module z nizko pokritostjo, zjutraj pa me čakajo izvedljivi pull request testi enot kode.«
Napiši teste enot kode za to funkcijo, vključno z robnimi primeri in scenariji napak.
Ustvari test na podlagi lastnosti za to orodje za razvrščanje.
Razširi to testno datoteko, da bo zajemala manjkajoče scenarije za vrednosti null in neveljavna stanja.
Codex ekipam pomaga delati hitreje s pospeševanjem začetka in zaključka razvojnega cikla.
Ko se lotijo nove funkcionalnosti, ga inženirji uporabljajo za vzpostavitev osnovnega ogrodja kode – ustvarjanje map, modulov in ogrodij API-jev, da hitro pripravijo delujočo kodo, ne da bi morali ročno povezati vsak del.
Ko se projekti približujejo izdaji, Codex pomaga ujeti kratke roke tako, da prevzame manjše, a ključne naloge, kot so razvrščanje napak, zapolnjevanje vrzeli pri implementaciji v zadnjem koraku ter ustvarjanje skriptov za uvajanje, telemetrijskih kljuk ali konfiguracijskih datotek.
Uporablja se tudi za pretvorbo povratnih informacij o izdelku v začetno kodo. Inženirji pogosto prilepijo uporabniško zahtevo ali specifikacijo, nato pa Codex ustvari grob osnutek, h kateremu se lahko pozneje vrnejo in ga izpopolnijo.
»Ves dan sem bil na sestankih in sem vseeno združil 4 pull requeste, ker je Codex deloval v ozadju.«
Ustvari ogrodje za novo pot za API POST /events z osnovno validacijo in beleženjem.
Ustvari telemetrijsko orodje za spremljanje uspešnosti novega poteka uvajanja s to predlogo [vstavi primer telemetrijske kode].
Ustvari ogrodno izvedbo na podlagi te specifikacije: [vstavi specifikacijo ali povratne informacije o izdelku].
Codex pomaga našim inženirjem ohranjati produktivnost, kadar so njihovi urniki razdrobljeni in polni prekinitev.
Uporablja se za zajemanje nedokončanega dela, pretvorbo zapiskov v delujoče prototipe ali ustvarjanje raziskovalnih nalog, ki jih je mogoče pozneje ponovno pregledati. To omogoča lažje prekinjanje in nadaljevanje dela brez izgube konteksta, še posebej, kadar so dežurni ali imajo veliko sestankov.
»Če opazim sprotni popravek, zaženem nalogo v Codexu, namesto da preklapljam med vejami, in njen pull request pregledam, ko imam čas.«
Codex je uporaben tudi za odprto zastavljeno delo, kot sta iskanje alternativnih rešitev ali preverjanje oblikovnih odločitev. S pozivom lahko pridobite različne načine za reševanje problema, raziščete nepoznane vzorce ali preverite svoje predpostavke. To pomaga razkriti kompromise, razširiti možnosti oblikovanja in izostriti odločitve glede izvedbe.
Uporablja se tudi za prepoznavanje povezanih hroščev. Če gre za znano težavo ali opuščeno metodo, lahko Codex prepozna podobne vzorce drugje v kodi, kar olajša zaznavanje regresij ali dokončanje prečiščevanja kode.
»Codex mi pomaga rešiti problem hladnega zagona – prilepim specifikacijo in dokumentacijo, nato pa pripravi ogrodje kode ali mi pokaže, kaj sem pozabil.«
Kako bi to delovalo, če bi bil sistem dogodkovno voden namesto po modelu zahteva-odziv?
Poišči module, ki ročno sestavljajo SQL nize, namesto da uporabljajo naš graditelj poizvedb.
Preoblikuj to v bolj funkcionalen slog in se izogni mutacijam ter stranskim učinkom.
Codex najbolje deluje, ko ima zagotovljeno strukturo, kontekst in prostor za ponavljanje iteracij. Tukaj je nekaj navad, ki jih ekipe OpenAI razvijajo, da bi pri vsakodnevnem delu dosledno ustvarjale vrednost.
Pri večjih spremembah začnite tako, da v načinu Ask Codex pozovete k pripravi načrta implementacije. Ta načrt nato postane vhod za nadaljnje pozive, ko preklopite v način Code. Ta dvostopenjski potek ohranja Codex prizemljenega in pomaga preprečevati napake v njegovem izhodu. Codex najbolje deluje pri jasno omejenih nalogah, za katere bi vi ali član vaše ekipe potrebovali približno eno uro ali nekaj sto vrstic kode za izvedbo. Ko se modeli izboljšujejo, lahko pričakujete, da se bo obseg nalog, ki jih lahko prevzamejo, še povečal.
Nastavitev zagonskega skripta, okoljskih spremenljivk in dostopa do interneta bistveno zmanjša stopnjo napak Codexa. Med izvajanjem nalog bodite pozorni na napake pri gradnji, ki jih je mogoče odpraviti v Codex konfiguraciji okolja. To lahko zahteva nekaj iteracij, vendar dolgoročno prinese znatne izboljšave učinkovitosti.
Codex se bolje odziva, ko pozivi odražajo način, kako bi opisali spremembo v pull requestu ali težavi. To pomeni vključitev poti datotek, imen komponent, razlik in odlomkov iz dokumentacije, kadar je to ustrezno. Pozivanje z vzorci, kot je »To izvedi na enak način, kot je narejeno v [modul X]«, izboljša rezultate.
Ustvarite naloge za beleženje stranskih zamisli, delno opravljenega dela ali sprotnih popravkov. Ni pritiska, da ustvarite celoten pull request naenkrat. Codex dobro deluje kot vmesna postaja, kamor se lahko vrnete, ko se znova osredotočite.
Vzdržujte datoteko AGENTS.md, da bo Codex v vašem repozitoriju v različnih pozivih deloval učinkoviteje. Te datoteke običajno vključujejo pravila poimenovanja, poslovno logiko, znane posebnosti ali odvisnosti, ki jih Codex ne more razbrati zgolj iz same kode. Več o tem si preberite v dokumentaciji o strukturiranju datoteke AGENTS.md.
Funkcija Best-of-N omogoča hkratno ustvarjanje več odgovorov za eno nalogo, da hitro raziščete več rešitev in izberete najboljšo. Pri zahtevnejših nalogah lahko pregledate več iteracij in združite dele različnih odgovorov, da dobite boljši rezultat.
Codex je še vedno v raziskovalnem predogledu, vendar že močno vpliva na način, kako razvijamo. Pomaga nam delati hitreje, pisati boljšo kodo in se lotevati dela, ki sicer nikoli ne bi bilo prednostno obravnavano.
Navdušeni smo nad potencialom, ki ga prinaša prihodnost z izboljševanjem naših modelov in vse večjo integracijo Codexa v naše delovne procese se veselimo odkrivanja še zmogljivejših načinov za razvoj programske opreme. Še naprej bomo delili spoznanja, ki jih bomo pridobili na tej poti.


