ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 166
Numărul 165 Numărul 164 Numărul 163 Numărul 162 Numărul 161 Numărul 160 Numărul 159 Numărul 158 Numărul 157 Numărul 156 Numărul 155 Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 166
Abonamente

AI Code Reviewer

Darius Dima
Software System Engineer @ Centrul de Inginerie Bosch Cluj



Radu-Ilie Chirilă
Software Engineer @ Centrul de Inginerie Bosch Cluj



PROGRAMARE

Integrarea Inteligenței Artificiale (IA) în programare, popularizată masiv de unelte precum GitHub Copilot, a eficientizat generarea de cod. Acest "easy button" integrat direct în mediul de lucru al programatorilor a permis o creștere semnificativă a productivității, dar a adus și provocări, în special în ceea ce privește calitatea și securitatea codului generat. Aici intervine o nouă clasă de agenți IA, specializați nu în a scrie cod, ci în a-l analiza critic înainte de a ajunge în producție.

Comportamentul agentic atașat unui LLM (Large Language Model), deși pare desprins din magie, poate introduce riscuri dacă nu este gestionat corect.

Abordarea noastră este puțin diferită. În loc să creăm un agent autonom care poate citi cod și executa comenzi pe cont propriu, noi am încorporat comportamentul unui LLM într-un sistem controlat. Nu permitem IA-ului să "citească" sau să "scrie" liber; în schimb, întregul proces este orchestrat prin joburi Jenkins.

Astfel reușim să păstrăm controlul contextului și să limităm consumul de resurse la strictul necesar pentru a analiza doar ce e relevant pentru fiecare pull request (PR). În plus, folosim un prompt custom, care forțează LLM-ul să adere la un set strict de reguli, eliminând cât mai mult riscul de a devia de la aceste reguli.

Fig. 1: Workflow code reviewer

Arhitectura

Arhitectura sistemului este una robustă și controlată, având Jenkins ca orchestrator central. Fluxul este inițiat de un eveniment de PR (deschidere sau actualizare), care declanșează un job Jenkins. Acesta oferă LLM-ului acces la codul relevant, în mod controlat prin diferențele de cod (diffs) și contextul său, despărțite ulterior în segmente denumite drept "chunks" (vezi Fig. 2).

Acest sistem funcționează astfel:

  1. Jobul Jenkins este inițiat la actualizarea unui PR.

  2. Jobul preia contextul necesar din respectivul PR și îl sparge în multiple chunkuri.

  3. Se creează un AI Agent (legat la LLM Farm) echipat cu unelte de postare a comentariilor în PR (atât overview, cât și inline).

  4. Chunkurile, împreună cu documentația relevantă PR-ului, sunt trimise către agentul AI, cu scopul de a le procesa pe rând și de a crea un review output.

  5. Outputul generat este postat folosind API-ul specific mediului de hosting al repository-ului.

În Fig. 2 este descris în mod vizual designul achizițiilor de date:

Fig. 2: Code reviewer design

Setup local minimal

  1. Pregătirea Proiectului: se instalează o versiune Python 3.10+ și toate dependențele specifice proiectului: librăriile specifice open-ai, llama-index, sentence-transformers, langgraph, librării necesare transmiterii de requesturi http/https.

  2. Se obține acces la proiectul țintă și opțional se configurează setările de proxy necesare.

  3. Se obține acces la un LLM farm sau se configurează execuția printr-un LLM local.

  4. Configurarea Credențialelor: se creează un fișier de configurare local pentru a stoca variabilele de sistem necesare, incluzând chei API, tokenuri de acces pentru API-ul platformei de hosting a proiectului, configurația pentru interfațarea cu LLM Farm.

  5. (Opțional) Se atașează materialele PDF relevante pentru procesul de review.

  6. (Opțional) Se creează indexul pentru un sistem RAG pentru materialele PDF atașate.

  7. Execuția locală: Deoarece conexiunea la LLM se face la nivel de cod, singurul pas ce rămâne pentru o execuție locală a pipeline-ului este rularea scriptului principal.

Notă: principala diferență între execuția locală și cea a unui job Jenkins este nivelul de automatizare. Rularea automată a review-ului aduce un plus de confort și preia din efortul cognitiv al developerului.

Exemplul de bază

Fig. 3: Exemplu de bază

ROI

Implementarea unui astfel de instrument într-un pipeline automat aduce valoare din prisma mai multor factori.

  1. Accelerarea ciclului de dezvoltare. Automatizarea validărilor de bază reduce timpul petrecut în etapa de review. Developerii se pot concentra pe logică și arhitectură, în favoarea problemelor inerente de cod (ex.: aspecte de calitate, standarde, probleme ușor de văzut).

  2. Reducerea Costului de Rework. Early bug detection prin "cunoștințele" indexate de LLM-urile specializate poate preveni necesitatea unei rescrieri viitoare a unui feature.

  3. Un Codebase mai curat și robust. Prin augmentarea toolurilor de linting, code quality etc. cu un AI Reviewer (care vorbește aceeași limbă cu developerul) menținerea unui codebase curat și uniform pe termen lung devine mult mai ușoară.

  4. Timp redus de livrare. Prin eficientizarea procesului de review și integrare, noile funcționalități ajung integrate mai rapid, oferind un avantaj în timeline-ul de livrare.

  5. Moral mai bun. Nimănui nu-i place să fie "polițistul de serviciu" sau să primească comentarii pentru un spațiu lipsă. Automatizarea acestor sarcini repetitive elimină o parte din frustrarea procesului de review și lasă mai mult loc pentru inovație.

Concluzie

Este esențial să înțelegem că scopul acestor unelte IA nu ar trebui să fie înlocuirea factorului uman în procesul de development. Indiferent de mărimea ferestrei de context al unui LLM, niciun model nu poate întrece intuiția și puterea de înțelegere a oamenilor.

Rolul unui AI Reviewer este cel al unui asistent neobosit pentru sarcini repetitive și obositoare. Într-un context de business este cu atât mai important să lăsăm rolul de șofer oamenilor, pentru a evita introducerea oricărui nivel de "technical debt" lăsând componenta AI în rolul de copilot și ajutor de drum.

Conferință TSM

NUMĂRUL 165 - CyberSecurity & AI

Sponsori

  • BT Code Crafters
  • Betfair
  • MHP
  • .msg systems
  • P3 group
  • Cognizant Softvision
  • BMW TechWorks Romania

INTERVIURI

Darius Dima a mai scris