AI per lo sviluppatore (Parte 1, IDE)

  • E se riducessimo il tempo di scrittura di codice cattivo?
  • Sì, e facciamo i ritorni a capo a forma di gatto!

L’istruzione attuale non supporta ancora RAG e la semantica.

IDE

E se vi piacesse questa funzionalità: generare una descrizione del codice su cosa fa?

Se lavorate in PyCharm/IDEA, potrebbe essere disponibile il plugin Devoxx, in grado di interagire con i modelli linguistici di grandi dimensioni (LLM) per revisioni del codice e qualsiasi altra richiesta.

Di seguito viene esaminato il caso di integrazione del plugin con il servizio API di LM Server.

Funzionalità

  • Supporto per modelli linguistici locali e cloud: Anthropic, Groq, Ollama, OpenAI, …
  • Suggerimenti per frammenti di codice selezionati
  • Revisione del codice
  • Generazione di descrizioni su cosa fa il codice

Piano di installazione

  • Installare il plugin (vedi sotto)
  • Assicurarsi che siano attivi Ollama, LMStudio o GPT4All
  • Aggiornare i prompt nelle impostazioni
  • (Opzionale): Aggiungere chiavi API per i fornitori cloud di LLM
  • Iniziare a usare il plugin

Installare il plugin dal marketplace. Se per qualche motivo il plugin non può essere installato (a causa di regolamenti di controllo delle esportazioni, open source sì):

…potete copiare il plugin da un altro computer o dal GitHub. Attenzione alle seguenti cartelle e file (esempio su Ubuntu):

# nella cartella home
$ find . -iname 'devoxx*'
./.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
./.cache/JetBrains/PyCharmCE2025.1/DevoxxGenie
./.cache/JetBrains/PyCharmCE2025.1/plugins/DevoxxGenie.zip
./.local/share/JetBrains/PyCharmCE2025.1/DevoxxGenie
```- Estrae il file DevoxxGenie.zip nella cartella `~/.local/share/JetBrains/PyCharmCE2025.1` o nell'IDE, a seconda del caso. Nel mio caso, la cartella PyCharmCExxx doveva essere creata manualmente, poiché non esisteva.
- Pubblica il file di configurazione `~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml`.
- Opzionale. Potrebbe essere necessario aggiungere il plugin e il suo archivio al cache.

Ora avvia l'IDE e dovresti vedere il plugin con le impostazioni preconfigurate (sull'anteprima "Installed"):

![L'immagine mostra la finestra delle impostazioni dell'IDE, che visualizza i plugin installati, inclusi i pacchetti di linguaggio per il cinese, il giapponese e il coreano. (Didascalia generata dall'AI)|690x367](upload://zhRPNYpgtdcMU1upNbivGsosnJG.png)

## Configurazione

1. Dopo l'installazione del plugin, vai alle impostazioni del programma (tramite il menu File) per configurare i parametri dell'LLM, come temperatura, numero massimo di token di output, tentativi ripetuti e timeout. Se lo desideri, puoi anche aggiungere chiavi API cloud LLM per usarle.

   > DevOps: puoi preparare un servizio API che funzioni come un server HTTP non protetto. Non utilizzarlo remotamente se stai lavorando con dati sensibili, poiché il traffico può essere intercettato e i dati aperti potrebbero essere sfruttati da malintenzionati.

   Si dice che per determinare correttamente la finestra di contesto in LM Studio sia necessario usare l'URL http://localhost:1234/api/v0, ma questo sembra errato. La finestra di contesto del modello deve essere aumentata durante il caricamento (4096 → 8192).

   ![L'immagine mostra la finestra delle impostazioni di DevoxxGenie, dove l'utente configura gli URL per diversi provider locali LLM e OpenAI. (Didascalia generata dall'AI)|599x500](upload://a1TZn4KG3kqBYd9sq6XNl2XWXa.png)

   Nella scheda Prompts puoi configurare il prompt di sistema e i prompt personalizzati.

   Il prompt di sistema è una richiesta inviata insieme alla richiesta utente e definisce l'ambito delle attività, i limiti di ricerca e il formato delle informazioni fornite. È un punto cruciale.

   Rimuovi dal prompt di sistema le righe seguenti:

The Devoxx Genie is open source and available at GitHub - devoxx/DevoxxGenieIDEAPlugin: DevoxxGenie is a plugin for IntelliJ IDEA that uses local LLM's (Ollama, LMStudio, GPT4All, Jan and Llama.cpp) and Cloud based LLMs to help review, test, explain your project code..
You can follow us on Bluesky @ @devoxxgenie.bsky.social on Bluesky.


Tutte le modelli linguistici comprendono la formattazione Markdown, quindi puoi creare prompt strutturati con elenchi, sottopunti e blocchi di codice.

> DevOps: i prompt predefiniti (richieste con vincoli) sono definiti nel file
> 
> ``` 
> ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
> ```
> 
> Le modelli hanno la capacità di tradurre richieste in russo in inglese. Una traduzione imprecisa dei termini può influire notevolmente sulla qualità della risposta, così come una domanda imprecisa. Confronta le richieste: "trova la pagina con l'istruzione" e "fornisci un link alla pagina". In quale caso il bot fornirà il link? Chiedi esattamente ciò che aspetti (esattamente come si farebbe a una persona).

<br>

2. Nella scheda Web search c'è un'opzione per l'interazione del modello con internet (attiva di default). Se hai una chiave personale di Google Web Search, puoi usarla.

3. Dettagli sulla configurazione RAG verranno aggiunti in seguito:

![L'immagine mostra le impostazioni di DevoxxGenie, che includono parametri per lo scansione e la copia dei progetti, oltre alle impostazioni di Retrieval-augmented Generation (RAG) con l'uso di ChromaDB. (Didascalia generata dall'AI)|675x500](upload://gYED7Xn3c0twmTBEwwXsRF0f3pK.png)

## Uso del plugin

1. Ora, apri il file sorgente e seleziona un frammento di codice, oppure fai clic con il tasto destro sul file del progetto per aggiungerlo al contesto della finestra.

Premi il pulsante <kbd>Devoxx</kbd>:

![Schermata del computerViene visualizzata una finestra del terminale con il codice shell, insieme alle cartelle aperte contenenti i file del progetto. (Didascalia dell'immagine generata dall'AI)|600x305](upload://2aBOJ4FADHQqiRrCP6OETygGNFT.png)

2. Selezionate dal menu a discesa il modello appropriato. Purtroppo, alcuni modelli nell'elenco potrebbero non essere adatti all'uso, ad esempio quelli embedding. Il filtro dei modelli non è personalizzabile.

![Sullo schermo è visualizzato un elenco di diverse modelli di machine learning, inclusi modelli basati su GPT e Qwen, nonché impostazioni per il funzionamento con RAG e interfaccia web. (Didascalia dell'immagine generata dall'AI)|507x500](upload://wgYHxRY5QimRgxam4SGxLL60KSd.png)

3. Dopo aver definito il contesto dell'invito, potete iniziare a porre domande o utilizzare i comandi predefiniti: /test, /review, /explain, /help.

4. Non appena ricevete la risposta dalla LLM selezionata, utilizzate i pulsanti sopra il codice per copiare gli esempi di codice negli appunti o incollarli nel vostro file. Oppure potete ottenere un testo pronto per la descrizione del funzionamento dello script nel formato Markdown (in inglese, ma potete specificare nel prompt quale lingua utilizzare nella risposta).

## Esempio di output della descrizione

Analisi dello script `/explain` con il modello `qwen2.5-coder-14b-instruct`:

- Numero di righe di codice: 500

- Contesto della finestra del modello: 8192 (aumentato dal valore predefinito di 4096)

- Token:

```json
"usage": {
 "prompt_tokens": 6298,
 "completion_tokens": 620,
 "total_tokens": 6918
}
  • Tempo di analisi sulla scheda RTX 5060Ti: 10 secondi

  • Qualità della risposta: più che soddisfacente nel mio caso. Il modello è riuscito a creare una descrizione strutturata del codice, basandosi sul codice e sui commenti, rendendo così il codice comprensibile.

Spoiler

Certamente! Analizziamo lo script in termini più semplici per aiutare uno sviluppatore junior a comprendere la sua funzionalità.

Panoramica

Questo script è progettato per elaborare file PDF e immagini (JPG/JPEG) eseguendo l’OCR (Optical Character Recognition) tramite Tesseract. Verifica se il PDF contiene testo, lo converte in formati TIFF e PNG se necessario, e registra tutte le azioni per un report dettagliato.

Componenti chiave

  1. Definizioni di colore:

    • GREEN e NC vengono utilizzati per l’output colorato nel terminale.
  2. Funzione di aiuto (show_help):

    • Fornisce istruzioni per l’uso, descrizione, opzioni e esempi su come eseguire lo script.
  3. Analisi degli argomenti:

    • Lo script utilizza un ciclo while con dichiarazioni case per analizzare gli argomenti della riga di comando.
    • Le opzioni includono la configurazione del DPI, del tipo di compressione, della lingua OCR e se mantenere o meno i file TIFF/PNG/TXT dopo l’elaborazione.
  4. Validazione:

    • Verifica che il DPI fornito sia all’interno di un intervallo valido (72-1200).
    • Assicura che l’algoritmo di compressione sia uno dei tipi supportati (group4, lzw, zip).
  5. Configurazione del logging:

    • Inizializza un file di log per registrare tutte le azioni e gli output.
  6. Ricerca dei file:

    • Utilizza find per individuare i file PDF e JPG/JPEG nella directory specificata o nella directory corrente se non viene fornita alcuna.
  7. Elaborazione dei file PDF:

    • Per ogni PDF, verifica se contiene già testo utilizzando pdftotext.
    • Se il testo è già presente, registra il file come PDF contenente testo.
    • Se non è presente testo, converte il PDF in formati TIFF e PNG, quindi esegue l’OCR sul TIFF.
  8. Elaborazione dei file immagine:

    • Per ogni JPG/JPEG, esegue direttamente l’OCR tramite Tesseract.
  9. Calcolo delle statistiche:

    • Calcola varie statistiche, come il numero totale di caratteri riconosciuti, il massimo numero di caratteri in un singolo file, la distribuzione del testo in base al numero di caratteri, ecc.
    • Calcola la percentuale di PDF scansionati e la velocità media di riconoscimento.
  10. Generazione del riassunto:

    • Genera un riassunto dettagliato che include tutti i file elaborati, le statistiche e le opzioni utilizzate.
    • Registra questo riassunto sia nel terminale che nel file di log.Questo comando imposta il DPI a 600, utilizza la compressione LZW per i file TIFF, specifica le lingue russo e inglese per l’OCR e non conserva i file TIFF/PNG/TXT dopo il processo.

Conclusione

Lo script è uno strumento completo per il processamento batch di PDF e immagini con capacità OCR. Fornisce log e statistiche dettagliate, rendendolo utile per l’automazione e l’analisi in compiti di elaborazione documenti.

Conclusione

Un’ottima utility sia per la ricerca di soluzioni ottimali (ad esempio, scrittura di funzioni o documentazione, visualizzazione e logging), sia per la creazione di documentazione.

Schema di funzionamento

La completa architettura in fase di sviluppo appare così. Nell’articolo successivo spiegherò come utilizzare il Code Review AI in GitLab prima della richiesta di merge (MR).

graph LR
    classDef pclass fill:#f5f5dc
    classDef wclass fill:#f96
    classDef pmclass fill:#4f7
    classDef yclass fill:#ff9
    classDef oclass fill:#ffbf00

    B(IDEA) --|Code pre-Review| B1(AI Devoxx):::pclass
    B1 -- C(Revisione):::wclass
    C -- D{Auto-verifica}:::oclass
    B --|Il tuo codice è perfetto| F
    F -- H2{Code Review}:::oclass
    H2 -.-|Da rivedere| B1
    D --|Verificato| F(MR):::pmclass
    H2 -- E(Merged)

Link

Risultati dei test

Rivista del codice di 102 righe di script Python. Alcune modelli hanno avuto un secondo tentativo di esecuzione per escludere il tempo di caricamento del modello in memoria e il “warming up”. La colonna “Recom” indica il numero di suggerimenti forniti dal modello. Il segno più (+) indica un’analisi dettagliata. “Code = none” significa che non viene fornito un esempio di codice corretto.

Il tempo di analisi nelle colonne “1st” e “2nd” è espresso in secondi.

Arch VL Model Params Quant GB Recom Code 1st 2nd
1 qwen3 deepseek-r1-0528-qwen3 8b q8_0 8.71 3 - 126
2 llama deepseek-r1-distill-llama 8b q4_0 5.28 6 - 34 s
3 qwen3 deepseek-r1-0528-qwen3 8b q4_k_m 5.03 3 none 85
4 gemma3 gemma-3 12b q6_k 9.66 10+ - 84
5 gemma3 :eye: gemma-3 4b q8_k_xl 6.84 11+ - 49
6 gemma3n gemma-3n 6.9b q8_0 7.35 2 none 20
7 gemma3 gemma-3 12b q4_k_m 7.30 10++ - 66
8 gemma3 :eye: gemma-3 4b q8_0 4.98 4 - 41
9 llama llama-3-gpt4o-ru 8b q4_k_m 4.92 8 none 25
10 llama llama 3.2 8x3b q3_k_s 8.25 6 - 24
11 llama llama 3.1 8b q6_k 6.60 8 - 25
12 llama llama 3.1 8b q8_0 8.54 8 - 35
13 phi3 phi-4 15b q4_k_m 9.05 12 - 47 34
14 phi3 phi-4-reasoning 15b q4_k_m 9.05 13 - 66 14
15 llama mistral-nemo-2407 12b q6_k 10.06 5 - 40 25
16 llama oh-dcft-v3.1-gemini-1.5-flash 8b 6_k 6.60 5 - 29 27
17 qwen3 qwen3-14b-gemini 14b q4_k_m 9.00 13+ - 127 76
18 qwen3 qwen3-8b 8b q8_0 8.71 14+ - 63 43
19 qwen2 qwen2.5-coder 14b q4_k_m 8.99 8 - 47 36
20 qwen2vl qwen2.5-vl 7b q8_0 8.10 8+4 - 41 36
21 qwen2vl spaceQwen2.5-vl 3b f16 6.18 3 - 30

Il codice finale non è stato testato per funzionalità. È stata data un’valutazione soggettiva della profondità dell’analisi. Le modelli più interessanti sono il n. 5, 7, 14 e 18, e in misura minore il n. 20. Con queste modelli è stata effettuata la sintesi di un argomento scelto dal forum, e i risultati migliori sono stati ottenuti con Phi 4. Gemma 3 e Qwen 3 risultano anche buoni. Inoltre, Gemma 3 ha la funzione di riconoscimento immagini, mentre Qwen spesso passa all’inglese.

Il test è stato eseguito su RTX 5060Ti 16GB (15,5, modelli più grandi di 9,5GB non possono essere caricati). Qwen spesso passa all’inglese, quindi è difficile da usare per la sintesi.

Server: https://lmstudio.ai

La lunghezza del contesto è stata aumentata da 4096 a 8192.

Per la revisione del codice e il chatbot:

Per la revisione, il chatbot e la sintesi:

Per il chatbot e la sintesi:

Per il riconoscimento delle immagini: