Unità 1 / 12

Intelligenza artificiale per team software: modello di lavoro e limiti

Guadagni:

  • Capacità di spiegare come funziona un assistente di codifica come modello linguistico e i concetti di token, finestra di contesto, allucinazione
  • Capacità di distinguere le attività software in cui l'intelligenza artificiale è forte e debole con una mappa mentale
  • Capacità di applicare il ciclo di lavoro base di proporre-produrre-verificare ai propri compiti

La giornata di uno sviluppatore di software raramente viene trascorsa a "scrivere codice da zero". Tempo reale; Leggere il codice scritto da qualcun altro, provare a riprodurre un bug, scansionare il log (righe di log prodotte dall'applicazione durante l'esecuzione), scrivere test, scrivere una PR (richiesta pull - una richiesta di unione in cui una modifica del codice viene inviata per la revisione del team) spiegazione e aggiornamento della documentazione. L’intelligenza artificiale (AI) è un moltiplicatore di velocità che può toccare quasi tutti questi lavori invisibili. Ma la prima condizione per utilizzarlo in sicurezza è capire correttamente cosa è e cosa non è.

In questa unità, spiegheremo innanzitutto la tecnologia alla base di un assistente di codifica in un linguaggio semplice; poi creiamo una mappa mentale dei punti di forza e di debolezza del modello; Infine, stabiliamo la disciplina lavorativa di base che utilizzeremo durante l'intero modulo: proporre, produrre, verificare. Questi tre passaggi costituiscono la spina dorsale delle prossime undici unità.

Nota: questo modulo è una formazione generale. Nei software critici per la sicurezza (elaborazione dei pagamenti, assistenza sanitaria, autenticazione, infrastrutture critiche) l'output dell'intelligenza artificiale non sostituisce la revisione e l'approvazione da parte di un ingegnere qualificato. L'intelligenza artificiale è un assistente; Il firmatario è l'ingegnere.

Cosa fa realmente un assistente di codifica?

La maggior parte degli assistenti di codifica si basa su un modello linguistico di grandi dimensioni (LLM, un'intelligenza artificiale addestrata su enormi quantità di testo e codice che prevede il successivo "pezzo" più probabile). Il modello non "capisce" il codice come un essere umano; Genera la continuazione più probabile del contesto che gli fornisci, in base ai modelli che apprende da un enorme pool di esempi. Questo meccanismo apparentemente semplice produce risultati sorprendentemente efficaci nella pratica, perché la maggior parte del software è costituita da schemi ripetuti: una richiesta HTTP, un ciclo, un controllo nullo, un modello di test.

Tre termini sono fondamentali qui. Il token è l'unità più piccola che il modello elabora dividendo il testo; Sono all'incirca poche lettere o parte di una parola. La finestra di contesto è la quantità di token che il modello può "vedere" contemporaneamente; Il codice, il messaggio di errore e le istruzioni devono rientrare in questa finestra. Un prompt è l'insieme delle istruzioni e del contesto forniti al modello. La qualità dell'output che ottieni dipende direttamente da questi due: migliore è il contesto e le istruzioni più chiare che fornisci al modello, migliore sarà il risultato che otterrai. Un cattivo input produce un cattivo output, anche se si tratta di un modello intelligente: la classica regola del software “garbage in, garbage out” si applica anche all’intelligenza artificiale.

Mappa dei punti di forza e di debolezza

Per indirizzare l’intelligenza artificiale verso i lavori giusti, è necessario sapere dove brilla e dove inciampa. Memorizzare questa mappa ti porterà a chiederti ad ogni missione successiva: "Devo affidare questo lavoro all'IA o farlo da solo?" Ti consente di rispondere alla domanda in pochi secondi.

I suoi punti di forza sono: generare codice standard, tradurre da una lingua a un'altra, scrivere un'espressione regolare (regex), descrivere una funzione, creare uno scheletro di test, interpretare un messaggio di errore, redigere documentazione, suggerire nomi di variabili/funzioni e refactoring minori (migliorare la struttura del codice senza modificarne il comportamento).

Punti deboli: conoscere le regole aziendali specifiche della propria azienda, ricordare l'intera base di codice, eseguire e verificare effettivamente il codice, conoscere con certezza le ultime versioni della libreria, rilevare le vulnerabilità della sicurezza con una garanzia al cento per cento. La cosa più pericolosa è l'allucinazione: il modello inventa una funzione, una libreria o un'API (interfaccia che consente lo scambio di dati tra applicazioni) inesistente in un linguaggio molto convincente. Questo rischio può effettivamente essere rivolto a tuo vantaggio, poiché il codice, a differenza del testo semplice, può essere testato per vedere se "funziona" - basta non saltare la fase di verifica.

Tipo di missione

Il ruolo dell'intelligenza artificiale

il ruolo dell'uomo

Produrre boilerplate/scheletro

produce bozza

Adattamenti, recensioni

Descrizione del codice

Fornisce un breve riepilogo

Verifica la parte critica nel codice

prove di scrittura

Il caso suggerisce

Conferma la copertura e l'accuratezza

Logica critica per la sicurezza

idea utile

La decisione e la responsabilità spettano interamente agli esseri umani.

Utilizzo dell'API/libreria

Genera campione

Verifica l'esistenza e la versione

decisione architettonica

Tipi di opzioni

Seleziona e difende conoscendo il contesto

Passo dopo passo: ciclo di lavoro di base

  1. Chiarire il compito. Se non puoi scrivere quello che vuoi in una frase, non può farlo nemmeno il modello. Quanto prima l’incertezza penetra negli input, tanto maggiore cresce nell’output.
  2. Fornisci contesto. Aggiungere al prompt il codice pertinente, il messaggio di errore completo, la versione del linguaggio/framework e i vincoli. Non dire "risolvi questo problema", dì "Python 3.11, FastAPI 0.110; questa funzione restituisce un errore 500, esplode quando il corpo della richiesta è vuoto".
  3. Ruolo e formato dell'imposizione. Un framework come "Sei uno sviluppatore Go senior; fornisci solo il codice e una motivazione di due frasi" focalizza l'output.
  4. Richiedi piccolo. Suddividilo in passaggi anziché in un'unica richiesta gigante; Verificare ogni passaggio separatamente. I cambiamenti più importanti sono rischiosi perché sono difficili da verificare e tendono a nascondere errori.
  5. Verificare. Eseguilo, testalo, leggilo visivamente. Il codice AI non verificato è uno "schizzo", non una "soluzione". Questo è il passaggio più non negoziabile del ciclo.

Tre mini custodie

Caso 1 — Il risparmio di tempo è reale ma modesto. Quando un team ha scheletrato nuovi endpoint CRUD (Create-Read-Update-Delete) con l'intelligenza artificiale, il tempo necessario per la prima bozza è sceso da circa 40 minuti a 8 minuti. Tuttavia, con la revisione e i test, il tempo totale è stato di 25 minuti; quindi il guadagno reale va dal 40 al 25, circa il 38%. Questo tasso, misurato invece dell’aspettativa “abbiamo accelerato 10 volte”, è un guadagno sostenibile.

Caso 2 – L’allucinazione è costosa. Uno sviluppatore ha utilizzato la chiamata request.get_json() suggerita dall'intelligenza artificiale senza convalida; Non esisteva un metodo del genere (precisamente Response.json()). 20 minuti sono stati persi quando il codice non è stato compilato. Un semplice "esiste davvero questo metodo?" la verifica azzererebbe la perdita.

Caso 3 – Un buon contesto raddoppia l’output. Per lo stesso bug, uno sviluppatore ha semplicemente scritto "Ho ricevuto un errore" e l'altro ha aggiunto l'analisi dello stack completa, la versione e l'esempio di input. Quest'ultimo ha ottenuto la soluzione corretta al primo tentativo; Il primo ha trascorso tre turni. La differenza non era nel modello, ma nell'input.

Quattro modelli copiabili

Un prompt di avvio potente e generico:

Ruolo: sei uno sviluppatore esperto in {{lingua}}. Compito: {{what_want}}Contesto:- Framework/versione: {{framework_and_version}}- Vincoli: {{regole di performance, stile, dipendenza}}Regole:- Non utilizzare librerie/funzioni inesistenti; Se non sei sicuro, contrassegnalo come "verifica". - Per prima cosa, fornisci un breve piano, poi il codice, quindi 2 frasi di giustificazione. - Produrre codice verificabile e funzionante.

Per filtrare nuovamente l'incertezza nel modello:

Prima di risolvere l'attività seguente, elenca ALMENO 3 punti che ritieni mancanti o poco chiari come domande. NON scrivere il codice prima di rispondere.Attività: {{task}}

Per eseguire l'autocontrollo dell'output:

Hai prodotto il seguente codice. Ora cambia il tuo ruolo e critica questo codice: - Elenca 3 casi (casi limite) che potrebbero non funzionare. - Ci sono API/funzioni che avresti potuto inventare? Mark.- Fornisci la versione corretta.Codice:{{code}}

Per scomporre una decisione in opzioni:

Suggerisci 2-3 approcci risolutivi per {{problem}}. Per ciascuno: breve descrizione, più/meno, quando scegliere. Riportalo in forma tabellare. NON scegliere per me; basta chiarire l'opzione.

Prompt debole / Prompt forte

Debole: "Correggi il bug in questo codice." (Quale errore? Quale lingua? Qual è il comportamento previsto?)
Forte: "Python 3.11 / FastAPI 0.110. Il seguente endpoint restituisce 500 con KeyError quando il corpo della richiesta diventa vuoto; voglio che restituisca 400 e un messaggio significativo sul corpo vuoto. Prima spiega il motivo, quindi fornisci la funzione corretta, quindi scrivi un test per questo scenario. [codice]"

Versione potente; Fornisce la lingua, la versione, l'errore effettivo, il comportamento previsto e il formato di output. Il modello non deve più prevedere.

Errori comuni

  • Fidarsi senza verifica. L'errore più comune e più costoso. Non dire "risolto" finché il codice non è stato compilato e testato.
  • Fare domande senza contesto. La risposta senza versione, testo di errore e restrizioni è generica e spesso sbagliata.
  • Una richiesta enorme. Non poter richiedere e revisionare una produzione di 300 linee in una sola volta rende invisibili gli errori.
  • Confondendo la fiducia in se stessi della modella come prova. L’intelligenza artificiale può dire con sicurezza qualcosa di sbagliato; Il tono non è un indicatore di precisione.
  • Incollando in modo casuale il segreto dell'azienda. Le chiavi private, i dati dei clienti o il codice sorgente privato non devono essere inseriti in strumenti non approvati (approfondiremo questo argomento nell'unità 10).
Suggerimento: tratta ogni output dell'IA come "questa è una bozza". Questa singola abitudine mentale elimina la maggior parte dei rischi che vedrai nel corso del modulo.

In sintesi

Un assistente di codifica è un modello linguistico che prevede il prossimo frammento più probabile; Non capisce il codice, produce modelli. Ecco perché è forte nei lavori ripetitivi e stereotipati; Dovrebbe essere utilizzato con cautela per lavori che richiedono una verifica specifica per il proprio contesto. Il rischio più grande è l'allucinazione e l'unico antidoto è la verifica. La disciplina che seguiremo durante l'intero modulo è chiara: chiarire il compito, fornire il contesto, chiedere piccole cose, convalidare ogni risultato finale.

Compito dell'applicazione

Annota tre attività software che hai svolto nell'ultima settimana (ad esempio una correzione di bug, un test, un aggiornamento README). Guarda la “mappa dei punti di forza e di debolezza” per ciascuno e descrivi in ​​una frase quale sarebbe il tuo ruolo e quello dell’IA se tu avessi l’IA a fare questo. Quindi assegna uno di questi compiti all'IA con il modello "prompt di avvio" sopra ed esegui e verifica l'output; Nota quanti minuti hai risparmiato e quanti errori hai dovuto correggere.

lista di controllo

  • [] Mi sono reso conto che LLM produce modelli, non "comprende" il codice.
  • [ ] Posso spiegare i concetti di token, finestra di contesto e prompt in una frase.
  • [] Posso distinguere tra tipi di attività in cui l'intelligenza artificiale è forte e debole.
  • [ ] So cos'è un'allucinazione e l'unico antidoto è la verifica.
  • [ ] Ho adattato il ciclo “proporre, produrre, verificare” al mio compito.
  • [ ] Posso mostrare la differenza tra un suggerimento forte e uno debole in un esempio concreto.