Preskočite na glavni sadržaj
OpenAI

Kako OpenAI koristi Codex

Uvod

Codex se svakodnevno upotrebljava u brojnim tehničkim timovima u OpenAI-ju, kao što su Sigurnost, Produktno inženjerstvo, Frontend, API, Infrastruktura i Inženjerstvo performansi. Timovi ga upotrebljavaju za ubrzavanje niza inženjerskih zadataka, od razumijevanja složenih sustava i refaktoriranja velikih baza koda do isporuke novih značajki i rješavanja incidenata u kratkim rokovima.

Na temelju intervjua s inženjerima u OpenAI-ju i internih podataka o upotrebi sastavili smo slučajeve upotrebe i najbolje prakse koji ističu kako Codex pomaže našim timovima da rade brže, poboljšaju kvalitetu rada i upravljaju složenošću u velikim razmjerima.


1. slučaj uporabe: Razumijevanje koda

Codex našim timovima pomaže da se brzo upoznaju s nepoznatim dijelovima baze koda tijekom uvođenja u posao, otklanjanja pogrešaka ili istraživanja incidenata.

Često upotrebljavaju Codex kako bi locirali osnovnu logiku neke značajke, mapirali odnose između servisa ili modula i pratili tok podataka kroz sustav. Također pomaže istaknuti arhitektonske uzorke ili dijelove dokumentacije koji nedostaju, za čije bi generiranje inače bio potreban znatan manualni napor.

Tijekom odgovora na incidente, Codex pomaže inženjerima da se brzo prilagode novim područjima otkrivanjem interakcija između komponenti ili praćenjem širenja stanja neuspjeha kroz sustave.

Anegdote naših timova

„Kada ispravim pogrešku, upotrebljavam način rada 
Ask kako bih vidio gdje bi se još u bazi koda mogao pojaviti isti problem.”
Inženjer performansi, sustavi za dohvaćanje
Pokušajte upotrebljavati Codex za razumijevanje koda uz ove primjere upita:
  • Gdje je logika autentifikacije implementirana u ovom repozitoriju?

  • Napravi sažetak kako zahtjevi prolaze kroz tu uslugu od ulazne točke do odgovora.

  • Koji moduli komuniciraju s [unesi ime modula] i kako se rješavaju kvarovi?

2. slučaj uporabe: Refaktoriranje i migracije

Codex se uobičajeno upotrebljava za unošenje promjena koje obuhvaćaju više datoteka ili paketa. Na primjer, kada inženjeri ažuriraju API, mijenjaju način na koji se obrazac implementira ili migriraju na novu ovisnost, Codex olakšava dosljednu primjenu promjena.

Osobito je korisno kada istu promjenu treba napraviti u desecima datoteka ili kada promjena zahtijeva razumijevanje strukture i ovisnosti koje nije lako obuhvatiti regularnim izrazom ili funkcijom traži i zamijeni.

Upotrebljavaju ga i za čišćenje koda razdvajanjem prevelikih modula, zamjenom starih obrazaca modernima ili pripremom koda za bolju testabilnost.

Anegdote naših timova

„Codex je zamijenio sve zastarjele pozive funkcije getUserById( ) novim obrascem servisa i otvorio pull request (PR). Učinio je to u nekoliko minuta za što bi inače bili potrebni sati.“
Backend inženjer, ChatGPT Web
Pokušajte upotrebljavati Codex za refaktoriranje i migracije uz ove primjere upita:
  • Podijeli ovu datoteku u zasebne module prema odgovornostima i generiraj testove za svaki od njih.

  • Pretvori sav pristup bazi podataka temeljen na povratnim pozivima u async/await.

3. slučaj uporabe: Optimizacija performansi

Codex se upotrebljava za prepoznavanje i rješavanje uskih grla u performansama.

Tijekom optimizacije ili poboljšanja pouzdanosti, inženjeri upućuju Codexu upit da analizira spore ili memorijski zahtjevne dijelove koda, poput neučinkovitih petlji, redundantnih operacija ili skupih upita, te predloži optimizirane alternative, što često rezultira značajnim povećanjem učinkovitosti i pouzdanosti.

Codex se također upotrebljava za podršku zdravlju koda prepoznavanjem rizičnih ili zastarjelih obrazaca koji su još uvijek u aktivnoj upotrebi. Naši se timovi oslanjaju na to kako bi smanjili dugoročni tehnički dug i proaktivno spriječili regresije.

Anegdote naših timova

„Upotrebljavam Codex za otkrivanje ponovljenih skupih poziva baze podataka. Odlično služi za prepoznavanje kritičnih putanja i izradu grupiranih upita koje kasnije mogu dodatno prilagođavati.”
Infrastrukturni inženjer za pouzdanost API-ja
Pokušajte upotrebljavati Codex za optimizaciju performansi uz ove primjere upita:
  • Optimiziraj ovu petlju za memorijsku učinkovitost i objasni zašto je tvoja verzija brža.

  • Pronađi ponovljene skupe operacije u ovom obrađivaču zahtjeva i predloži mogućnosti predmemoriranja.

  • Predloži brži način za grupiranje upita baze podataka u ovoj funkciji.

4. slučaj upotrebe: Poboljšavanje testne pokrivenosti

Codex pomaže inženjerima da brže pišu testove – posebno tamo gdje je pokrivenost nedovoljna ili potpuno nedostaje.

Kada rade na ispravku pogreške ili refaktoriranju, inženjeri često traže od Codexa da predloži testove koji obuhvaćaju rubne slučajeve ili vjerojatne putove neuspjeha. Za novi kȏd, Codex može generirati jedinične ili integracijske testove na temelju potpisa funkcije i okolne logike.

Codex je posebno koristan za prepoznavanje graničnih uvjeta, poput praznih unosa, maksimalne duljine ili neuobičajenih, ali valjanih stanja koja se često zanemare u početnim testovima.

Anegdote naših timova

„Usmjerim Codex na module s niskom pokrivenošću testovima preko noći, a ujutro me dočekaju izvedivi PR-ovi s pojedinačnim testovima.”
Frontend inženjer, ChatGPT-ova aplikacija za stolna računala
Pokušajte upotrebljavati Codex za optimizaciju performansi uz ove primjere upita:
  • Napiši jedinične testove za tu funkciju, uključujući rubne slučajeve i scenarije neuspjeha.

  • Izradi test temeljen na svojstvima za taj alat za sortiranje.

  • Proširi ovu testnu datoteku kako bi obuhvatila nedostajuće scenarije povezane s null ulazima i neispravnim stanjima.

5. primjer uporabe: Povećanje brzine razvoja

Codex pomaže timovima da ubrzaju rad tako što olakšavaju i početak i završetak razvojnog ciklusa.

Pri pokretanju nove značajke inženjeri ga koriste za postavljanje predloška – generiranje mapa, modula i API-jevih kostura kako bi brzo dobili izvršiv kôd bez ručnog povezivanja svakog dijela.

Kako se projekti približavaju izdavanju, Codex pomaže ispuniti kratke rokove preuzimanjem manjih, ali ključnih zadataka poput razvrstavanja bugova, popunjavanja posljednjih praznina u implementaciji te generiranjem skripti za uvođenje, telemetrijskih kuka ili konfiguracijskih datoteka.

Upotrebljava se i za pretvaranje povratnih informacija o proizvodu u početni kod. Inženjeri često zalijepe korisnički zahtjev ili specifikaciju i prepuste Codexu da izradi grubi nacrt kojem se kasnije mogu vratiti i doraditi ga.

„Bio sam na sastancima cijeli dan, a svejedno sam spojio 4 PR-a jer je Codex radio u pozadini.”
Proizvodni inženjer, ChatGPT Enterprise
Isprobajte Codex za povećavanje brzine razvoja uz ove primjere upita:
  • Postavi novu API rutu za POST /events s osnovnom validacijom i vođenjem zapisnika.

  • Generirajte telemetrijski mehanizam za praćenje uspjeha ili neuspjeha novog tijeka uvođenja korisnika upotrebom ovog predloška [umetnite primjer svojeg telemetrijskog koda].

  • Izradi osnovnu implementaciju na temelju ove specifikacije: [unesite specifikaciju ili povratne informacije o proizvodu].

6. slučaj uporabe: Održavanje protoka

Codex pomaže našim inženjerima da ostanu produktivni kada su njihovi rasporedi fragmentirani i ispunjeni prekidima.
Upotrebljava se za bilježenje nedovršenih zadataka, pretvaranje bilješki u funkcionalne prototipove ili izdvajanje istraživačkih zadataka kojima se kasnije može vratiti. To olakšava prekidanje i nastavak rada bez gubitka konteksta, posebno kada su dežurni ili imaju mnogo sastanaka.

„Ako uočim brzu usputnu ispravku, pokrenem Codex zadatak umjesto da mijenjam grane te pregledam pull requestove kad stignem.”
Backend inženjer, ChatGPT API-ja
Pokušajte upotrebljavati Codex kako biste ostali usredotočeni uz ove primjere upita:

7. slučaj uporabe: istraživanje i kreiranje ideja

Codex je koristan i za zadatke otvorenog tipa, poput pronalaženja alternativnih rješenja ili potvrđivanja dizajnerskih odluka. Možete postaviti upit za različite načine rješavanja problema, istražiti nepoznate obrasce ili testirati pretpostavke pod pritiskom. To pomaže istaknuti kompromise, proširiti dizajnerske mogućnosti i precizirati odabire implementacije.

Upotrebljava se i za identificiranje povezanih grešaka. S obzirom na poznat problem ili zastarjelu metodu, Codex može prepoznati slične obrasce na drugim mjestima u kodu, što olakšava uočavanje regresija ili dovršavanje čišćenja koda.

„Codex mi pomaže riješiti problem hladnog starta – zalijepim specifikaciju i dokumentaciju, a on postavi osnovnu strukturu koda ili mi pokaže što sam zaboravio.“
Inženjer proizvoda, ChatGPT za stolna računala
Pokušajte upotrebljavati Codex za istraživanje i osmišljavanje uz ove primjere upita:
  • Kako bi to funkcioniralo da je sustav vođen događajima umjesto zahtjeva / odgovora?

  • Pronađi sve module koji ručno sastavljaju SQL nizove umjesto da upotrebljavaju naš alat za izradu upita.

  • Preoblikuj ovo u funkcionalniji stil i izbjegavaj mutacije i nuspojave.


Najbolje prakse

Codex najbolje funkcionira kada mu se daju struktura, kontekst i prostor za iteraciju. Evo nekih od navika koje timovi u OpenAI-ju razvijaju kako bi dosljedno izvlačili vrijednost iz toga u njihovom svakodnevnom radu.

Počnite s načinom rada Ask

Za velike promjene započnite tako da u načinu rada Ask mode pošaljete upit Codexu za plan implementacije, koji zatim postaje unos za naknadne upite kada se prebacite u način rada Code. Taj dvokoračni proces drži Codex stabilnim i pomaže u izbjegavanju pogrešaka u njegovim rezultatima. Codex najbolje funkcionira s jasno definiranim zadacima za koje bi vama ili članu tima trebalo oko sat vremena za dovršetak ili nekoliko stotina redaka koda za implementaciju. Kako se modeli budu poboljšavali, možete očekivati povećanje opsega zadataka koje mogu preuzeti.

Iterativno unaprijedite razvojno okruženje za Codex

Postavljanje skripte za pokretanje, varijabli okruženja i pristupa internetu znatno smanjuje stopu pogrešaka Codexa. Dok izvršavate zadatke, tražite pogreške pri izgradnji koje se mogu ispraviti u konfiguraciji okruženja Codex. Za to će možda trebati nekoliko iteracija, ali dugoročno donosi znatne dobitke u učinkovitosti.

Oblikujte svoj upit kao da pišete GitHub problem

Codex bolje odgovara kada upit odražava način na koji biste opisali promjenu u PR-u ili problemu. To znači uključivanje putanja datoteka, naziva komponenti, razlika i isječaka iz dokumentacije kada je to relevantno. Pisanje upita s obrascima poput „Implementiraj ovo na isti način kao što je to učinjeno u [modulu X]” poboljšava rezultate.

Upotrebljavajte red zadataka u Codexu kao lagani backlog

Pokrenite zadatke kako biste zabilježili tangencijalne ideje, djelomično dovršen rad ili usputne popravke. Nema pritiska da odjednom generirate cijeli PR. Codex dobro funkcionira kao mjesto za privremeni rad na koje se možete vratiti kada se ponovno usredotočite.

Koristite AGENTS.md za pružanje trajnog konteksta

Održavajte datoteku AGENTS.md kako biste pomogli Codexu da učinkovitije radi u vašem repozitoriju u različitim upitima. Te datoteke obično uključuju konvencije imenovanja, poslovnu logiku, poznate specifičnosti ili ovisnosti koje Codex ne može zaključiti samo na temelju koda. Saznajte više o strukturiranju datoteke AGENTS.md u dokumentaciji.

Iskoristite “Best of N” za poboljšavanje izlaza

Značajka Best-of-N omogućuje istodobno generiranje više odgovora za jedan zadatak, što vam omogućuje brzo istraživanje različitih rješenja i odabir najboljeg. Za složenije zadatke možete pregledati nekoliko iteracija i kombinirati dijelove različitih odgovora kako biste postigli bolji rezultat.


Gledajući naprijed

Codex je još uvijek u istraživačkom pretprikazu, ali već ostvaruje stvaran učinak na način na koji radimo tako što nam pomaže da radimo brže, pišemo bolji kôd i preuzimamo zadatke koji inače nikada ne bi dobili prioritet.

Veselimo se potencijalu koji je pred nama – kako naši modeli postaju bolji i kako se Codex sve dublje integrira u naše radne tijekove, radujemo se otključavanju još moćnijih načina za razvoj softvera s njim. Nastavit ćemo dijeliti ono što naučimo usput.

Zanima vas kako uvesti AI u svoje poslovanje?

Naučite kako pomažemo tvrtkama razviti skalabilne i odgovorne strategije umjetne inteligencije.