Dettaglio insegnamento

PROGRAMMAZIONE DI APPLICAZIONI INTELLIGENTI

MF0781

Insegnamento
PROGRAMMAZIONE DI APPLICAZIONI INTELLIGENTI
Codice
MF0781
Anno Accademico
2026/2027
Anno regolamento
2024/2025
Corso di studio
INFORMATICA
Curriculum
000 - CORSO GENERICO
Responsabile didattico
CFU
6
Ore di lezione
48
Settore Scientifico Disciplinare (SSD)
INF/01 - INFORMATICA
Tipo di insegnamento
Attività formativa monodisciplinare
Fruizione insegnamento
OPZ - Opzionale
Anno
3
Periodo
Secondo Semestre
Sede
VERCELLI
Lingua insegnamento
Italiano
Contenuti
L’insegnamento presenta i fondamenti teorici e gli strumenti pratici necessari per progettare e sviluppare applicazioni software basate sull’intelligenza artificiale, con particolare attenzione ai Large Language Model (LLM).

Dopo una sintetica introduzione all’apprendimento automatico e alle reti neurali, vengono approfonditi la rappresentazione vettoriale del testo, i meccanismi di attenzione, l’architettura Transformer, il ciclo di vita degli LLM, le strategie di generazione, le tecniche di efficientamento e i criteri di valutazione.

La parte applicativa riguarda l’utilizzo dei modelli mediante API o inferenza locale, il prompt e context engineering, gli output strutturati, il tool calling, i protocolli di interoperabilità, la programmazione assistita dall’AI, la Retrieval-Augmented Generation e la progettazione di agenti, workflow e team di agenti.

Sono inoltre affrontati gli aspetti relativi a memoria, tracing, guardrail, interazione umana, deployment, quantizzazione e integrazione tra interfacce utente e backend AI.
Testi di riferimento
Testo principale
Jay Alammar, Maarten Grootendorst, Hands-On Large Language Models: Language Understanding and Generation, O’Reilly Media, 2024.

Testi di approfondimento
Sebastian Raschka, Build a Large Language Model (From Scratch), Manning Publications, 2024.
Afshine Amidi, Shervine Amidi, Super Study Guide: Transformers & Large Language Models, Amazon Fulfillment, 2024.
Obiettivi formativi
L’insegnamento, pari a 6 CFU, comprende 48 ore di attività frontali, articolate indicativamente in 36 ore di didattica erogativa e 12 ore di didattica interattiva.

L’obiettivo generale è fornire le conoscenze e le competenze necessarie per comprendere, progettare, realizzare e valutare applicazioni software basate su modelli di intelligenza artificiale generativa.

Al termine dell’insegnamento, le studentesse e gli studenti dovranno essere in grado di:
1. Spiegare i principi essenziali delle reti neurali, dell’attenzione, dei Transformer e dei Large Language Model;
2. Utilizzare modelli pre-addestrati, tramite servizi remoti o inferenza locale, all’interno di applicazioni software;
3. Progettare e implementare componenti basati su prompt, output strutturati, strumenti esterni, sistemi RAG e agenti;
4. Valutare criticamente modelli e architetture applicative considerando qualità dei risultati, affidabilità, latenza, costo, privacy, sicurezza e vincoli di deployment;
5. Documentare e presentare le scelte progettuali, i risultati sperimentali e i limiti di un sistema basato su AI mediante un linguaggio tecnico appropriato.

L’insegnamento contribuisce alla formazione informatica applicativa, fornendo strumenti per integrare metodologie di intelligenza artificiale nella progettazione e nello sviluppo di sistemi software contemporanei.
Prerequisiti
È richiesta una conoscenza di base della programmazione in Python, comprendente tipi e strutture dati, funzioni, classi, gestione dei moduli e utilizzo di librerie esterne.

Sono inoltre richieste conoscenze introduttive di algebra lineare, in particolare vettori, matrici e operazioni matriciali, nonché una comprensione di base del concetto di derivata.

La familiarità con la riga di comando, Git, gli ambienti virtuali Python e i principi delle API HTTP/REST è utile, ma tali argomenti saranno richiamati quando necessario.

Non sono richieste conoscenze pregresse specialistiche relative ai Large Language Model.
Metodi didattici
L’insegnamento comprende circa 36 ore di didattica erogativa e 12 ore di didattica interattiva svolta prevalentemente in laboratorio informatico.

Le lezioni combinano:
- Presentazione e discussione dei concetti teorici;
- Esempi svolti e sessioni di live coding;
- Esercitazioni guidate individuali o in piccoli gruppi;
- Analisi comparativa di modelli, architetture e strategie di implementazione;
- Sviluppo progressivo di componenti software basati su AI;
- Attività di progettazione e sperimentazione collegate al progetto d’esame.

Le esercitazioni consentono di applicare direttamente i concetti presentati, verificare il comportamento dei modelli, osservare i principali modi di fallimento e acquisire familiarità con librerie, API e strumenti di sviluppo.

Slide, notebook, codice sorgente, consegne delle esercitazioni e materiale integrativo saranno pubblicati sulla piattaforma DIR. Le versioni specifiche delle librerie e degli strumenti potranno essere aggiornate per tenere conto dell’evoluzione tecnologica, senza modificare gli obiettivi formativi e i contenuti fondamentali dell’insegnamento.

Le studentesse e gli studenti non frequentanti sono tenuti a fare riferimento allo stesso programma e alle stesse modalità di verifica e devono consultare regolarmente i materiali pubblicati sulla piattaforma DIR.
Altre informazioni
Le comunicazioni, il materiale didattico, gli esempi di codice, le istruzioni per le esercitazioni e le indicazioni relative al progetto saranno pubblicati sulla piattaforma DIR.

Il progetto d’esame deve essere concordato o approvato dalla docente o dal docente prima del suo sviluppo definitivo. Per i progetti di gruppo, tutte le persone componenti devono conoscere l’intero sistema realizzato ed essere in grado di illustrare il proprio contributo e le principali scelte progettuali.

Le studentesse e gli studenti con disabilità, con Disturbi Specifici dell’Apprendimento — DSA — o con Bisogni Educativi Speciali — BES — possono richiedere i servizi e gli strumenti specifici messi a disposizione dall’Ateneo, rivolgendosi allo Staff Sviluppo e Coordinamento Carriere e Servizi alle Studentesse e agli Studenti e consultando la pagina dedicata del sito di Ateneo.

Una volta preso contatto con lo Staff, le studentesse e gli studenti interessati possono rivolgersi alla docente o al docente titolare per concordare l’applicazione delle misure previste agli aspetti didattici e alle modalità d’esame.
Modalità di verifica dell'apprendimento
L’esame è composto da due parti obbligatorie.

1. Progetto pratico — due terzi del voto finale

Il progetto può essere svolto individualmente oppure in un gruppo composto da un massimo di tre persone. L’argomento può essere proposto dalle studentesse e dagli studenti, previa approvazione della docente o del docente, oppure scelto tra le proposte messe a disposizione durante il corso.

La consegna comprende:
- Codice sorgente del sistema sviluppato;
- Istruzioni necessarie per eseguirlo o riprodurne i risultati;
- Breve relazione tecnica contenente obiettivi, architettura, strumenti e modelli utilizzati, scelte progettuali, modalità di valutazione, risultati ottenuti e limiti riscontrati;
dimostrazione e discussione del sistema.

La valutazione del progetto considera:
- Correttezza funzionale e robustezza nei casi d’uso previsti;
- Adeguatezza dell’architettura e delle tecniche adottate;
- Capacità di valutare i risultati e riconoscere errori, limiti e possibili rischi;
- Consapevolezza dei compromessi tra qualità, latenza, costo, privacy, sicurezza e manutenibilità;
- Qualità del codice, della documentazione e della riproducibilità;
- Capacità di motivare le decisioni progettuali e rispondere alle domande durante la discussione.

Nei lavori di gruppo viene inoltre verificato il contributo individuale. Le persone appartenenti allo stesso gruppo possono pertanto ricevere valutazioni differenti.

2. Prova scritta individuale — un terzo del voto finale

La prova scritta verte sull’intero programma e comprende quesiti teorici, domande a risposta aperta breve e/o esercizi di analisi e progettazione.

La prova verifica:
- La conoscenza dei fondamenti teorici e metodologici;
- La comprensione delle architetture e delle tecniche presentate;
- La capacità di confrontare soluzioni differenti;
- La capacità di individuare la tecnica più appropriata per uno scenario applicativo;
- La capacità di riconoscere limiti, errori e principali modi di fallimento dei sistemi basati su LLM.

La consegna e la discussione del progetto costituiscono condizione necessaria per accedere alla prova scritta. Entrambe le parti devono ottenere una valutazione di almeno 18/30.

Il voto finale è calcolato attribuendo un peso pari a due terzi al voto del progetto e a un terzo al voto della prova scritta.

Per conseguire la sufficienza è necessario dimostrare la comprensione dei concetti fondamentali, presentare un progetto funzionante nei principali casi d’uso e saper descrivere e motivare le scelte essenziali.

Valutazioni superiori alla sufficienza richiedono maggiore completezza e precisione, capacità di collegare argomenti diversi, autonomia nell’analisi dei problemi e valutazione critica dei risultati.

La lode richiede il punteggio massimo in entrambe le parti e un livello eccellente nella qualità tecnica e documentale del progetto, nella profondità dell’analisi critica, nell’autonomia dimostrata e nella chiarezza dell’esposizione.
Programma esteso
1. Fondamenti di intelligenza artificiale e reti neurali
- Evoluzione dell’intelligenza artificiale e paradigmi dell’apprendimento automatico.
- Percettrone, reti neurali profonde, funzioni di perdita, discesa del gradiente e backpropagation.
- Vanishing gradient, batch normalization, skip connection e introduzione a PyTorch.

2. Large Language Model e architettura Transformer
- Tokenizzazione, embedding, self-attention e architettura Transformer.
- Strategie di decoding, addestramento e valutazione degli LLM.
- Flash Attention, Paged Attention, Mixture of Experts ed efficientamento dell’inferenza.

3. Sviluppo di applicazioni basate su LLM
- Utilizzo di modelli mediante API e inferenza locale.
- Prompt engineering e context engineering.
- Output strutturati e tool calling.
- Introduzione al Model Context Protocol (MCP).

4. Programmazione assistita dall’intelligenza artificiale
- Coding agents e Spec-Driven Development.
- Utilizzo critico degli strumenti di assistenza alla programmazione.
- Verifica e revisione del codice generato.

5. Retrieval-Augmented Generation (RAG)
- Struttura di una pipeline RAG.
- Ricerca densa, BM25 e ricerca ibrida.
- Query rewriting e re-ranking.
- Costruzione e valutazione del contesto fornito al modello.

6. Agenti e sistemi agentici
- Pattern ReAct e realizzazione di agenti basati su LLM.
- Agenti, workflow e team di agenti.
- Strumenti, sessioni, stato, tracing, memoria e knowledge base.
- Human in the loop e guardrail.

7. Deployment e integrazione
- Inferenza locale, quantizzazione, requisiti hardware e limiti.
- Integrazione tra interfaccia utente e backend AI.
- Protocolli per applicazioni agentiche, compreso AG-UI.

8. Attività di laboratorio
- Esercitazioni con PyTorch.
- Utilizzo di API di inferenza.
- Generazione di output strutturati e tool calling.
- Realizzazione di agenti e pipeline RAG.

Integrazione della dimensione di genere
Saranno discussi esempi di bias nei dati e negli output dei modelli, compresi casi di discriminazione di genere, insieme alle principali tecniche di rilevazione e mitigazione.
Risultati di apprendimento attesi
Conoscenza e capacità di comprensione
Al termine dell’insegnamento, le studentesse e gli studenti saranno in grado di:
- descrivere i principi essenziali delle reti neurali e del loro addestramento;
- spiegare tokenizzazione, embedding, self-attention e architettura Transformer;
- descrivere funzionamento, capacità e limiti dei Large Language Model;
- distinguere tra prompt engineering, RAG, workflow e agenti.

Capacità di applicare conoscenza e comprensione
Le studentesse e gli studenti saranno in grado di:
- utilizzare modelli remoti o locali all’interno di un’applicazione software;
- generare output strutturati e integrare strumenti esterni;
- progettare una pipeline RAG;
- realizzare un semplice agente o workflow;
- applicare procedure di test, tracing e valutazione.

Autonomia di giudizio
Le studentesse e gli studenti saranno in grado di:
- confrontare modelli e architetture differenti;
- scegliere soluzioni coerenti con i requisiti applicativi;
- valutare qualità, costo, latenza, robustezza, privacy e sicurezza;
- riconoscere i principali limiti e modi di fallimento dei sistemi basati su LLM.

Abilità comunicative
Le studentesse e gli studenti saranno in grado di:
- documentare e presentare un sistema basato su intelligenza artificiale;
- illustrarne architettura, risultati, scelte progettuali e limiti;
- utilizzare una terminologia tecnica appropriata.

Capacità di apprendimento
Le studentesse e gli studenti saranno in grado di:
- consultare autonomamente la documentazione tecnica;
- comprendere e adattare esempi software;
- apprendere nuovi strumenti e tecnologie in un settore in rapida evoluzione.

Livello minimo richiesto
Per il conseguimento della sufficienza è richiesta la comprensione dei concetti fondamentali e la capacità di realizzare e descrivere un’applicazione funzionante di complessità contenuta.

Livello avanzato
Valutazioni elevate richiedono autonomia progettuale, capacità di integrare più componenti e analisi critica dei risultati e dei limiti della soluzione realizzata.
Ultimo aggiornamento:09-09-2026 00:14:31