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 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:
Jobul Jenkins este inițiat la actualizarea unui PR.
Jobul preia contextul necesar din respectivul PR și îl sparge în multiple chunkuri.
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).
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.
În Fig. 2 este descris în mod vizual designul achizițiilor de date:
Fig. 2: Code reviewer design
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.
Se obține acces la proiectul țintă și opțional se configurează setările de proxy necesare.
Se obține acces la un LLM farm sau se configurează execuția printr-un LLM local.
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.
(Opțional) Se atașează materialele PDF relevante pentru procesul de review.
(Opțional) Se creează indexul pentru un sistem RAG pentru materialele PDF atașate.
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.
Fig. 3: Exemplu de bază
Implementarea unui astfel de instrument într-un pipeline automat aduce valoare din prisma mai multor factori.
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).
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.
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ă.
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.
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.