Lavorare con LLM in locale: Strategie per ottenere risultati precisi e pratici per gli avvocati
Mentre preparavo l’articolo della settimana scorsa su come utilizzo un MacMini M1 da 8Gb per avere un LLM offline, ho provato ad utilizzare il mio LLM, Mistral:7B, per fare al mio posto la sinossi dell’articolo.
I vari tentativi che ho fatto mi hanno spinto a scrivere questo articolo che si occuperà dell’importanza del c.d. prompt engineering e dell’importanza della strutturazione dei contenuti di un documento.
1. Un documento strutturato viene digerito in modo più semplice dall’LLM
Prima di entrare nel dettaglio dell’articolo, voglio segnalare una mia personale impressione, che però può avere un suo fondamento: quando dai ad un LLM un testo strutturato per creare riassunti o estrarre informazioni dal documento i risultati sono migliori.
Nel corso del tempo ho preso la (sana) abitudine di “strutturare” tutti i documenti che scrivo.
Con strutturare intendo oltre che ideare una struttura logica su cui poi creo il mio atto o documento, spesso usando una mappa mentale a tale scopo, creo anche una struttura all’interno del documento.
Ciò avviene quando scrivo questi articoli e le mie note in Obsidian con i titoli e sotto-titoli e quando scrivo i miei atti e documenti giuridici in LaTeX con le sezioni e sottosezioni .
La struttura compositiva da chiarezza ai miei scritti (e prima ancora ai miei pensieri), la struttura organizzativa del documento, con sezioni e sottosezioni, titoli descrittivi delle singole parti costitutive del documento, rendono esplicita la struttura al lettore e, anche, al Large Language Model.
Rispetto ad un lettore umano gli LLM non capiscono il testo ma “vedono” la struttura. Ad esempio, esaminando in modo statistico un testo, possono dare importanza ad una sua parte o meglio comprendere il testo di una sezione in base al titolo della stessa.
Strutturando quindi i contenuti di un testo in modo specifico e chiaro, le informazioni contenuto della stesso possono essere meglio “riutilizzate” dall’LLM e, conseguentemente, le risposte dello stesso saranno migliori.
Nel mondo legale italiano, dove come dicevo nel mio precedente articolo, non ci sono sono dati strutturati e “digeriti”, questa considerazione credo abbiamo una importanza notevole.
Devo ancora fare test approfonditi (e nell’eventualità di esiti positivi te ne parlerò più avanti), ma una delle cose interessanti che è possibile fare con gli LLM offline è dare in pasto al modello i propri appunti o scritti (siano essi giuridici o meno) per insegnare e rendere intelligente il modello in ambiti in cui non era istruito.
Attualmente, per le mie note personali utilizzo il programma Obsidian. Dentro la mia cassaforte di Obsiadian inserisco passi interessanti dei libri che leggo nel tempo, la sottolineatura di articoli web (usando Omnivore) o le ricerche su argomenti giuridici che faccio per lavoro.
Queste ultime, se ben gestite, potrebbero diventare un importante strumento per rendere più “intelligente” il mio LLM offline.
1.1 Usare l’LLM offline nelle proprie note personali
In particolare, se sei curioso, ti segnalo 2 plugin di Obsidian che permettono di interfacciare le tue note con i modelli linguistici caricati in Ollama:
- Obsidian Ollama che permette di usare Ollama nelle proprie note, riscrivendole o riassumendole;
- Obsidian Ollama chat che ti permette di chiedere informazioni al tuo LLM locale sui tuoi appunti.
Anche qui non ho ancora avuto modo di approfondirne l’utilizzo pratico ma questi strumenti possono aiutare per una prima revisione e sintesi delle note c.d. temporanee (quelle che devono ancora sedimentare e diventare note definitive).
Esempio della interfaccia di configurazione e creazione dei possibili prompt di Obsidian Ollama
2. L’importanza del prompt engineering
Venendo al cuore dell’articolo, parliamo di un altro aspetto che ricopre, nel mondo degli LLM, un posto centrale: il prompt engineering.
Con tale termine si intende il processo di strutturazione del testo che può essere interpretato e compreso da un modello di intelligenza artificiale generativa. Il prompt è un testo in linguaggio naturale che descrive il compito che un'IA dovrebbe svolgere.
Poiché le IAG usano la statistica per “comprendere” il linguaggio umano, una richiesta, o prompt, generica e non specifica porterà ad una risposta generica e non specifica causando a volte quello che i marketer delle IA chiamano allucinazioni ovvero quanto una IAG genera testo casuale.
Sono ancora nella fase di neofita del prompt engineering e proprio per questo mi è parso utile descrivere qui alcuni miei tentativi per ottenere una sinossi nel mio precedente articolo.
2.1 Esempio di primo, semplice, prompt
Ho già parlato nell’articolo scorso di come passare un testo da riassumere a Mistral, LLM che uso io, quindi qui non mi ripeterò e darò per scontata l’operazione.
Primo prompt per riassumere l’articolo
Quello che segue è il prompt iniziale che avevo predisposto per avere la sinossi da Mistral.
> Prompt> : Riassumi in 100 parole il contenuto del testo che ti viene passato, sei una IA che parla esclusivamente in italiano, il riassunto mi serve come anteprima da pubblicare nel mio blog.
> Risposta:> Il presente articolo descrive come utilizzare un Large Language Model (LLM) offline per risolvere compiti legali specifici e limitando le risposte al solo linguaggio italiano, in conformità alle regole deontologiche per gli avvocati. Viene introdotto il concetto di RAG (Referential Application of Knowledge Graphs), un metodo per recuperare informazioni da fonti esterne e integrarle nei modelli linguistici LLM. Per ottenere risultati sensati, è necessario un lavoro complesso che non è accessibile a tutti, ma offre potenzialità interessanti nel mondo giuridico italiano.
Il riassunto è in 81 parole, ma è normale per gli LLM non riuscire a dare una risposta di una specifica lunghezza di parole, un 20% in meno di quanto gli avevo chiesto. La cosa interessante è che il risultato è stato ottenuto in soli 38 secondi. Come si può vedere ha sbagliato a indicare il testo dell’acronimo RAG (Retrieval-Augmented Generation) ma nell’articolo non ho inserito l’acronimo per esteso.
2.2 Esempio di prompt più strutturato
Secondo test, ho cercato di ottimizzare parzialmente il prompt seguendo le regole che ho imparato da vari divulgatori.
Secondo prompt con Mistral
> Prompt> : Riassumi in 100 parole il contenuto del testo che ti viene passato, sei una IA che parla esclusivamente in italiano, il riassunto mi serve come anteprima da pubblicare nel mio blog e deve spingere chi legge l'anteprima a leggere l'intero articolo.
Analizzando questo prompt in dettaglio si può notare che è composto da:
- una Richiesta
Riassumi in 100 parole il contenuto del testo che ti viene passato
, cosa voglio che l’LLM faccia per me; - un Contesto
sei una IA che parla esclusivamente in italiano
, per avere una risposta in italiano e per “ancorare” il modello ad una lingua specifica (altrimenti solitamente mi risponde in inglese); - Scopo
il riassunto mi serve come anteprima da pubblicare nel mio blog e deve spingere chi legge l'anteprima a leggere l'intero articolo.
indicare il risultato che si vuole ottenere e perché lo si vuole ottenere è un buon modo per ricevere una risposta specifica e puntuale.
Manca l’indicazione di un formato / formattazione specifica. Col senno di poi avrei potuto chiedere di rivolgersi al lettore in modo colloquiale, parlando in prima persona, e dargli del tu.
Un altro modo per ottenere buoni risultate è dare all’LLM esempi specifici di risultati, sostanzialmente un modello a cui uniformarsi.
> Risposta:> In questo articolo vengono presentate le potenzialità di utilizzo pratico dell'Intelligenza Artificiale (IA) e dei Large Language Models (LLM) come ChatGPT, in particolare nell'ambito giuridico italiano, attraverso il concetto di "Retrieval-Augmented Generation" (RAG). Viene descritta la procedura per passare un testo all'LLM e ricevere una risposta in lingua italiana, utilizzando strumenti come > curl
> , > strip-tags
> e > llm
> . L'importanza del RAG nel mondo legale consiste nel recupero di fatto da una base esterna per basare i modelli linguistici di grandi dimensioni su informazioni più accurate e aggiornate, fornendo agli utenti informazioni sullo processo generativo degli LLM. L'esempio pratico mostra come le capacità di RAG possono aiutare a ottenere risultati sensati nell'ambito giuridico italiano, ma richiedono competenze interdisciplinari e una certa dedizione. Per rimanere aggiornato sulle ultime novità e sui contenuti creati, viene consigliata di iscriversi alla newsletter. Ha prodotto un testo di > 135 parole> , circa il 30% in più di quello richiesto, ed in soli 34 secondi, sostanzialmente simile a quanto fatto con la prima risposta.
Questo giro, con un prompt più dettagliato, ha anche centrato l’acronimo RAG. L’ultima parte della sintesi è relativamente fuori luogo, posto che è la c.d. CTA (Call To Actions) che inserisco alla fine di ogni articolo e non ha senso inserirla nel riassunto. Forse, tuttavia, il modo in cui ho formulato il prompt ha fatto sì che venisse inserita – perché ho chiesto che l’anteprima invogliasse a leggere l’intero articolo.
2.3 Confronto con strumenti commerciali (chatGPT)
Visto che c’ero mi è parso utile, per testare il risultato fornitomi da Mistral, fare un confronto con chatGPT 4 (medesimo prompt). Segnalo che chatGPT 4 è un modello superiore a livello di padronanza linguistica di Mistral:7b, quindi i risultati non sono direttamente paragonabili ma credo siano utili come confronto.
Medesimo prompt con chatGPT
> Risposta:> L'autore condivide la sua esperienza nell'utilizzo dell'Intelligenza Artificiale generativa, in particolare in combinazione con l'uso dei Large Language Models (LLM) per gli avvocati. Si discute di come l'uso offline di questi modelli possa offrire vantaggi in termini di privacy dei dati, nonostante richieda certe competenze tecniche e un hardware specializzato. Inoltre, vengono presentati vari strumenti come Ollama, LLM e Mistral, per utilizzare efficacemente i LLM offline. Infine, l'autore mostra come questi strumenti possono elaborare e riassumere le informazioni presenti in PDF e pagine web, in modo da poter estendere la 'conoscenza' del modello linguistico per fornire risposte più appropriate in relazione al diritto italiano.
Ha composto una sinossi di 104 parole in 10s per ottenere la risposta, ovvero 1/3 del tempo rispetto a Mistral.
Come si vede il risultato di chatGPT è superiore ed in parte (almeno dal mio punto di vista) più manierata rispetto a Mistral.
2.4 Il risultato umano
Di seguito, a chiusura di questa comparazione, ti lascio quel che ho poi deciso di scrivere io nell’anteprima dell’articolo:
In questo articolo ti spiego come ho configurato il mio MacMini M1 per avere un LLM offline con software open-source utilizzando Ollama e Mistral:7B. In particolare ti mostrerò come migliorare i risultati delle risposte dell’LLM passandogli documenti o pagine web, tutto in modo relativamente semplice.
Io ho deciso di usare un tono più colloquiale che abitualmente utilizzo per i miei articoli, avrei potuto richiederlo attraverso il prompt ma inizialmente non ci avevo pensato. Questo è uno dei potenziali vantaggi dell’uso degli LLM, ovvero quello che io chiamo effetto di cassa di risonanza.
Spesso pensare e scrivere all’LLM cosa si vuole e vederlo poi realizzato da quest’ultimo ci da lo spunto per trovare la “nostra voce”.
3. Nel mondo legale
Non potevo portarti un esempio specifico del mondo legale, per ovvie ragioni di riservatezza, ma quel che ho descritto rispecchia gli esperimenti che sto mettendo in opera nel mio lavoro quotidiano.
Sicuramente nell’attività legale è necessario qualcosa di più.
Gli LLM non sono stati istruiti in ambito giuridico e, come si è visto nel primo prompt quando LLM non sa, spesso inventa di sana pianta o, come i benpensanti della IA amano dire, ha una c.d. allucinazione.
Per il mondo legale, e più in generale, per ambiti di conoscenza specifici è necessario “passare” all’LLM delle conoscenze specifiche.
Una semplice attività di prompt engineering non è quindi sufficiente ma è necessaria; in particolare è importante strutturare bene il prompt della domanda e, per fare ciò, occorre conoscere i “trucchi” del mestiere.
A mio modesto parere per sfruttare gli LLM nella quotidiana attività legale bisogna lavorare in ambiti specifici ed aver preparato, precedentemente, materiali utili all’LLM per dare risposte sensate.
Il problema è che più questi materiali sono corposi e quindi efficienti per ottenere una risposto puntuale dall’LLM più si raggiunge la dimensione massima della finestra di conoscenza degli LLM.
In estrema sintesi, un LLM ha la una possibilità limitata di mantenere nella memoria operativa fatti e dati, passati come ”testo”.
Se vuoi approfondire l’argomento ne ho parlato in questa OfficeHour.
Per ovviare a questo limite si utilizzano tecniche più avanzate di cui, allo stato, non mi sono ancora impadronito e, quindi, saranno eventualmente oggetto di futuri articoli.
In conclusione
Spero che la “scusa” usata per parlarti di prompt engineering e della strutturazione dei dati ti abbia incuriosito e fatto riflettere sui concreti possibili usi degli LLM.
Le tecniche di base usate in questo ed il predente articolo possono dare all’avvocato degli strumenti rudimentali per testare nella pratica l’utilizzo degli LLM ma per usi più avanzati e specifici occorre andare ad un livello ulteriore e più tecnico.
Come sempre se ti è piaciuto quel che hai letto e non l’hai già fatto ti suggerisco di iscriverti alla mia newsletter. Ti avvertirò dei nuovi articoli che pubblico (oltre ai podcast e video su YouTube) e, mensilmente, ti segnalerò articoli che ho raccolto nel corso del mese ed ho ritenuto interessanti.