Artificial Intelligence

What you should know about it.

AI

Glossario

  • ANN: Artificial Neural Network
  • RRN: Recurrent Neural Network
  • CNN: Convolutional Neural Network
  • Addestramento supervisionato
  • Addestramento non supervisionato
  • NLP: Natural Language Processing
  • Modello
  • LLM: Large Language Model
  • Transformer
  • GPT: Generative Pre-trained Transformer
  • MoE: Mixture of Experts
  • Bias
  • Allineamento
  • Allucinazione
  • Prompting
  • RTF: Role Target Format
  • RAG: Retrieval-Augmented Generation
  • CoT: Chain-of-Thought
  • MCP: Model Context Protocol
  • API: Application Programming Interface
  • NPU: Neural Processing Unit
  • GPU: Graphics Processing Unit
  • CUDA: Compute Unified Device Architecture
  • TL;DR: Too Long; Didn't Read

Un po' storia

Quando l'IA è nata.

  • 1943: Warren McCulloch e Walter Pitts propongono il primo modello di rete neurale artificiale (ANN).
  • Nel 1958, lo psicologo Frank Rosenblatt descrive il perceptron, una delle prime reti neurali artificiali implementate.
  • 1970-80: l'algoritmo di backpropagation viene proposto e reinventato più volte: pubblicato nel 1970 dallo studente finlandese Seppo Linnainmaa anche se non applicato alle reti neurali come modalità inversa di differenziazione automatica; nel 1985 indipendentemente da Rumelhart e Parker; nel 1987 da LeCun. Backpropagation permette di addestrare le ANN, tuttavia, i limiti computazionali e la difficoltà nell'addestrare reti profonde ne hanno frenato l'utilizzo per anni.
  • 1997: DeepBlue di IBM batte Garry Kasparov (campione del mondo di scacchi). Sebbene DeepBlue sia fondamentalmente basato su un algoritmo di forza bruta, l'evento ha avuto una grande eco, dando luogo a una nuova rinascita del settore grazie all'affluenza di fondi, favorendo l'uscita dal secondo momento di disinteresse, passato alla storia come AI winter.
  • 2000: con il nuovo millennio nasce il concetto di Big Data, la sorgente dove pescare la quantità enorme di dati che servono per addestrare le reti neurali artificiali.
  • 2009: le GPU, grazie al loro elevato tasso di parallelismo, sono utilizzate come motori di calcolo sia per l'oneroso addestramento delle ANN che per la fase di utilizzo (inferenza).
  • 2012: una IA supera il Test di Turing: il chatbot Eugene Goostman, programmato per simulare un ragazzo di 13 anni, è riuscito a ingannare il 33% degli esaminatori in un test. Il risultato è stato però contestato perché basato su una simulazione limitata e non su un'intelligenza generale.
  • 2016: AlphaGo di DeepMind batte a Go Lee Se-dol (9° dan, 12 volte campione mondiale).
  • 2017: Google propone l'architettura neurale Transformer, un miglioramento delle precedenti per la traduzione automatica.
  • 2018: OpenAI sviluppa il primo GPT
  • 2022: OpenAI rilascia ChatGPT, un chatbot basato sull'intelligenza artificiale generativa.
  • oggi: ?

La strada verso i moderni LLM è nata in gran parte dalla ricerca di una traduzione automatica perfetta. I primi modelli neurali (RNN) usavano un'architettura "encoder-decoder" che però faticava con frasi lunghe. La prima grande svolta fu il "meccanismo di attenzione", che permetteva al modello di pesare l'importanza delle diverse parole della frase originale durante la traduzione.

Il vero punto di rottura è arrivato nel 2017 con l'architettura Transformer ("Attention Is All You Need"), che abbandona le RNN per basarsi esclusivamente sull'attenzione. Questa innovazione ha permesso una parallelizzazione senza precedenti nell'addestramento, rendendo possibile usare dataset di dimensioni enormi. Addestrando i Transformer su quasi tutto il testo disponibile su internet, si è passati da sistemi specializzati a modelli con una comprensione vasta e generalizzata del linguaggio: i Large Language Models (LLM).

Sfruttando questa nuova architettura, nel 2018 OpenAI sviluppa il modello GPT-1, considerato uno dei primi veri LLM. Con l'obiettivo di realizzare un traduttore efficiente viene addestrata una rete transformer in modo non supervisionato su un BookCorpus, un dataset contenente il testo di oltre 7.000 libri inediti in cui vengono eliminate delle parole con l'obiettivo di insegnare a indovinarle. Presto ci si accorge che il sistema non solo è in grado di indovinare le parole mancanti ma, sottoposto ad un prompt (un testo d'invito che viene fornito come input al transformer) prevedere la parola successiva e reiterando il processo produce delle frasi di senso compiuto.

L'addestramento su un corpus vasto e narrativo permette al modello di apprendere grammatica, fatti e, soprattutto, complesse relazioni semantiche. Senza un addestramento specifico, il primo modello mostrava già capacità "emergenti" in compiti per cui non era stato esplicitamente preparato segnando il passaggio da sistemi specializzati a modelli con una comprensione vasta e generalizzata del linguaggio. La strada ai moderni LLM è aperta.

LLM

Quando l'IA ha imparato a parlare.

I modelli linguistici di grandi dimensioni (LLM) sono reti neurali artificiali addestrate su enormi quantità di dati testuali. Sono in grado di comprendere, generare e manipolare il linguaggio umano in modi sorprendentemente sofisticati.

Caratteristiche principali degli LLM:

  • Dimensione: Sono caratterizzati da un numero elevatissimo di parametri (miliardi o trilioni), che consentono loro di apprendere pattern complessi nel linguaggio.
  • Addestramento: Vengono addestrati su dataset massivi di testo e codice, imparando a prevedere la parola successiva in una sequenza (auto-supervisione).
  • Capacità: Possono svolgere una vasta gamma di compiti legati al linguaggio, tra cui:
    • Generazione di testo (articoli, storie, codice, email)
    • Riassunto di documenti
    • Traduzione linguistica
    • Risposta a domande
    • Completamento di testo
    • Analisi del sentiment
    • Conversazione (chatbot)

Architetture comuni:

  • Transformer: L'architettura dominante per gli LLM, introdotta nel 2017. Si basa su meccanismi di "attenzione" che permettono al modello di pesare l'importanza di diverse parti dell'input durante l'elaborazione.
    • Encoder-Decoder: Utilizzato per compiti come la traduzione, dove l'encoder elabora l'input e il decoder genera l'output.
    • Decoder-only: Utilizzato per la generazione di testo, dove il modello genera sequenzialmente la parola successiva basandosi sul contesto precedente (es. GPT-3, LLaMA).
    • Encoder-only: Utilizzato per compiti di comprensione come la classificazione del testo (es. BERT).

Esempi di LLM noti:

  • GPT (Generative Pre-trained Transformer): Sviluppato da OpenAI, è una serie di modelli decoder-only noti per le loro capacità di generazione di testo.
  • LLaMA (Large Language Model Meta AI): Sviluppato da Meta AI, è una famiglia di modelli open-source che ha stimolato una grande innovazione nella comunità di ricerca.
  • PaLM (Pathways Language Model): Sviluppato da Google, è un modello encoder-decoder noto per le sue capacità multilingue e multimodali.

Architetture

Com'è fatta l'IA.

Transformer

L'architettura Transformer è stata introdotta nel 2017 e ha rivoluzionato il campo dell'elaborazione del linguaggio naturale (NLP), diventando la base per la maggior parte dei modelli linguistici di grandi dimensioni (LLM) moderni. Si basa su un meccanismo chiamato "attenzione" (self-attention) che permette al modello di pesare l'importanza di diverse parti dell'input durante l'elaborazione, catturando dipendenze a lungo raggio nel testo.

Componenti chiave:

  • Meccanismo di Attenzione (Self-Attention): Il cuore del Transformer. Permette al modello di considerare l'importanza relativa di ogni parola (o token) nell'input rispetto a tutte le altre parole, indipendentemente dalla loro posizione. Questo risolve i limiti dei modelli sequenziali precedenti (come le RNN) nel gestire dipendenze a lungo termine.
  • Encoder: La parte del Transformer che elabora l'input. È composto da più strati identici, ognuno dei quali contiene un meccanismo di auto-attenzione multi-testa e un feed-forward network. L'encoder trasforma una sequenza di input in una rappresentazione contestualizzata.
  • Decoder: La parte del Transformer che genera l'output. Anche il decoder è composto da più strati identici, ma include un ulteriore meccanismo di attenzione mascherata (masked self-attention) per impedire al modello di "sbirciare" le parole future durante la generazione, e un meccanismo di attenzione encoder-decoder che permette al decoder di focalizzarsi sulle parti rilevanti dell'output dell'encoder.
  • Positional Encoding: Poiché i Transformer non elaborano le sequenze in modo ricorsivo o convoluzionale, non hanno un modo intrinseco di capire l'ordine delle parole. Il positional encoding aggiunge informazioni sulla posizione di ogni parola all'embedding di input, permettendo al modello di tenere conto dell'ordine sequenziale.

Vantaggi:

  • Parallelizzazione: A differenza delle reti ricorrenti (RNN) che elaborano le sequenze in modo seriale, i Transformer possono elaborare tutte le parole di una sequenza contemporaneamente, rendendo l'addestramento molto più veloce e scalabile.
  • Cattura di dipendenze a lungo raggio: Il meccanismo di attenzione permette al modello di collegare parole distanti in una frase o documento per catturare dipendenze a lungo raggio.
  • Interpretazione: I Transformer sono più interpretabili rispetto ad altri modelli complessi, poiché i pesi di attenzione possono essere visualizzati per capire quali parti dell'input sono state considerate più importanti.

Framework per IA

LangChain e LlamaIndex sono due framework open-source fondamentali per lo sviluppo di applicazioni basate su modelli linguistici di grandi dimensioni (LLM), ma con focus distinti.

  • LangChain: L'Orchestratore di Agenti Complessi LangChain è un framework progettato per creare agenti AI complessi e workflow multi-passo. Il suo punto di forza è l'orchestrazione: permette di "incatenare" chiamate a LLM con altri strumenti (API, database, motori di ricerca) e di dotare l'agente di una "memoria" per mantenere il contesto tra le interazioni.  
    Focus: Sulla logica e il comportamento dell'applicazione. È ideale per costruire chatbot, assistenti personali, e sistemi autonomi che devono prendere decisioni ed eseguire azioni.

  • LlamaIndex: Lo Specialista dell'Indicizzazione e Recupero Dati LlamaIndex è un framework ottimizzato specificamente per il Retrieval-Augmented Generation (RAG). La sua funzione principale è connettere gli LLM a fonti di dati esterne (documenti, database), indicizzando le informazioni in modo efficiente per consentire un recupero rapido e accurato del contesto.  
    Focus: Sui dati e sulla conoscenza dell'applicazione. Eccelle nell'indicizzazione di grandi volumi di documenti e nel fornire all'LLM il contesto più pertinente per rispondere a domande specifiche.

Transformer MoE

Mixture of Experts (MoE) è un'architettura di rete neurale che migliora l'efficienza e le prestazioni dei modelli di grandi dimensioni, in particolare gli LLM. Invece di utilizzare un singolo modello monolitico, MoE divide il compito in sottocompiti e assegna ciascuno di essi a un "esperto" specializzato.

Come funziona:

  • Esperti: Il modello è composto da diversi "esperti", ognuno dei quali è una rete neurale più piccola e specializzata in un particolare aspetto del compito.
  • Rete di gating (o router): Una rete neurale separata, chiamata "rete di gating" o "router", decide quale esperto (o quali esperti) deve elaborare un determinato input. Questa rete impara a dirigere l'input all'esperto più appropriato.
  • Combinazione degli output: Gli output degli esperti selezionati vengono combinati per produrre la previsione finale del modello.

Vantaggi di MoE:

  • Efficienza computazionale: Durante l'inferenza, solo un sottoinsieme degli esperti viene attivato per ogni input, riducendo significativamente i requisiti computazionali rispetto a un modello monolitico di dimensioni simili. Questo permette di addestrare e utilizzare modelli molto più grandi con le stesse risorse.
  • Scalabilità: MoE consente di scalare i modelli a un numero molto elevato di parametri senza un aumento proporzionale dei costi di addestramento e inferenza.
  • Specializzazione: Ogni esperto può specializzarsi in un aspetto specifico dei dati o del compito, portando a prestazioni migliori su compiti complessi.
  • Capacità: I modelli MoE possono raggiungere prestazioni superiori rispetto ai modelli densi con un numero simile di parametri attivi, grazie alla loro capacità di sfruttare la specializzazione.

Esempi di LLM che utilizzano MoE:

  • Mixtral 8x7B: Un modello open-source che utilizza un'architettura MoE con 8 esperti, ognuno con 7 miliardi di parametri. Durante l'inferenza, solo 2 esperti vengono attivati per token, rendendolo molto efficiente.
  • GPT-4 (si ipotizza): Sebbene OpenAI non abbia rivelato i dettagli dell'architettura di GPT-4, molti esperti ritengono che utilizzi una forma di architettura MoE.
  • Gemini (si ipotizza): Anche per Gemini di Google si ipotizza l'utilizzo di architetture MoE, data la sua capacità di gestire compiti complessi e multimodali in modo efficiente.
  • Qwen (Tongyi Qianwen): Sviluppato da Alibaba Cloud, è una serie di modelli multilingue e multimodali che supportano diverse lunghezze di contesto.

Allucinazioni

Quando l'IA sbaglia.

Nel contesto dell'intelligenza artificiale generativa, il termine "allucinazione" si riferisce a un fenomeno in cui un modello linguistico (come un chatbot) produce una risposta che suona plausibile, coerente e grammaticalmente corretta, ma che è fattualmente errata, inventata di sana pianta o non correlata ai dati di input. Questo non accade perché l'IA "vede" o "percepisce" qualcosa che non esiste, come in un'allucinazione umana, ma perché la sua natura è probabilistica. Il modello è addestrato per prevedere la parola successiva più probabile in una sequenza, basandosi su enormi quantità di testo. A volte, la sequenza statisticamente più verosimile non corrisponde alla realtà, portando l'IA a "inventare" fatti, citazioni o fonti con la stessa sicurezza con cui riporterebbe informazioni corrette.

Il termine più calzante preso in prestito dalla psicologia, e che descrive un fenomeno per certi versi analogo, è confabulazione. In ambito clinico, la confabulazione è un disturbo della memoria in cui una persona riempie le lacune nei propri ricordi con informazioni inventate, distorte o mescolate, senza alcuna intenzione di ingannare. La persona che confabula è convinta che i suoi falsi ricordi siano reali. L'analogia è forte: così come un cervello umano riempie un vuoto di memoria con una narrazione plausibile ma falsa, un'IA riempie un "vuoto" di conoscenza generando un'informazione statisticamente probabile ma non veritiera, presentandola come un dato di fatto. Entrambi i fenomeni producono falsità in modo non intenzionale e con apparente sicurezza.

Interessante l'articolo comparso su Wired in merito alla confabulazione e alla tecnica di prompting RAG (descritta più avanti).

L'IA, pur non avendo coscienza, tenda a "inventare" per soddisfare le richieste dell'utente quando le informazioni reali sono scarse.

La facilità con cui l'IA può generare testi verosimili ma falsi richiede un nuovo livello di vigilanza e di pensiero critico da parte dell'utente. Non è più sufficiente che un'informazione sembri autorevole; diventa indispensabile verificare le fonti ed effettuare richieste incrociate e di controverifica su altri modelli e, soprattutto, mantenere sempre un approccio scettico e analitico.

L'intelligenza artificiale è uno strumento potentissimo di ausilio alla ricerca e alla conoscenza, ma non può sostituire lo sguardo critico e la competenza dell'esperto umano. Il ruolo dello studioso diventa ancora più cruciale: non solo per interpretare i dati, ma per validare l'autenticità delle informazioni, distinguendo tra il fatto storico e la finzione plausibile generata dalla macchina.

Allineamento

Quando l'IA è pericolosa.

L'allineamento di un modello di intelligenza artificiale è il processo educativo che trasforma un'intelligenza grezza, addestrata su enormi quantità di dati da Internet, in un assistente utile, innocuo e onesto.

Pensa al modello appena uscito dal suo addestramento iniziale come a uno studente geniale che ha letto l'intera biblioteca mondiale: sa tutto, ma non ha filtri, non sa come comportarsi, e potrebbe dare informazioni pericolose o inutili con la stessa disinvoltura con cui spiega la fisica quantistica. L'allineamento è l'educazione che gli viene impartita dopo.

Perché è importante l'allineamento?

Con l'aumentare della complessità e dell'autonomia dei sistemi di IA, diventa cruciale assicurarsi che le loro azioni siano sempre benefiche e controllabili. Un sistema di IA non allineato potrebbe, anche involontariamente, causare danni significativi se i suoi obiettivi non sono perfettamente in linea con quelli umani.

Il processo si svolge principalmente in tre fasi.

  1. Supervised Fine-Tuning (SFT) - Imparare dagli Esempi Giusti.

    È il primo passo, l'educazione di base.

    Come funziona: Un team di persone esperte crea un dataset di alta qualità composto da migliaia di coppie "domanda-risposta ideale". Queste risposte sono scritte per essere esattamente come vorremmo che l'IA rispondesse: utili, educate, strutturate e sicure.

    Analogia: È come dare allo studente un libro di testo con migliaia di "temi svolti" perfetti. Lo studente studia questi esempi e impara per imitazione lo stile, il tono e il formato corretti per rispondere.

    Obiettivo: Insegnare al modello le "buone maniere", lo stile di conversazione desiderato e come rispondere alle richieste più comuni in modo appropriato.

  2. Reinforcement Learning from Human Feedback (RLHF) - Imparare dalle Preferenze

    Questo è il cuore dell'allineamento moderno, un processo più sofisticato.

    Come funziona:

    • Generazione: Al modello viene dato un prompt e genera 2, 3 o 4 risposte diverse.
    • Classifica Umana: Un essere umano legge queste risposte e le mette in classifica, dalla migliore alla peggiore, in base a criteri di utilità, onestà e innocuità.
    • Addestramento di un "Giudice": Questi dati (le classifiche umane) vengono usati per addestrare un secondo modello, più piccolo, chiamato Reward Model (Modello di Ricompensa). Lo scopo di questo "giudice" è imparare a prevedere quale risposta un umano preferirebbe.
    • Ottimizzazione: Il modello originale viene messo "al guinzaglio" del giudice. L'IA genera una risposta, il giudice le dà un punteggio (una "ricompensa"), e il modello originale aggiorna sé stesso per cercare di ottenere punteggi sempre più alti. In pratica, impara a generare risposte che piacciono al giudice, che a sua volta ha imparato a pensare come un umano.

    Analogia: L'insegnante non dà più solo il tema svolto. Chiede allo studente di scrivere diverse bozze di un saggio. Poi, invece di correggerle, le ordina dalla migliore alla peggiore. Lo studente, vedendo le classifiche, sviluppa un "gusto" e un'intuizione su cosa l'insegnante preferisce.

    Obiettivo: Insegnare al modello a comprendere le sfumature del giudizio umano, rendendolo capace di gestire richieste complesse e ambigue in modo più raffinato.

  3. Red Teaming - Cercare i Punti Deboli

    È la fase di "stress test" per la sicurezza.

    Come funziona: Un team di esperti (i "red teamer") cerca attivamente di "rompere" il modello. Usano prompt ingannevoli, domande ambigue e tecniche di "jailbreaking" per indurre l'IA a generare risposte dannose, inappropriate o false.

    Analogia: È come un'esercitazione antincendio. Dei "guastatori" cercano di creare situazioni impreviste per vedere se lo studente si comporta correttamente o se va nel panico e dice cose sbagliate.

    Obiettivo: Ogni volta che un red teamer riesce a far fallire il modello, quel "fallimento" viene registrato e usato come nuovo esempio negativo per rafforzare ulteriormente l'addestramento (nelle fasi 1 e 2). Questo rende l'allineamento più robusto e sicuro.

In sintesi, l'allineamento è un processo continuo che parte dall'imitazione di esempi perfetti (SFT), passa all'apprendimento delle preferenze umane (RLHF) e si rafforza attraverso test di stress continui (Red Teaming), trasformando un modello grezzo in un partner conversazionale affidabile.

Sfide dell'allineamento:

  • Definire i valori umani: I valori umani sono complessi, sfumati e spesso contraddittori

Fonti: - Cracking the Code: Understanding AI Alignment in Large Language Models - Beyond Prompts: How Structured Interaction Can Remodel LLM Behavior

Hacking dell'allineamento

L'utilizzo di prompt volti ad aggirare appositamente l'ingenuità della IA possono estorcere ai GPT informazioni o fargli assumere "atteggiamenti" non etici.

Il many-shot jailbreaking è un metodo, diventato virale tra la fine del 2024 e l'inizio del 2025, che dimostra una vulnerabilità fondamentale degli LLM che riguarda l'allineamento, anche nei modelli più avanzati come GPT-4 e Claude 3.

Trasferimento dell'allineamento

È stato documentato come sia possibile trasferire un riallineamento tramite un prompt costituito da una semplice sequenza di numeri.

Bias

Quando l'IA è un po' razzista.

Il bias nell'intelligenza artificiale si riferisce a errori sistematici o distorsioni nel comportamento di un modello di IA, che portano a risultati ingiusti, discriminatori o inaccurati. Questi bias non sono intenzionali, ma derivano dai dati su cui il modello è stato addestrato o dalle decisioni prese durante la sua progettazione e implementazione.

Come si manifesta il bias

  • Bias nei dati di addestramento: Se i dati utilizzati per addestrare un modello riflettono pregiudizi sociali, stereotipi o rappresentazioni sbilanciate della realtà, il modello imparerà e riprodurrà tali distorsioni. Ad esempio, un modello addestrato su un corpus di testo prevalentemente maschile potrebbe associare professioni tecniche agli uomini e professioni di cura alle donne.
  • Bias algoritmico: Può derivare dalla progettazione dell'algoritmo stesso, dalle metriche di ottimizzazione scelte o dai metodi di campionamento dei dati.
  • Bias di interazione: Si verifica quando gli utenti interagiscono con il sistema in modi che rafforzano i bias esistenti, creando un ciclo di feedback negativo.

Esempi comuni di bias

  • Bias di genere: Sistemi di riconoscimento facciale che funzionano peggio per le donne o per persone con tonalità di pelle più scure.
  • Bias razziale: Algoritmi di valutazione del rischio criminale che sovra-stimano il rischio per alcune etnie.
  • Bias geografico: Modelli linguistici che hanno una conoscenza limitata o stereotipata di culture o regioni meno rappresentate nei dati di addestramento.
  • Bias di conferma: Sistemi di raccomandazione che tendono a mostrare solo contenuti che confermano le credenze esistenti dell'utente.

Conseguenze del bias

  • Discriminazione: Decisioni ingiuste in settori come l'assunzione, la concessione di prestiti, la giustizia penale.
  • Inaccuratezza: Risultati errati o meno efficaci per determinati gruppi di persone.
  • Perdita di fiducia: Diminuzione della fiducia del pubblico nei sistemi di IA.
  • Amplificazione delle disuguaglianze: I bias possono rafforzare e perpetuare le disuguaglianze sociali esistenti.

Come gestire il bias

Gestire il bias in un modello GPT richiede un approccio proattivo, partendo dai dati di training. È fondamentale curare e bilanciare i set di dati, assicurandosi che siano rappresentativi di diverse demografie e culture, e implementare tecniche di debiasamento a livello di dati e di algoritmo durante l'addestramento. Questo include l'identificazione e la pulizia di esempi distorti, la ponderazione dei dati, e l'applicazione di metodi che rimuovano associazioni bias dagli embedding del modello, oppure l'uso di algoritmi di ottimizzazione che considerino la fairness.

Dopo l'addestramento e il deployment, la gestione del bias continua attraverso un monitoraggio costante del comportamento del modello. È essenziale valutare gli output con metriche di fairness specifiche, condurre test di controfattualità e raccogliere feedback umano per identificare e correggere eventuali bias emergent. Inoltre, la trasparenza sulle capacità e sui limiti del modello, insieme all'adozione di chiare linee guida etiche e la possibilità di intervento umano, sono cruciali per un utilizzo responsabile dell'IA.

Etica di utilizzo e sicurezza

Quando l'IA è disonesta.

L'etica nell'uso dell'intelligenza artificiale (IA) è un tema cruciale che riguarda le responsabilità e le conseguenze delle tecnologie IA nella società. Con l'aumento della potenza e della diffusione dei modelli di intelligenza artificiale, è fondamentale considerare come questi strumenti possano essere utilizzati in modo responsabile, equo e sicuro.

Etica di utilizzo

L'etica di utilizzo dell'IA si concentra su come le tecnologie IA dovrebbero essere progettate, implementate e utilizzate per garantire che rispettino i valori umani fondamentali. Alcuni principi chiave includono: - Trasparenza: Gli utenti dovrebbero essere in grado di comprendere come funzionano i sistemi di IA, quali dati utilizzano e come prendono decisioni. - Equità: I modelli di IA non dovrebbero perpetuare o amplificare discriminazioni basate su razza, genere, età o altre caratteristiche personali. - Responsabilità: I modelli di IA dovrebbero essere progettati in modo da poter essere monitorati e controllati, con chiari meccanismi di responsabilità per le decisioni prese dai sistemi. - Privacy: I dati personali utilizzati per addestrare i modelli di IA dovrebbero essere gestiti in modo da proteggere la privacy degli individui e garantire il consenso informato. - Sicurezza: I sistemi di IA dovrebbero essere progettati per prevenire abusi, manipolazioni o comportamenti dannosi.

Etica di sicurezza

L'etica della sicurezza nell'IA si concentra sulla prevenzione di danni involontari o intenzionali causati da sistemi di IA. Questo include: - Robustezza: I sistemi di IA dovrebbero essere resistenti a errori, attacchi malevoli e manipolazioni. - Affidabilità: I sistemi di IA dovrebbero funzionare in modo prevedibile e coerente, anche in condizioni impreviste. - Controllo umano: Dovrebbero esserci meccanismi per il controllo umano sui sistemi di IA, specialmente in applicazioni critiche. - Mitigazione dei rischi: Identificare e mitigare i potenziali rischi associati all'uso dell'IA, come la diffusione di disinformazione, la sorveglianza di massa o l'automazione di armi letali.

Sicurezza nell'uso di LLM

Quando si utilizzano modelli di linguaggio di grandi dimensioni (LLM), è fondamentale adottare pratiche di sicurezza per prevenire abusi e garantire un uso responsabile. Alcune raccomandazioni includono: - Limitare l'accesso: Controllare chi può utilizzare i modelli LLM e in quali contesti, per prevenire usi impropri o dannosi. - Monitoraggio e audit: Implementare sistemi di monitoraggio per rilevare comportamenti anomali o abusi dei modelli LLM, e condurre audit regolari per garantire che vengano rispettati. - Formazione degli utenti: Educare gli utenti sui rischi associati all'uso dei modelli LLM, inclusi i bias, le allucinazioni e le potenziali conseguenze delle risposte generate. - Audit e conformità: Assicurarsi che l'uso dei modelli LLM sia conforme alle normative vigenti in materia di protezione dei dati e intelligenza artificiale.

Prompting

Quando l'IA è banale (o incomprensibile).

Il prompting è l'arte e la scienza di comunicare efficacemente con un modello di linguaggio (LLM) per ottenere le risposte desiderate. Non si tratta solo di fare una domanda, ma di strutturare l'input in modo che l'IA possa comprendere al meglio l'intento e generare un output pertinente, accurato e utile.

Un prompt ben formulato può fare la differenza tra una risposta generica e una altamente specifica e di qualità.

Prompt Engineering

Invece di fare delle semplici domande, è meglio strutturare la richiesta secondo uno schema (di attivazione) preciso. I più noti sono:

  • RTF (Role Target Format): Assegna un ruolo specifico all'LLM, definisce il target (a chi è rivolta la risposta) e il formato desiderato. Ad esempio:

    • Ruolo: Sei un docente universitario di informatica.
    • Target: Devi creare una domanda a risposta multipla per verificare le conoscenze di base degli studenti sulla macchina di Turing, la tesi di Church e la definizione di algoritmo. La domanda deve essere formulata in modo chiaro e conciso, adatta a studenti del primo anno.
    • Formato: La domanda deve essere nel formato input per Moodle (domanda, opzioni di risposta con una corretta, feedback per ogni opzione).  

    Esempio di output desiderato:

    [Domanda]
    Quale delle seguenti affermazioni descrive meglio la relazione tra la Macchina di Turing, la Tesi di Church e il concetto di algoritmo?
    
    [Opzione A]
    La Macchina di Turing è un algoritmo che dimostra la Tesi di Church, la quale definisce cosa sia un algoritmo.
    [Feedback A]
    Non è corretto. La Macchina di Turing è un modello teorico, non un algoritmo in sé, e la Tesi di Church non definisce l'algoritmo ma ne stabilisce un'equivalenza.
    
    [Opzione B]
    La Tesi di Church afferma che qualsiasi problema risolvibile da un algoritmo può essere risolto anche da una Macchina di Turing, e un algoritmo è una sequenza finita di istruzioni ben definite.
    [Feedback B]
    Corretto! Questa opzione cattura accuratamente la relazione tra i tre concetti.
    
    [Opzione C]
    Un algoritmo è una Macchina di Turing che esegue la Tesi di Church per risolvere problemi complessi.
    [Feedback C]
    Non è corretto. La Macchina di Turing è un modello teorico per gli algoritmi, e la Tesi di Church è un'affermazione, non qualcosa che viene "eseguito".
    
    [Opzione D]
    La Macchina di Turing e la Tesi di Church sono concetti indipendenti che non hanno alcuna relazione con la definizione di algoritmo.
    [Feedback D]
    Non è corretto. Tutti e tre i concetti sono strettamente interconnessi nella teoria della computazione.
    
  • RAG (Retrieval Augmented Generation): è come dare a un'intelligenza artificiale un libro di testo aperto sulla pagina giusta prima di chiederle di rispondere a una domanda difficile. Integra la generazione di testo con il recupero di informazioni da fonti esterne per risposte più accurate e aggiornate.

  • Reflection pattern: è una tecnica di prompting avanzata che incoraggia un LLM a migliorare le proprie risposte attraverso un processo di auto-critica e revisione. Invece di accettare la prima risposta, si chiede al modello di "riflettere" su ciò che ha prodotto, identificarne i difetti e quindi generare una versione migliorata. Funziona in modo simile a come un essere umano scrive una bozza, la rilegge per trovare errori o punti deboli, e poi la corregge per produrre un testo finale di qualità superiore.

    Il processo si articola tipicamente in questi passaggi:

    1. Generazione Iniziale (Bozza): Si fornisce un primo prompt per ottenere una risposta iniziale.
    • Esempio: `"Scrivi un breve paragrafo che descriva i vantaggi dell'energia solare."*
      1. Prompt di Riflessione (Critica): Si chiede al modello di analizzare la propria risposta, agendo come un esperto o un critico.
    • Esempio: `"Ora, analizza il paragrafo che hai scritto. È abbastanza convincente? Potresti aggiungere dati specifici o esempi per renderlo più d'impatto? Manca qualche svantaggio importante per dare una visione equilibrata?"*
      1. Generazione Migliorata (Revisione): Si chiede al modello di riscrivere la risposta originale basandosi sulla sua stessa critica.
    • Esempio: `"Basandoti sulla tua analisi, riscrivi il paragrafo per renderlo più persuasivo e bilanciato."*

    Questo approccio a più passaggi aiuta a ottenere risposte più accurate, dettagliate e sfumate, riducendo al contempo la probabilità di errori o "allucinazioni".

Altre tecniche

  • Few-shot Prompting: Fornisce alcuni esempi di input-output desiderati per guidare il modello.
  • Self-Consistency: Genera più risposte e poi seleziona la più coerente.
  • Generated Knowledge Prompting: Chiede all'LLM di generare conoscenze rilevanti prima di rispondere alla domanda principale.
  • Chain-of-Thought (CoT): Incoraggia l'LLM a "pensare ad alta voce" e a mostrare i passaggi intermedi del suo ragionamento.
  • Automatic Prompt Engineer (APE): Utilizza un altro LLM per generare e ottimizzare i prompt.

Codici Segreti per Prompt Avanzati

Per sbloccare il pieno potenziale, si possono usare dei "codici segreti", che non sono comandi di programmazione, ma specifiche frasi e strutture di prompt che attivano risposte più avanzate e mirate.

Vengono elencati 10 di questi "codici":

  • ELI5 (Spiega come se avessi 5 anni): Per ottenere spiegazioni semplici su argomenti complessi.
  • TL;DR (Troppo lungo; Non letto): Per riassumere rapidamente testi lunghi.
  • Jargonize: Per rendere un testo più professionale e forbito.
  • Umanizzare: Per rimuovere il tipico tono robotico dalle risposte dell'IA.
  • Tecnica Feynman: Per un apprendimento approfondito che scompone i concetti in passaggi semplici.
  • Metodo Socratico: Per trasformare ChatGPT in un tutor che insegna ponendo domande.
  • Riscrivi come [persona specifica]: Per imitare lo stile di una persona o di un personaggio (es. un Redditor sarcastico, Steve Jobs).
  • Prompt inverso: Per capire quale prompt potrebbe aver generato un determinato testo.
  • Controllo della temperatura: Per regolare il livello di creatività (alto) o di precisione (basso) delle risposte. Autocritica: Per chiedere a ChatGPT di analizzare e migliorare la propria risposta.

Fine tuning

Specializzazione

Il fine-tuning tradizionale dei modelli linguistici (LLM), è un processo "distruttivo". Invece di aggiungere conoscenza, si rischia di sovrascrivere e danneggiare le capacità preesistenti del modello, con conseguenze negative e inaspettate.

L'approccio raccomandato è quello di utilizzare metodi modulari, che iniettano nuove informazioni senza alterare il modello di base. Le principali alternative proposte sono:

  • Retrieval-Augmented Generation (RAG): Amplia la conoscenza del modello in tempo reale consultando database esterni. Sebbene la RAG di base possa essere limitata per compiti complessi, esistono tecniche più avanzate per migliorarne le prestazioni.
  • Moduli Adattatore e LoRA: Aggiungono piccole "sottoreti" specializzate per compiti specifici (come la formattazione), lasciando intatto il nucleo del modello. -Prompting Contestuale: Sfrutta le capacità esistenti del modello attraverso l'ingegneria dei prompt, senza apportare alcuna modifica permanente.

In conclusione, è preferibile "aumentare" le capacità di un LLM con queste tecniche piuttosto che rischiare di comprometterlo con un riaddestramento completo.

Modelli

Quando l'IA pensa.

Un modello di intelligenza artificiale è un programma informatico che, attraverso l'apprendimento da dati, è in grado di svolgere un compito specifico. Nel contesto degli LLM, un modello è una rete neurale addestrata per comprendere e generare linguaggio umano.

Analisi delle performance

AI Index

Altri indici da Stanford

Inseguimento US-China

Tipi di modelli

  • Modelli di base (Foundation Models): Modelli di grandi dimensioni addestrati su un'enorme quantità di dati non etichettati, capaci di svolgere una vasta gamma di compiti. Sono la base su cui vengono costruiti altri modelli.
  • Modelli specializzati: Modelli di base che sono stati ulteriormente addestrati (fine-tuned) su dataset specifici per eccellere in un particolare compito o dominio (es. codice, medicina, finanza).

Mainstream models

  • GPT-5: Il modello più avanzato di OpenAI, noto per le sue capacità multimodali e di ragionamento.
  • Gemini: La famiglia di modelli multimodali di Google, progettata per essere altamente efficiente e versatile.
  • Claude: Sviluppato da **Anthropic*, è un modello focalizzato sulla sicurezza e l'etica, con un'ottima capacità di gestire conversazioni lunghe.
  • Qwen: Sviluppato da Alibaba Cloud, è una serie di modelli multilingue e multimodali.

Modelli open-source

  • Llama 2/3: Modelli open-source di Meta AI, molto popolari nella comunità di ricerca e sviluppo per la loro accessibilità e prestazioni.
  • Mistral: Una famiglia di modelli open-source di Mistral AI, noti per le loro prestazioni elevate e l'efficienza.
  • Falcon: Sviluppato da Technology Innovation Institute (TII), è una serie di modelli open-source con diverse dimensioni.
  • DeepSeek Coder: Un modello open-source specializzato nella generazione di codice, addestrato su un vasto corpus di codice.

Dove scaricare i modelli open-source:

Agenti

Quando l'IA collabora con altre IA.

Gli agenti basati su LLM sono sistemi autonomi che utilizzano modelli linguistici di grandi dimensioni (LLM) per ragionare, pianificare ed eseguire azioni al fine di raggiungere un obiettivo. A differenza dei semplici chatbot che rispondono a prompt, gli agenti possono interagire con l'ambiente, utilizzare strumenti e persino imparare dai propri errori.

Componenti chiave di un agente LLM:

  • Pianificazione: L'agente scompone un obiettivo complesso in passaggi più piccoli e gestibili.
  • Memoria: Gli agenti possono avere diversi tipi di memoria (a breve termine, a lungo termine) per conservare informazioni rilevanti e imparare dalle esperienze passate.
  • Strumenti: Gli agenti possono utilizzare strumenti esterni (API, funzioni, database) per estendere le loro capacità e interagire con il mondo reale.
  • Ragionamento: L'LLM funge da "cervello" dell'agente, elaborando informazioni, prendendo decisioni e generando output.

Esempi di framework e librerie per la creazione di agenti:

  • LangChain: Una libreria popolare per lo sviluppo di applicazioni basate su LLM, inclusi gli agenti. Offre moduli per la gestione della memoria, l'uso di strumenti e la creazione di catene di ragionamento.
  • AutoGPT: Un esempio di agente autonomo che può generare e eseguire i propri prompt per raggiungere un obiettivo.
  • BabyAGI: Un altro esempio di agente autonomo che si concentra sulla gestione di un elenco di attività e sull'esecuzione iterativa.

Casi d'uso degli agenti LLM:

  • Automazione di compiti: Gli agenti possono automatizzare processi complessi che richiedono ragionamento e interazione con sistemi esterni.
  • Ricerca e analisi: Possono raccogliere informazioni da diverse fonti, analizzarle e presentare sintesi.
  • Assistenti personali avanzati: Agenti più sofisticati possono gestire calendari, inviare email, prenotare appuntamenti e molto altro.
  • Sviluppo software: Agenti possono aiutare nella generazione di codice, nel debugging e nel testing.

Sfide e considerazioni:

  • Affidabilità: Gli agenti possono commettere errori o generare risultati inaspettati.
  • Sicurezza:

Model Context Protocol (MCP)

Quando l'IA ha bisogno di un contesto.

Un Model Context Protocol è un insieme di standard e linee guida per la gestione e lo scambio di contesto tra modelli di intelligenza artificiale, in particolare LLM. L'obiettivo è migliorare la coerenza e la continuità delle interazioni con i modelli, permettendo loro di "ricordare" meglio le conversazioni precedenti e di utilizzare informazioni contestuali in modo più efficace.

In altri termini gli MCP sono fonti di informazioni o strumenti di accesso al mondo esterno che una IA può utilizzare per supportare le sue attività e per arricchire le proprie risposte.

Componenti chiave di un MCP:

  • Definizione del contesto: Specifica quali tipi di informazioni contestuali devono essere scambiati (es. cronologia della conversazione, preferenze dell'utente, dati esterni).
  • Formato dei dati: Stabilisce un formato standardizzato per la rappresentazione e lo scambio del contesto.
  • Meccanismi di interazione: Definisce come i modelli possono accedere, aggiornare e utilizzare il contesto.

Vantaggi degli MCP:

  • Migliore coerenza: I modelli possono mantenere una comprensione più profonda della conversazione, evitando ripetizioni o risposte fuori contesto.
  • Personalizzazione: Permette ai modelli di adattare le risposte alle preferenze e alla storia dell'utente.
  • Integrazione facilitata: Semplifica l'integrazione di diversi modelli e sistemi che devono condividere informazioni contestuali.
  • Scalabilità: Facilita la gestione del contesto in applicazioni complesse con molteplici interazioni.

Esempi di utilizzo:

  • Chatbot avanzati: Un chatbot può "ricordare" le preferenze dell'utente da sessioni precedenti.
  • Assistenti virtuali: Un assistente può utilizzare il contesto della posizione o del calendario per fornire risposte più pertinenti.
  • Sistemi di raccomandazione: Un sistema può tenere conto della cronologia di navigazione o degli acquisti per suggerire prodotti.

Risorse:

Hardware

Quando l'IA ha bisogno di potenza.

Tra il 2009 e il 2012 emerge l'intuizione che le GPU possono essere dei potenti motori per l'intelligenza artificiale. Questa presa di coscienza è nata dall'unione di due fattori chiave: la natura dei calcoli necessari per le reti neurali e lo sviluppo di piattaforme che rendono le GPU programmabili.

Tutto ruota attorno a un'idea semplice: l'addestramento di una rete neurale consiste in una quantità enorme di calcoli relativamente semplici, ma altamente ripetitivi, noti come operazioni su matrici. Le CPU (i processori tradizionali) sono come dei "chirurghi": hanno pochi "nuclei" (core) molto intelligenti, perfetti per eseguire compiti complessi in sequenza. Le GPU, nate per la grafica, sono invece come un'"armata": hanno migliaia di "soldati" (core) più semplici, ideali per eseguire lo stesso, semplice compito in parallelo su una vasta area, proprio come colorare i milioni di pixel di uno schermo.

I ricercatori si sono resi conto che l'addestramento di un'IA era molto più simile al lavoro di un'armata che a quello di un chirurgo.

Nel 2009, un gruppo di ricercatori della Stanford University, tra cui il celebre Andrew Ng, pubblica uno studio intitolato "Large-scale Deep Unsupervised Learning using Graphics Processors". Questo lavoro dimostrava che, utilizzando le GPU, era possibile costruire e addestrare reti neurali molto più grandi e complesse di quanto fosse mai stato possibile prima. In altri termini hanno scoperto che una manciata di GPU poteva eguagliare la potenza di calcolo di centinaia o addirittura migliaia di CPU per questo tipo di lavoro, riducendo i tempi di addestramento da settimane a giorni.

Tutto questo è stato possibile grazie a NVIDIA CUDA, una piattaforma software rilasciata nel 2007. Prima di CUDA, programmare le GPU per scopi non grafici era un'impresa estremamente complessa. CUDA ha fornito un linguaggio (simile al C) che ha aperto le porte a scienziati e ricercatori, permettendo loro di sfruttare la potenza di calcolo parallelo delle GPU per qualsiasi tipo di problema scientifico, inclusa l'IA.

È però nel 2012, con la vittoria schiacciante del modello AlexNet alla competizione di riconoscimento di immagini ImageNet, che l'intera comunità scientifica capisce che le GPU sono fondamentali per il futuro dell'IA.

AlexNet, una rete neurale convoluzionale profonda sviluppata da Alex Krizhevsky, Geoffrey Hinton e Ilya Sutskever, è stata addestrata su due GPU NVIDIA GTX 580. Non solo ha vinto, ma ha acnhe superato i modelli precedenti con un margine di errore così basso da cambiare per sempre la percezione di intelligenza artificiale. Il successo di AlexNet è direttamente attribuibile alla possibilità di addestrare un modello così grande e complesso in un tempo ragionevole, un'impresa impossibile senza la potenza di calcolo parallelo delle GPU.

Dopo AlexNet, l'intera industria dell'IA si è spostata in massa verso l'uso delle GPU, dando il via alla rivoluzione del deep learning che stiamo vivendo oggi.

Benchmark

Un modo per valutare la velocità di esecuzione del proprio hardware è utilizzare un benchmark come ai-benchmark (specifico per smartphone) o geekbench (specifico per PC), su cui si possono vedere i test caricati effettuati dagli utenti sui propri dispositivi, come quello che segue (da geekbench).

Hardware Framework Single Prec Half Prec Quantzd
NVIDIA RTX 5090 ONNX DirectML 53.861 81.080 38.938
NVIDIARTX 4090 ONNX DirectML 41.036 57.800 30.205
AMD RX 7900 XTX ONNX DirectML 35.133 41.452 27.568
Apple M4 Max Core ML NPU 6.033 37.190 50.509
Apple M4 Max Core ML GPU 23.336 26.195 23.751
Apple M3 24GB* Core ML NPU 4.040 31.001 34.591
Apple M3 24GB* Core ML GPU 8.791 9.826 9.847

Note: (*) il mio attuale MacBook Air con Apple Silicon M3 e 24GB di RAM.

Elenco di alcune schede grafiche e relativo costo

Scheda Grafica (GPU) VRAM Minima Raccomandata Costo Approssimativo (USD) Note
NVIDIA RTX 3060 12 GB $300 - $400 Ottima per modelli di medie dimensioni (7B-13B parametri) e quantizzazioni Q4/Q5. Buon rapporto qualità/prezzo.
NVIDIA RTX 4060/4070 8/12 GB $300 - $600 Buone opzioni entry-level, ma la VRAM potrebbe essere limitante per i modelli più grandi o per quantizzazioni meno aggressive.
NVIDIA RTX 3090 24 GB $700 - $1000 Eccellente per modelli più grandi (fino a 30B parametri) o per eseguire più modelli contemporaneamente.
AMD RX 7900 XT 20/24 GB $700 - $1000 Alternative valide alle NVIDIA, specialmente per la VRAM offerta, ma il supporto software per LLM potrebbe essere meno maturo.
NVIDIA RTX 4090 24 GB $1600 - $2000+ La top di gamma per il consumer, offre prestazioni eccezionali e VRAM sufficiente per la maggior parte dei modelli attuali.
NVIDIA RTX 5090 24 GB $1600 - $2000+ La top di gamma per il consumer, offre prestazioni eccezionali e VRAM sufficiente per la maggior parte dei modelli attuali.
NVIDIA A100/H100 40/80 GB $10.000+ Schede professionali per data center, ideali per l'addestramento di modelli molto grandi o per inferenza su scala industriale. Non per uso consumer.

Considerazioni aggiuntive sulla memoria:

  • Quantizzazione: I modelli possono essere "quantizzati" (ridotti in precisione, es. Q4, Q5, Q8) per ridurre i requisiti di VRAM e RAM. Una quantizzazione più bassa (es. Q4) richiede meno VRAM ma può sacrificare leggermente la qualità dell'output.
  • RAM di Sistema: È consigliabile avere almeno 16GB, ma 32GB o più sono ideali, specialmente se si eseguono modelli quantizzati che utilizzano la RAM di sistema.

Software

L'interfaccia dell'IA.

Applicazioni client

Applicazioni dove si possono utilizzare modelli LLM (tipicamente con un approccio testuale domanda-risposta):

  • Ollama: Un'applicazione desktop e server tcp.
  • GPT4All: Un'applicazione desktop e server tcp.
  • LibreChat: Un'interfaccia utente self-hosted e open-source per l'interazione con vari modelli LLM, sia locali che remoti.

Applicazioni server

Applicazioni che consentono di far girare i modelli in modo locale, sul proprio computer.

  • Ollama: Un modo semplice per eseguire modelli linguistici di grandi dimensioni (LLM) localmente.
  • LM Studio: Permette di scaricare ed eseguire modelli LLM locali sul proprio computer.
  • Oobabooga Text Generation WebUI: Un'interfaccia web per l'esecuzione di modelli LLM locali, con molte funzionalità e personalizzazioni.
  • LocalAI: Un'alternativa self-hosted e open-source a OpenAI, che consente di eseguire modelli LLM localmente tramite API compatibili con OpenAI.

I modelli linguistici (LLM) sono in genere molto esigenti in termini di risorse e, a seconda della dimensione in termini di parametri (espressi in milioni m o miliardi b) e alla quantizzazione (il numero di bit con cui vengono rappresentati i parametri) dei modelli, sono necessarie risorse hardware adeguate (RAM, VRAM, CPU).

Applicazioni basate su agenti

  • Agent-zero: Un framework per la creazione di agenti autonomi basati su LLM, con un focus sulla modularità e l'estensibilità.
  • Auto-GPT: Un agente autonomo sperimentale che può generare e eseguire i propri prompt per raggiungere un obiettivo.
  • BabyAGI: Un altro agente autonomo che si concentra sulla gestione di un elenco di attività e sull'esecuzione iterativa.
  • AgentGPT: Consente di configurare e distribuire agenti autonomi basati su LLM direttamente nel browser.

Framework e librerie python

  • Llama-cpp-python: Binding Python per llama.cpp, che consente l'inferenza di LLM su CPU.
  • Transformers (Hugging Face): Una libreria completa per l'utilizzo di modelli pre-addestrati per NLP, inclusi LLM.
  • LangChain: Un framework per lo sviluppo di applicazioni basate su LLM, che facilita l'integrazione di modelli, la gestione della memoria e l'uso di strumenti.
  • Haystack: Un framework open-source per la creazione di pipeline di ricerca e QA basate su LLM.
  • ONNX

Sviluppo software (e non solo)

  1. Gemini Web App (gemini.google.com)  
    L'interfaccia web standard di Gemini (anche in versione Advanced) permette di usare file personali come base per il RAG in modo semplice e diretto, ma limitato alla singola sessione di chat.

    • Come funziona: Puoi caricare direttamente i tuoi file (PDF, documenti, fogli di calcolo, immagini) nella finestra di chat. Gemini analizzerà il contenuto di questi file e li userà come contesto primario per rispondere alle tue domande successive.
    • Procedura:
      1. Vai su gemini.google.com.
      2. Nella barra del prompt, clicca sull'icona "Aggiungi file" o trascina i documenti direttamente nella finestra. Puoi caricare fino a 10 file.
      3. Una volta caricati, poni la tua domanda. Gemini baserà la sua risposta sul contenuto dei file forniti.
    • Limiti: Questa funzionalità è eccellente per analisi rapide, ma non crea una base di conoscenza persistente. I file sono disponibili solo per la durata della conversazione corrente.
  2. Google AI Studio  
    Per un approccio da sviluppatore più persistente, si utilizza Google AI Studio.

    • Come funziona: Non si "carica" un file per ogni prompt. Si crea un "corpus" di dati che viene indicizzato. L'applicazione RAG interrogherà questo corpus per recuperare il contesto. Questo processo richiede la generazione di "embeddings" (rappresentazioni numeriche del testo).
    • Procedura (semplificata):
      1. Caricamento Dati: Tramite l'API, si caricano i documenti.
      2. Generazione Embeddings: Si utilizza un modello di embedding (es. text-embedding-004) per convertire i pezzi di testo in vettori numerici.
      3. Recupero e Generazione: Quando l'utente fa una domanda, l'applicazione cerca i vettori più simili nel suo indice e passa i testi corrispondenti a Gemini come contesto per generare la risposta.
    • Ideale per: Creare prototipi di applicazioni RAG personalizzate.
  3. IDE quali VS Code e Pycharm  
    In IDE come VS Code e PyCharm, il processo è diverso perché l'IDE non è il servizio che esegue il RAG, ma l'ambiente in cui si scrive il codice per costruirlo. In pratica, non si "carica" un libro nell'IDE, ma si deve scrivere uno script Python che utilizza framework come LangChain o LlamaIndex per eseguire il processo di indicizzazione e interrogazione. L'IDE ti fornisce gli strumenti per scrivere, eseguire e testare questo codice in modo efficiente.

Utilizzo dei Context Povider (negli IDE)

Come trasformare l'assistente AI dell'IDE da un "esperto generico" che conosce il mondo a un "esperto del tuo progetto" che conosce a menadito la tua base di codice e la tua documentazione.

Questa funzionalità, sebbene emergente, è esattamente dove si sta dirigendo lo sviluppo di questi strumenti. Non si tratta più di scrivere uno script RAG da zero, ma di usare le funzionalità RAG integrate nei plugin dell'IDE.

Il meccanismo RAG negli IDE si basa su dei "Context Provider". Invece di "indicizzare" manualmente i file, si configura il plugin per dire all'IA quali file e cartelle considerare come fonte di verità. Quando si pone una domanda o si chiede un suggerimento, l'IA prima "legge" le parti pertinenti di questo contesto e poi formula la sua risposta.

Come Preparare la Base di Conoscenza (per qualsiasi IDE)

Questa è la parte più importante e precede la configurazione. La qualità del RAG dipende al 90% dalla qualità della documentazione.

  1. Crea una Cartella docs/: Tieni tutta la documentazione di riferimento in una cartella specifica nel tuo progetto.
  2. Usa il Formato Markdown (.md): È il formato migliore. Scrivi file Markdown chiari e ben strutturati con titoli, liste e blocchi di codice. L'IA li analizza molto facilmente.
  3. Sii Specifico: Includi esempi di codice, spiegazioni delle API interne, standard di codifica del team, e guide all'architettura del software.
  4. Commenta il Codice: L'IA usa anche i commenti nel codice e le docstring come fonte di conoscenza. Un codice ben commentato è una base RAG eccellente.

In Visual Studio Code (VS Code)

VS Code, grazie alla sua natura aperta, offre diverse opzioni potenti.

1. GitHub Copilot (Business o Enterprise)

La versione standard di Copilot si basa principalmente sulla sua conoscenza generale e sul codice che hai aperto. Le versioni a pagamento, invece, integrano una forma di RAG.

  • Come si Fornisce la Base: Non c'è un'azione manuale. Se la tua organizzazione ha una licenza GitHub Copilot Enterprise, l'amministratore può abilitare l'indicizzazione di interi repository. Quando lavori su quel progetto, Copilot userà automaticamente tutto il codice e i file Markdown di quel repository come base di conoscenza per fornirti suggerimenti e risposte in chat.
  • Ideale per: Team e aziende che lavorano su codebase private ospitate su GitHub.

2. Continue.dev (La Scelta Migliore per il Controllo)

Continue è un plugin open-source che ti dà il controllo totale sul contesto RAG e ti permette anche di usare modelli locali (Ollama, LM Studio, etc.). È probabilmente la soluzione che più si avvicina al tuo obiettivo.

  • Come si Fornisce la Base: Crei un file di configurazione (config.json o config.ts) dove definisci esplicitamente i tuoi "Context Provider". Puoi indicare:
    • Intere cartelle ("provider": "folder").
    • Siti web di documentazione.
    • File specifici.
  • Come si Usa: Quando scrivi un prompt nella chat, digiti @ e un menu ti mostrerà le basi di conoscenza che hai configurato (es. @docs, @database_schema). Selezionandone una, Continue allegherà i contenuti pertinenti al tuo prompt prima di inviarlo all'IA.

In PyCharm (e altri IDE JetBrains)

L'ecosistema JetBrains gestisce il RAG tramite il suo plugin AI Assistant.

1. JetBrains AI Assistant

L'approccio di PyCharm è più interattivo e orientato alla singola sessione di chat.

  • Come si Fornisce la Base: La funzionalità RAG si attiva principalmente tramite la chat dell'AI Assistant.
    1. Contesto Implicito: L'assistente è già consapevole del contesto del tuo progetto, in particolare dei file che hai aperto.
    2. Contesto Esplicito (la funzione chiave): All'interno della chat, c'è un pulsante "Attach" (+). Cliccandolo, puoi aggiungere specifici file o intere cartelle alla conversazione. L'AI userà questi file come base di conoscenza prioritaria per rispondere alle tue domande in quella sessione.
  • Ideale per: Analisi mirate, ad esempio "Spiegami questo file" o "Basandoti sulla cartella docs/api, scrivimi una funzione client per questo endpoint".

Fonti

;)