Unità 2 / 12

Script e completamento automatico

Guadagni:

  • Possibilità di mappare la modalità chat per correggere il tipo di attività con completamento in linea
  • Capacità di scrivere potenti istruzioni di produzione che includono contratti di input/output, casi limite e vincoli di stile
  • Possibilità di convalidare il codice generato ed eventuali nuove dipendenze proposte prima della fusione

Il primo punto di contatto di uno sviluppatore con l'intelligenza artificiale è spesso il completamento automatico, una funzionalità che suggerisce la riga successiva durante la digitazione, o il messaggio "digita quella funzione" in una finestra di chat. Entrambi utilizzano lo stesso motore ma richiedono discipline diverse. In questa unità, trasformiamo la generazione del codice da un "annotarlo" casuale in una fase di ingegneria il cui output è prevedibile e verificabile.

L'obiettivo è trasformare l'intelligenza artificiale da uno strumento che accelera la macchina da scrivere a un apprendista che lavora entro i limiti impostati. Un apprendista ben guidato risparmia tempo; Un apprendista non guidato produce un pasticcio che dovrai ripulire in seguito.

Due modalità di utilizzo: completamento in linea e chat

Il completamento in linea entra in gioco mentre digiti nell'editor; Digiti una firma di funzione o una riga di commento e ti suggerisce il resto. È ottimo per la velocità, ma ha un contesto ristretto: vede solo il codice nelle immediate vicinanze. Ecco perché funziona meglio quando scrivi chiaramente la tua intenzione in un commento. Ad esempio, //convalida l'e-mail dell'utente, lancia ValidationError se un commento non valido migliora significativamente il suggerimento di seguito.

La modalità chat è per attività più grandi e strutturate: "Aggiungi paginazione a questa classe", "Estrai un'interfaccia di quel servizio". Qui hai il lusso di dare ruolo, contesto e formato. La regola generale è: completamento per compiti piccoli e fluidi, conversazione per compiti che richiedono riflessione e struttura.

Suggerimento: non accettare ciecamente il suggerimento di completamento con "Tab". Leggi per un secondo la riga suggerita; Un nome di variabile errato o una condizione invertita di solito trapelano da qui.

Passaggi per tradurre l'intenzione in codice

  1. Definire il contratto. Qual è il comportamento di input, output e errore della funzione? Come "Ricevi e-mail, normalizza se valido, genera errore se non valido".
  2. Indicare i vincoli. Non utilizzare la dipendenza esterna? Una guida di stile specifica? Esiste un limite prestazionale?
  3. Fai un esempio. Una coppia input-output (“ali@x.com → valido, ali@ → errore”) sposta la comprensione delle intenzioni del modello dalla previsione alla precisione.
  4. Richiedi pezzi piccoli. Una funzione, una responsabilità. Poi passa a quello successivo.
  5. Leggere ed eseguire il codice generato. La compilazione + una rapida prova manuale è il passaggio di garanzia più economico.

Tre mini custodie

Caso 1: la produzione basata sui commenti aumenta la precisione. Uno sviluppatore ha prima richiesto una funzione di analisi della data con un corpo vuoto e ha ottenuto il risultato corretto in 3 round. Nel secondo tentativo, quando ho definito la funzione con un commento di 4 righe (formati accettati, regola del fuso orario, condizione di errore) e l'ho richiesta, è arrivato il codice che funzionava al primo giro. Stesso modello, stesso giorno; la differenza era solo la chiarezza di intenti.

Caso 2: non specificare una versione è costoso. Un team ha avuto problemi con l'API legacy basata su callback che sostituiva fs.promises nel codice prodotto per Node.js. Quando al prompt è stata aggiunta la riga "Use Node 20, ESM, async/await", la produzione ha seguito il progetto per la prima volta; La media dei 12 minuti spesi per la correzione è stata ripristinata.

Caso 3: guadagno reale nel codice boilerplate. Un microservizio richiedeva 6 nuovi DTO (Data Transfer Object, una semplice classe di dati che trasporta i dati tra livelli) e le relative regole di convalida. Quelli che prima erano circa 90 minuti di lavoro manuale sono stati ridotti a 35 minuti quando sono stati prodotti e rivisti dall'intelligenza artificiale; Poiché la ripetizione del codice è elevata e lo schema è chiaro, qui l’intelligenza artificiale ha funzionato nella sua area più efficiente.

Quattro modelli copiabili

Generazione di funzioni basata su contratto:

Ruolo: sei uno sviluppatore diligente di {{lingua}}. Contratto di funzione:- Nome: {{nome}}- Input: {{tipi e loro significato}}- Output: {{tipo e significato}}- Stato di errore: {{cosa viene lanciato/restituito quando}}Vincoli: {{nessuna dipendenza esterna/stile/prestazione}}Esempi:- {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Dai prima la firma + il piano breve, poi il codice. Test di scrittura, basta funzionare.

Per abbinare lo stile esistente (adattarsi al codice base):

Di seguito è riportata una funzione di esempio del nostro progetto; Impara la denominazione, la gestione degli errori e lo stile di commento qui. Scrivi una funzione per {{new_task}} con lo STESSO stile. Esempio: {{current_code}}

Dallo scheletro al riempimento (stub → implementazione):

Compila lo scheletro della funzione sottostante in base alle TODO nei commenti. CAMBIARE la firma e il tipo di restituzione. Non creare una funzione helper che non esiste; se necessario, fatemi sapere "questo aiutante è necessario". {{scheletro_kod}}

Confronto di app alternative:

Fornisci 2 diverse implementazioni per {{task}}: (a) dare priorità alla leggibilità, (b) dare priorità alle prestazioni. Scrivi 1 frase "quando è preferibile" sotto ciascuna di esse.

Prompt debole / Prompt forte

Debole: "Scrivimi una funzione di verifica email."
Forte: "TypeScript 5, solo libreria standard. Scrivi isValidEmail(input: string): booleano. Taglia gli spazi, fai distinzione tra maiuscole e minuscole, a@b.co è valido, a@, @b.co, la stringa vuota non è valida. Se intendi utilizzare regex, non essere eccessivamente complesso; aggiungi 2 righe di commenti. "

Versione potente; Restituisce la lingua, la versione, la firma, i casi limite e un vincolo di stile. Pertanto, il codice generato funziona e si adatta al tuo progetto.

Avvicinamento

Quando usarlo

Attenzione

Completamento in linea

Piccoli inserti nel flusso

Non accettare il suggerimento senza leggerlo

Produzione a contratto in chat

Nuova funzione/classe

Fornisci esempio e caso limite

Produzione per campione di stile

Aggiunta al codice esistente

Seleziona il codice campione corrente

ripieno di scheletro

Firma fissa, corpo vuoto

Cambiare la firma

Duplicazione del codice e trappola delle dipendenze

L'intelligenza artificiale consiglia spesso una nuova libreria per semplificare il proprio lavoro. A volte questo è accurato, a volte aggiunge una dipendenza non necessaria al tuo progetto o suggerisce un pacchetto che non esiste (un'allucinazione). Regola: confermi ogni nuova dipendenza. Non aggiungerlo al progetto senza verificare che il pacchetto esista effettivamente, sia mantenuto e disponga della licenza appropriata. Nella maggior parte dei casi un aiutante già presente nel progetto è migliore di un nuovo pacchetto.

Attenzione: rivedere le righe di importazione suggerite da AI. Un nome di pacchetto inesistente (che può anche assomigliare a pacchetti falsi chiamati "typo-squatting") interrompe la compilazione e rappresenta un rischio per la sicurezza.

Errori comuni

  • Avere la firma determinata dal modello. Se non si fissano i tipi di input/output, ogni produzione presenta una firma diversa e l'integrazione diventa difficile.
  • Per non parlare dei casi limite. Input vuoto, null, numero negativo, valore molto grande: se non li specifichi, il modello scrive il "percorso felice", saltando i bordi.
  • Combinare il suggerimento senza testarlo. Il codice che sembra funzionare non significa che funzioni.
  • Accettare una dipendenza non necessaria. L'aggiunta di un'intera libreria per un one-liner crea debito tecnico.
  • Incoerenza di stile. La diversa denominazione e gestione degli errori rispetto al resto del progetto rende il codice base irregolare.

In sintesi

La generazione del codice è potente quando traduci l'intento in un contratto chiaro. Utilizza il completamento in linea per piccole attività in-stream e per attività che stabiliscono una struttura nella conversazione. Puoi specificare tipi di input/output, casi limite, versione e stile; Fornire un esempio del modello; verificare ogni nuova dipendenza; e corri e leggi ogni pezzo prodotto. L'intelligenza artificiale dà i suoi frutti migliori con un codice stereotipato e ripetitivo: eseguilo direttamente lì, entro i limiti impostati.

Compito dell'applicazione

Scegli una piccola funzione reale dal tuo progetto che devi scrivere. Per prima cosa stampalo sull'intelligenza artificiale con il modello di "generazione di funzioni basate su contratto", fornendo tipi di input/output, due casi limite e un vincolo di stile. Compila il codice generato e provalo con due input diversi. Quindi chiedi di nuovo la stessa funzione, questa volta "scrivimi questo" senza alcun contesto, e confronta i due output riga per riga: quali casi limite sono stati persi, quante correzioni sono state necessarie?

lista di controllo

  • [ ] So dove utilizzare la modalità chat con completamento in linea.
  • [ ] Determinare il contratto input/output e i casi limite nella generazione di funzioni.
  • [ ] Ho preso l'abitudine di aggiungere informazioni sulla lingua e sulla versione al prompt.
  • [ ] Compilo e collaudo ogni pezzo prodotto prima di assemblarlo.
  • [ ] Confermo ogni nuova dipendenza che l’AI propone verificandone l’esistenza e la necessità.
  • [ ] Controllo che il codice generato corrisponda allo stile del progetto.