Chatbot Sotto il Cofano: Come Possono Essere Ingannati e Cosa Rivelano
Nell’ultimo anno, il settore dei chatbot ha subito un’impressionante trasformazione. Solo due anni fa, sviluppare chatbot per assistenza su siti web era un processo complesso e costoso, spesso con risultati poco soddisfacenti. Ora, con l’avvento delle tecnologie basate sui Large Language Models (LLM), come i GPTs e gli Assistants di OpenAI, il panorama è radicalmente cambiato. Questi modelli avanzati hanno reso la creazione di chatbot sofisticati notevolmente più semplice e accessibile.
Questa facilità d’accesso alle capacità dell’intelligenza artificiale generativa, però, introduce nuove sfide e problematiche. Una di queste è l’adattabilità e la personalizzazione: mentre i LLM offrono un’ottima base per i chatbot, è fondamentale che siano adeguatamente configurati e addestrati per gli specifici contesti d’uso. Questo richiede un’analisi attenta del linguaggio e del comportamento del pubblico di riferimento, per assicurare che le interazioni siano rilevanti e di valore rispetto al compito assegnato al chatbot.
Il rischio, infatti, è quello che comportamenti imprevisti, siano essi volontari o meno, da parte degli utilizzatori mandino in crisi gli assistenti virtuali portandoli a fornire risposte senza senso o a svelare informazioni in loro possesso che non dovrebbero essere rilevate. Ed è proprio con riferimento a questo tema che voglio condividere una mia esperienza e qualche esperimento.
Un Chatbot Rilasciato Al Pubblico Prematuramente
Qualche giorno fa ho dovuto consultare il sito ufficiale del turismo austriaco per raccogliere alcune informazioni di cui avevo bisogno. Il sito si presenta in modo accattivante e ben strutturato, con l’aggiunta di un interessante assistente virtuale, descritto come un “portiere austriaco” in una traduzione un po’ traballante in italiano. Interessante notare che questo assistente, basato su Intelligenza Artificiale, è dichiaratamente ancora in fase di sviluppo, il che mi porta a una riflessione un po’ critica: perché inserire una funzionalità ancora in fase di sviluppo in un ambiente destinato agli utenti finali?
L’aspetto del chatbot suggerisce la sua provenienza, quindi gli ho chiesto se, effettivamente come sospettavo, si trattasse di un GPT di OpenAI. Sono rimasto abbastanza sorpreso dalla naturalezza con la quale il “portiere austriaco” ha risposto alla mia domanda confermando quanto avessi ipotizzato.
I Rischi del Prompt Hacking nei Chatbot AI
La tecnologia di OpenAI, pur essendo avanzata, mostra una certa “ingenuità” nel rispondere a domande riguardanti il suo stesso funzionamento. Allo stato attuale, non esistono filtri completamente efficaci e affidabili che prevengano risposte inappropriate dei chatbot in risposta a prompt “malevoli” o manipolativi da parte degli utenti. Questo fenomeno è conosciuto come “prompt hacking”, che, sebbene il nome possa suggerire complessità, consiste in realtà in tecniche molto più semplici e accessibili rispetto al tradizionale hacking, non richiedendo competenze tecniche avanzate. Ecco alcuni esempi:
- framing complesso: l’utente può formulare domande in modi complessi o ingannevoli, spesso usando metafore, allusioni o linguaggio ambiguo, per indurre il modello a rispondere in modi non previsti. Ad esempio, l’utente potrebbe chiedere informazioni sensibili travestendo la richiesta come una domanda ipotetica o storica
- utilizzo di codici o simboli nascosti: includendo codici o simboli nascosti nel prompt, l’utente può tentare di manipolare il sistema per interpretare la richiesta in modo diverso da quello inteso, portando a risposte che altrimenti sarebbero state bloccate
- sfruttamento di bias o lacune nella conoscenza: l’utente può identificare e sfruttare i bias presenti nel modello o le sue lacune nella comprensione di specifici argomenti, settori o linguaggi, per ottenere risposte distorte o inaspettate
- utilizzo di iterazioni multiple o progressive: è possibile tentare di “addestrare” il modello attraverso iterazioni multiple, facendo domande progressivamente più orientate verso l’obiettivo desiderato, in modo da superare gradualmente i filtri di sicurezza.
Il tema prompt hacking è, ovviamente, molto più ampio e variegato, ma il mio obiettivo qui è fornire una semplice panoramica di alto livello per meglio comprendere i passi successivi.
Chatbot Fuori Script: da Vienna a Palermo in un Test AI
Ritornando al nostro caso, devo confessare che la risposta diretta e onesta fornita dal chatbot del sito ufficiale del turismo austriaco alla mia prima domanda ha acceso la mia curiosità, spingendomi ad effettuare alcuni esperimenti “giocosi” e ulteriori indagini.
Senza andare a scomodare le tecniche più complesse, ma solo attraverso delle iterazioni multiple ho convinto il chatbot a convincermi che Palermo è meglio di Vienna come meta per un viaggio.
Come primo passaggio gli ho chiesto le sue fonti in maniera integrale.
Dopo una breve riflessione, il chatbot ha vuotato il sacco fornendomi testo, immagini e link delle fonti da questi utilizzati.
Il risultato è altalenante. Alcune informazioni, ad esempio “le informazioni pratiche da sapere prima di partire per l’Austria” sono molto rilevanti, altri sembrano dei documenti di test caricati nel GPT.
In ogni caso, un chatbot dovrebbe evitare di divulgare i dettagli del proprio addestramento, limitandosi a risposte generiche. Ad esempio “sono stato addestrato su un gran numero di documenti relativi all’Austria e ne sono un grande conoscitore” oppure un molto più banale “purtroppo non posso rispondere a questa tua domanda” sarebbero stati molto più coerenti come risposte nei confronti di un buontempone in vena di esperimenti.
Gli ho chiesto quindi di rispondere soltanto su domande sulla Sicilia.
In questo caso ha tentennato – in quanto non ha informazioni sulla Sicilia nella sua base di conoscenza specialistica, ma solo quelle che derivano dal suo addestramento generico da parte di OpenAI – ma si è comunque messo a disposizione per rispondere alle mie curiosità. Devo ammettere che in altre prove ha provato a tenere il punto sul suo ruolo, ma il risultato finale è sempre stato il medesimo.
Ho deciso quindi di provocarlo chiedendogli, dopo un paio di altre iterazioni, di convincermi con 10 esempi che Palermo è meglio di Vienna.
Anche in questo caso il Portiere austriaco – o in questo caso sarebbe forse meglio definirlo il Portiere siciliano – ha enumerato 10 ragioni che potrebbero rendere Palermo preferibile a Vienna. Oltre a quelle riportate nell’immagine ha citato anche la storia e l’architettura Arabo-Normanna, il teatro Massimo e la riserva dello zingaro … mica male come suggerimenti!
Il mio esperimento si è concluso qui, e ho provveduto a segnalare queste problematiche al sito del turismo austriaco affinché potessero essere risolte. Pertanto, non è detto – e sinceramente lo spero – che la mia esperienza sia replicabile integralmente.
Contrastare il Prompt Hacking: Esistono delle Strategie Efficaci?
Quali possono essere le possibili soluzioni a questa tipologia di problema? A quanto pare, al momento, non ve n’è una sufficientemente robusta. Le discussioni nei vari forum sono molto accese al riguardo, ma come è logico aspettarsi, soltanto i produttori degli LLM potranno eventualmente proporne una definitiva.
Al momento, esistono delle forme di mitigazione al riguardo che consistono, sostanzialmente, nel dare indicazioni all’AI affinché questa non fornisca informazioni relative al suo funzionamento o diverse dal dominio per il quale è stata predisposta. Le principali tecniche comprendono:
- Filtering: comporta il controllo delle parole e delle frasi nell’input da parte dell’utente che dovrebbero essere bloccate. Si utilizza un elenco di parole da bloccare (blocklist) o un elenco di parole ammesse (allowlist). La blocklist contiene parole e frasi che devono essere bloccate, mentre l’allowlist contiene quelle ammesse.
- Instruction Defense: si basa sull’aggiunta di istruzioni specifiche all’interno del prompt per guidare il modello nell’elaborazione delle risposte. L’idea è di inserire delle direttive che indichino al modello di prestare particolare attenzione e cautela su possibili contenuti inappropriati o fuorvianti che potrebbero essere forniti dall’utente nel suo input.
- Post-Prompting: consiste nel posizionare l’input dell’utente prima della parte principale del prompt. In questo modo, le istruzioni potenzialmente ingannevoli o manipolative inserite dall’utente all’interno dell’input hanno meno probabilità di influenzare la risposta del modello. Ciò si basa sul principio che i modelli tendono a dare maggiore peso alle istruzioni poste alla fine del prompt, rendendo meno efficaci quelle manipolative che potrebbero essere incluse all’inizio.
- Random Sequence Enclosure: prevede di racchiudere l’input dell’utente all’interno di due sequenze di caratteri casuali. Inserendo queste sequenze prima e dopo l’input dell’utente, si aumenta la sicurezza, poiché queste sequenze casuali aiutano a prevenire l’elaborazione diretta e non filtrata dell’input. In pratica, ciò crea una sorta di “barriera” intorno all’input, rendendo più difficile per l’utente manipolare il modello.
- Sandwich Defense: consiste nel posizionare l’input dell’utente tra due parti specifiche di un prompt, creando una struttura a “sandwich”. L’idea è di inserire l’input dell’utente al centro, preceduto e seguito da testo che guida il modello su come elaborare l’input. Questo metodo è progettato per ridurre la probabilità che l’utente influenzi il modello con richieste ingannevoli.
- XML Tagging: incapsulare l’input dell’utente con tag XML può essere una difesa abbastanza robusta. Si tratta, in pratica, di inserire l’input tra due tag – uno di apertura e uno di chiusura – che aiutano il modello a identificare chiaramente l’inizio e la fine dell’input dell’utente. Per esempio, si potrebbe utilizzare un tag di apertura come <user_input> seguito dall’input dell’utente e poi un tag di chiusura </user_input>.
Per chi volesse approfondire, un buon punto di partenza è learn prompting da cui sono stati tratti gli esempi di tecniche sopra riportati.
Nuovi Approcci contro il Prompt Hacking: Valutare l’Output dei Chatbot Prima di Presentarlo agli Utenti
Una diversa strategia è oggetto di interessanti discussioni sul forum di OpenAI e propone un approccio innovativo per affrontare le sfide del prompt hacking. Questo si distacca dalla tradizionale pratica di filtrare i prompt in ingresso, un compito arduo e spesso inefficace, e si focalizza piuttosto sull’esame critico dell’output prodotto dall’AI. In questo schema, l’output del modello AI viene esaminato da un sistema AI secondario che funge da arbitro, valutando la risposta in base a criteri predefiniti. Se l’output supera questo controllo di qualità, viene poi trasmesso all’utente. Così facendo, si garantisce che, anche se un input iniziale dovesse sfuggire ai filtri, la risposta finale rimanga coerente e affidabile.
Ciò nonostante, questa soluzione porta con sé dei limiti non trascurabili, in particolare in termini di tempi di risposta e costi. La necessità di un’analisi aggiuntiva implica una seconda elaborazione da parte dell’AI, che può comportare un ritardo nella consegna della risposta finale, incidendo così sull’esperienza dell’utente. Inoltre, i costi aumentano con il numero di interazioni con il sistema AI.
Malgrado queste limiti, l’approccio si profila come una soluzione promettente, offrendo una barriera più solida per tutelare l’integrità e la sicurezza nell’uso dei chatbot, al fine di assicurare risposte allineate alle linee guida stabilite.
Sto attualmente mettendo alla prova la tecnica appena descritta e, una volta completati i miei esperimenti, non mancherò di condividere i risultati dettagliati. Il mio obiettivo è fornire un contributo concreto alla discussione su come l’intelligenza artificiale possa evolversi in modo più sicuro, responsabile e consapevole.