Prompt engineering si è trasformato in una delle competenze più strategiche nello sviluppo software moderno. Il prompt che si fornisce a un agente definisce come esso pianifica, utilizza gli strumenti e gestisce il pipeline. Piccole modifiche, come un aggiornamento contestuale, una chiara specifica di un vincolo o la riorientazione di un'istruzione, spesso si riflettono in miglioramenti significativi nella precisione e nella affidabilità. Questo articolo raccoglie tecniche testate sul campo utilizzate da Augment Code per creare agenti autonomi che si comportano come collaboratori meticolosi, anziché strumenti soggetti a errori improvvisi o di natura aleatoria. I numerosi esempi presentati in questo post si concentrano su agenti di programmazione, ma le tecniche sono di applicazione generale.
Che Cos'è l'Engineering del Prompt
Il prompt dell'agente include qualsiasi elemento sia fornito come input al modello. Questo comprende:
- Prompt di sistema
- Definizioni degli strumenti
- Output degli strumenti
- Istruzioni dell'utente
- Output dello stesso modello da turni precedenti
L'ingegneria del prompt è l'arte di migliorare le prestazioni del modello su un'attività fornendogli un prompt più efficace. Ogni parte del prompt può essere migliorata con l'ingegneria del prompt:
- L'output dello strumento può raccontare al modello le condizioni d'errore
- L'istruzione dell'utente può essere riscritta prima di essere mostrata al modello (enhancement del prompt)
- Gli output precedenti possono essere compressi per risparmiare token
Come Pensare al Modello
Il modello è (artificialmente) intelligente. Farlo operare è più simile a parlare con una persona che programmare un computer. Il modello costruisce una visione del mondo basata interamente su ciò che si trova nel prompt. Più completa e coerente è la sua visione, meglio saranno i suoi risultati.
Il modello presenta un'interfaccia naturale, distinta dall'interfaccia programmazione. È utile considerarla un'astrazione reale per comunicare con il modello per ottenere risultati positivi, segnalare errori o notificare modifiche.
Esempio:
Se il modello chiama uno strumento in modo errato, non genera un'eccezione nel codice agente. Invece, restituisce un risultato strumentale che spiega l'errore, esempio:
Strumento chiamato senza il parametro richiesto xyz. Il modello riprenderà e tenterà nuovamente.
Come Valutare i Prompt
La valutazione automatica dei prompt è difficile, tranne quando l'obiettivo è molto specifico. Si consiglia di creare scenari per testare i prompt diversamente e di trovare esempi dove un cambiamento al prompt potrebbe causare un calo nella qualità degli output. Per un esempio concreto di valutazione, vedere come le stesse tecniche di ingegneria del prompt hanno portato Augment Code al primo posto tra le soluzioni open source su SWE-bench.
Consigli Per l'Engineering del Prompt
Segui questi suggerimenti per sfruttare al massimo l'AI:
Priorità al Contesto
Il fattore più importante per l'ingegneria del prompt è fornire al modello il contesto più completo e rilevante. Ciò che l'utente fornisce (rispetto al prompt fornito da noi) è il segnale principale per la sua operatività.
I modelli moderni sono abilissimi a estrarre informazioni utili da prompt estesi. All’occorrenza, tendi a fornire più informazioni, aumentando la possibilità che il modello abbia a disposizione dati rilevanti.
Presenta una Visione Completa
Aiuta il modello a "entrare nel gioco" presentando il contesto in cui opera. Se desideri che agisca come sviluppatore software, indica esplicitamente che può leggere e modificare il codice del progetto tramite gli strumenti forniti. Spiega le risorse a cui ha accesso e come usarle.
Consistenza All'interno del Prompt
Può causare confusione se gli elementi del prompt (prompt di sistema, definizioni degli strumenti) non sono allineati. Ad esempio, il prompt di sistema include la specifica Il directory corrente è $CWD, mentre lo strumento di esecuzione del comando include un parametro opzionale cwd. La coerenza implica che il valore predefinito di questo debba essere $CWD.
Evita di Sorprendere il Modello
I modelli sono sensibili a incoerenze. Se un modello aspetta un certo risultato da un utilizzo dello strumento, fornisciglielo oppure spiega la differenza. Per esempio, se la definizione dello strumento promette un output di una determinata lunghezza, restituiscigliene una di diversa, ma aggiungi una spiegazione: Un output lungo N è stato richiesto, ma stavolta ne ritorno uno lungo K perché....
Allinea il Modello con la Prospettiva Utente
Considera sempre la prospettiva dell'utente. L’agente può beneficiare di informazioni che presentano un dettaglio sull’ambiente in cui opera, ad esempio:
- Orario e fuso orario dell’utente
- Attività precedenti dell’utente
- Tipo di interfaccia utente o IDE
Esempio di Prompt di Sistema Basato sull'IDE
Versione base:
Il modello ha accesso a un IDE, e attualmente è aperto il file foo.py nell'IDE VSCode.
Versione estesa:
L’utente usa l’IDE. Il file foo.py è aperto. L’IDE è VSCode. Le righe 134-179 sono visibili. Ecco l’output visibile insieme alla posizione del cursore. Ci sono 14 schede aperte ordinate in base alla recente visibilità dell’utente.
Consiglio: La versione molto dettagliata può confondere il modello se considera l’ambiente troppo rilevante rispetto alla richiesta dell’utente. Fai attenzione a mantenere focalizzato il modello sull’obiettivo principale.
Approfondisci
Gli agenti AI si adattano meglio con istruzioni complete. Non preoccuparti solo di ridurre la complessità: spesso fornire informazioni aggiuntive migliora notevolmente la comprensione e l’esecuzione da parte del modello. Approfondisci i dettagli contestuali, specifica vincoli e chiarisci ruoli.