Lasciare che un LLM Revisioni le Nostre Pull Request (Così Non Devi Farlo Tu)

created: venerdì, ago 8, 2025

Adoriamo l’automazione. La usiamo per alimentare la nostra infrastruttura, per ridurre i carichi di lavoro a zero e—sempre più spesso—per diminuire l’attenzione umana necessaria a rilasciare codice di alta qualità. Un ambito che ancora ci sembrava ostinatamente manuale erano le revisioni delle pull request. Tra Cursor come nostro IDE, ChatGPT/Codex per il prototipo e gemini-cli per controlli rapidi, i nostri workflow locali erano veloci—ma la CI aspettava ancora un umano.

Così ci siamo posti una domanda semplice: potevamo lasciare che un modello di linguaggio ampio leggesse il diff, individuasse problemi e commentasse direttamente sulla PR?

Si è scoperto: sì. Sono bastate poche righe di colla con GitHub Actions per ottenere revisioni utili e strutturate su ogni pull request.


The goal

Non volevamo sostituire gli umani. Volevamo un primo passaggio che:

Se un cambiamento va bene, vogliamo che il bot lo dica semplicemente e si faccia da parte.


The tools in our stack


The workflow, end to end

Ecco l’Action completa che stiamo eseguendo. Inseriscila in .github/workflows/gemini-pr.yml:

name: gemini-pr
on:
  workflow_dispatch:
  pull_request:
jobs:
  build:
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: 'true'
        fetch-depth: 0
    - uses: actions-rust-lang/setup-rust-toolchain@v1
      with:
        components: rustfmt, clippy
        cache: false
    - uses: actions/setup-node@v4
      with:
        node-version: 20
    - name: install gemini
      run: |
        npm install -g @google/gemini-cli
    - name: gemini
      run: |
        echo "merging into ${{ github.base_ref }}"
        git diff origin/${{ github.base_ref }} > pr.diff
        echo $PROMPT | gemini > review.md
        cat review.md >> $GITHUB_STEP_SUMMARY
        gh pr comment ${{ github.event.pull_request.number }} --body-file review.md
      env:
        GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        PROMPT: >
          please review the changes of @pr.diff (this pull request) and suggest improvements or provide insights into potential issues. 
          do not document or comment on existing changes, if everything looks good, just say so.
          can you categorise the changes and improvesments into low, medium and high priority?
          Whenever you find an issue, please always provide an file and line number as reference information. if multiple files are affected, please provide a list of files and line numbers.
          provide the output in markdown format and do not include any other text.

What each part does


The prompt that makes it useful

Gli output di LLM sono validi quanto le istruzioni che ricevono. Il nostro mantiene le cose pratiche:

Abbiamo iterato un po’ per arrivare a questo. Le modifiche più incisive sono state: insistere su riferimenti file/linea e vietare testi extra.


What the review looks like

Github Action Comment showing various errors

Su una PR tipica vediamo sezioni come:

Se tutto va bene, otteniamo una frase singola: “Looks good.” Perfetto—è proprio quello che vogliamo.


Gotchas and practical notes


Why this matters (beyond convenience)

Le revisioni automatiche rendono gli umani più selettivi nell’attenzione. Passiamo meno tempo su “rinomina questa variabile” e più su architettura, flussi di dati e confini di sicurezza. Questo significa:

È anche sorprendentemente bravo a garantire la coerenza. Un LLM non dimentica il pattern di gestione errori concordato tra servizi o la nostra struttura log preferita; applica quei controlli uniformemente su ogni PR.


Variations you might try

Questo schema funziona con quasi ogni modello o CLI. Alcune estensioni facili:


Results so far

Niente di tutto ciò sostituisce un umano che approva un merge. È un filtro leggero che si ripaga dal primo giorno.