Cum folosește OpenAI Codex
Codex este utilizat zilnic de numeroase echipe tehnice de la OpenAI, precum Securitate, Inginerie de produs, Interfața la nivel de client, API, Infrastructură și Inginerie de performanță. Echipele îl folosesc pentru a accelera o gamă largă de sarcini de inginerie, de la înțelegerea sistemelor complexe și refactorizarea bazelor de cod mari până la implementarea de funcții noi și rezolvarea incidentelor în termene foarte strânse.
Pe baza interviurilor cu ingineri OpenAI și a datelor interne de utilizare, am adunat exemple de utilizare și bune practici care arată cum Codex îi ajută pe colegii noștri să lucreze mai rapid, să îmbunătățească calitatea muncii și să gestioneze complexitatea la scară largă.
Codex ajută echipele noastre să se pună rapid la curent cu părți necunoscute ale bazei de cod în procesul de integrare, depanare sau investigare a unui incident.
Acestea folosesc adesea Codex pentru a identifica logica de bază a unei funcții, a cartografia relațiile dintre servicii sau module și a urmări fluxul de date printr-un sistem. De asemenea, acesta ajută la evidențierea modelelor arhitecturale sau a elementelor lipsă din documentație care altfel ar necesita un efort manual semnificativ pentru a fi generate.
În timpul răspunsului la incidente, Codex îi ajută pe ingineri să se familiarizeze rapid cu domenii noi prin evidențierea interacțiunilor dintre componente sau prin urmărirea modului în care stările de eroare se propagă între sisteme.
Povești din partea echipelor noastre
„Când remediez o eroare, folosesc modul Întreabă pentru a vedea unde altundeva în baza de cod ar putea apărea aceeași problemă”
Unde este implementată logica de autentificare în acest depozit?
Rezumă cum circulă cererile prin acest serviciu, de la punctul de intrare până la răspuns.
Care module interacționează cu [introdu numele modulului] și cum sunt gestionate defecțiunile?
Codex este frecvent utilizat pentru a implementa modificări care acoperă mai multe fișiere sau pachete. De exemplu, atunci când inginerii actualizează un API, modifică modul în care este implementat un tipar sau efectuează migrarea către o nouă dependență, Codex facilitează aplicarea consecventă a modificărilor.
Este deosebit de util mai ales atunci când aceeași actualizare trebuie aplicată în zeci de fișiere sau când actualizarea necesită înțelegerea structurii și a dependențelor care nu pot fi surprinse cu ușurință cu un regex sau prin căutare și înlocuire.
De asemenea, îl folosesc ca să ordoneze codul: împărțind modulele supradimensionate, înlocuind tiparele vechi cu unele moderne sau pregătind codul pentru o testare mai bună.
Povești din partea echipelor noastre
„Codex a înlocuit toate apelurile vechi „getUserById( )” cu noul nostru model de servicii și a deschis PR-ul.” A făcut în câteva minute ceea ce ar fi durat ore întregi.”
Împarte acest fișier în module separate, pe responsabilități, și generează teste pentru fiecare modul.
Convertește toate operațiunile de acces la baza de date bazate pe reapelare în async/await.
Codex te ajută să identifici și să rezolvi blocajele de performanță.
În timpul eforturilor de optimizare sau de îmbunătățire a fiabilității, inginerii trimit o solicitare către Codex să analizeze secvențe de cod lente sau cu consum mare de memorie, cum ar fi cicluri ineficiente, operațiuni redundante sau interogări costisitoare, și să sugereze alternative optimizate, ducând adesea la îmbunătățiri semnificative ale eficienței și fiabilității.
Codex este utilizat și pentru a asigura calitatea codului, prin identificarea modelelor riscante sau învechite care sunt încă activ utilizate. Echipele noastre se bazează pe acesta pentru a reduce datoria tehnică pe termen lung și pentru a preveni proactiv regresiile.
Povești din partea echipelor noastre
„Folosesc Codex pentru a identifica apeluri DB repetate și costisitoare.” Se descurcă excelent la identificarea căilor critice și la schițarea interogărilor grupate pe care le pot ajusta ulterior.”
Optimizează această buclă pentru eficiența memoriei și explică de ce versiunea ta este mai rapidă.
Identifică operațiunile costisitoare repetate din acest sistem de gestionare a cererilor și sugerează soluții de stocare în cache.
Sugerează o modalitate mai rapidă de a procesa în lot interogările DB în această funcție.
Codex îi ajută pe ingineri să scrie teste mai rapid, mai ales acolo unde acoperirea este slabă sau lipsește complet.
Când lucrează la remedierea unei erori sau la o refactorizare, inginerii îi solicită adesea lui Codex să sugereze teste care acoperă cazurile limită sau căile probabile de eșec. Pentru cod nou, poate genera teste unitare sau de integrare pe baza semnăturii funcției și a logicii înconjurătoare.
Codex este foarte util pentru a identifica condiții limită, cum ar fi date de intrare goale, lungimi maxime sau stări neobișnuite, dar valide, care sunt adesea omise în testele inițiale.
Povești din partea echipelor noastre
„Îi indic lui Codex modulele cu acoperire redusă înainte de culcare și, dimineața, găsesc PR-uri cu teste unitare gata de rulare.”
Scrie teste unitare pentru această funcție, inclusiv cazuri limită și scenarii de eroare.
Generează un test bazat pe proprietăți pentru acest utilitar de sortare.
Extinde acest fișier de test pentru a acoperi scenariile lipsă legate de intrări nule și stări nevalide.
Codex ajută echipele să avanseze mai repede prin accelerarea atât a începutului, cât și a finalului ciclului de dezvoltare.
Atunci când lansează o nouă funcție, inginerii o folosesc pentru a crea structura de bază, generând dosare, module și versiuni preliminare API pentru a obține rapid un cod funcțional, fără a fi nevoie să scrie manual fiecare linie de cod.
Pe măsură ce proiectele se apropie de lansare, Codex ajută la respectarea termenelor strânse prin gestionarea unor sarcini mai mici, dar esențiale, precum trierea erorilor, completarea lacunelor finale de implementare și generarea de scripturi de lansare, funcții hook de telemetrie sau fișiere de configurare.
Este folosit și pentru a transforma opiniile despre produse în codul inițial. Inginerii introduc adesea o cerere sau o specificație a utilizatorului, iar Codex generează o schiță preliminară pe care o pot consulta și perfecționa ulterior.
„Am fost toată ziua în ședințe și tot am îmbinat 4 PR-uri, deoarece Codex funcționa în fundal.”
Generează structura de bază pentru o nouă rută API pentru POST/events cu validare de bază și jurnalizare.
Generează o funcție hook de telemetrie pentru urmărirea succesului/eșecului noului flux de înscriere, folosind acest șablon [introdu un exemplu al codului tău de telemetrie].
Creează o implementare preliminară pe baza acestor specificații: [introdu specificațiile sau sugestiile despre produs].
Codex îi ajută pe inginerii noștri să rămână productivi atunci când programele lor sunt fragmentate și pline de întreruperi.
Este folosit pentru a înregistra lucrările neterminate, pentru a transforma notițele în prototipuri funcționale sau pentru a genera sarcini exploratorii care pot fi reluate ulterior. Acest lucru facilitează întreruperea și reluarea activității fără a pierde contextul, mai ales atunci când sunt de gardă sau au multe ședințe.
„Dacă observ o rezolvare rapidă, lansez o sarcină Codex în loc să schimb ramurile și îi revizuiesc PR-ul când am timp.”
Codex este util și pentru activități deschise, precum găsirea unor soluții alternative sau validarea deciziilor de proiectare. Poți face o solicitare pentru moduri diferite de a rezolva o problemă, explora modele nefamiliare sau testa ipotezele sub presiune. Acest lucru ajută la evidențierea compromisurilor, extinderea opțiunilor de proiectare și optimizarea alegerilor de implementare.
Este folosit și pentru a identifica erori conexe. Dacă există o problemă cunoscută sau o metodă învechită, Codex poate identifica tipare similare în alte părți ale codului, ușurând identificarea regresiilor sau finalizarea lucrărilor de ordonare.
„Codex mă ajută să rezolv problema pornirii de la zero: introduc specificațiile și documentația, iar acesta îmi generează structura codului sau îmi arată ce am uitat.”
Cum ar funcționa dacă sistemul ar fi bazat pe evenimente în loc de cerere/răspuns?
Găsește toate modulele care construiesc manual șiruri SQL în loc să folosească generatorul nostru de interogări.
Rescrie acest cod într-un stil mai funcțional, evitând mutațiile și efectele secundare.
Codex funcționează cel mai bine atunci când i se oferă structură, context și spațiu pentru iterații. Iată câteva dintre obiceiurile pe care echipele OpenAI le cultivă pentru a obține valoare constantă din Codex în activitatea de zi cu zi.
Pentru modificări ample, începe prin a-i solicita lui Codex un plan de implementare folosind modul Întreabă, care devine apoi datele de intrare pentru solicitările ulterioare atunci când treci la modul Cod. Acest flux în doi pași îl menține pe Codex ancorat și ajută la evitarea erorilor în rezultatele sale. Codex funcționează cel mai bine cu sarcini bine definite, a căror finalizare ți-ar lua ție sau unui coleg de echipă aproximativ o oră sau câteva sute de linii de cod pentru implementare. Pe măsură ce modelele se îmbunătățesc, te poți aștepta ca amploarea sarcinilor pe care le pot prelua să crească.
Configurarea unui script de pornire, a variabilelor de mediu și a accesului la internet reduce semnificativ rata de eroare a Codex. Pe măsură ce rulezi sarcini, caută erori de compilare care pot fi corectate în configurația mediului Codex. Acest lucru poate necesita câteva iterații, dar îmbunătățește semnificativ eficiența pe termen lung.
Codex răspunde mai bine atunci când solicitările reflectă modul în care ai descrie o modificare într-un PR sau o problemă. Acest lucru înseamnă să incluzi căi de fișiere, nume de componente, diferențe și fragmente din documentație atunci când sunt relevante. Formularea solicitărilor folosind tipare precum „Implementează acest lucru la fel cum este făcut în [modulul X]” îmbunătățește rezultatele.
Trimite rapid sarcini pentru a surprinde idei tangențiale, lucrări parțiale sau remedieri incidentale. Nu există presiunea de a scrie un PR complet dintr-o dată. Codex funcționează bine ca un spațiu intermediar la care poți reveni când te poți concentra din nou.
Menține un fișier AGENTS.md pentru a ajuta Codex să funcționeze mai eficient în depozitul tău de-a lungul solicitărilor. Aceste fișiere conțin, de obicei, convenții de denumire, logica de afaceri, particularități cunoscute sau dependențe pe care Codex nu le poate deduce doar din cod. Află mai multe despre structurarea fișierului tău AGENTS.md în documentație.
Funcția Best-of-N îți permite să generezi simultan mai multe răspunsuri pentru o singură sarcină, astfel încât să explorezi rapid mai multe soluții și să o alegi pe cea mai bună. Pentru sarcini mai complexe, poți analiza mai multe iterații și să combini părți din răspunsuri diferite pentru a obține un rezultat mai bun.
Codex se află încă în faza de previzualizare pentru cercetare, dar are deja un impact real asupra modului în care dezvoltăm, ajutându-ne să lucrăm mai repede, să scriem cod mai bun și să ne ocupăm de sarcini care, altfel, nu ar fi fost niciodată considerate prioritare.
Suntem entuziasmați de potențialul care ne așteaptă: pe măsură ce modelele noastre devin mai performante și Codex se integrează tot mai profund în fluxurile noastre de lucru, așteptăm cu nerăbdare să descoperim modalități și mai eficiente de a dezvolta programe cu ajutorul acestuia. Vom continua să împărtășim ceea ce descoperim pe parcurs.


