Prompt dinamici per il legal prompting – IA e Avvocati (15)
Intelligenza artificiale e Avvocati
Prompt dinamici: strumenti pratici per costruire template giuridici flessibili e personalizzati con Python, LangChain e Ollama.
Prompt dinamici: introduzione
Nel secondo post del volume 2 della guida dedicata all’integrazione professionale dell’IA negli studi legali italiani, approfondiamo l’utilizzo di LangChain per progettare prompt giuridici dinamici e parametrizzabili.
L’obiettivo è fornire agli avvocati uno strumento operativo per formulare richieste personalizzate, replicabili e integrabili in un sistema RAG locale (basato su Python e Ollama) oppure in soluzioni ibride.
1. Cos’è un prompt dinamico? (e il ruolo delle variabili)
Un prompt dinamico è una struttura di istruzione flessibile, costruita con variabili personalizzabili — ovvero segnaposti racchiusi tra parentesi graffe (es. {variabile}) che vengono sostituiti con valori specifici al momento dell’esecuzione.
Questo meccanismo consente di adattare facilmente un prompt a contesti diversi, mantenendo coerenza e precisione nella formulazione.
Consente di generare richieste precise, adattabili a diversi contesti e casi concreti mantenendo uniformità e rigore giuridico.
Le variabili: cosa sono e come funzionano
Nel contesto di LangChain, una variabile è un campo inserito tra parentesi graffe all’interno del prompt, come ad esempio {ambito_legale}.
Queste variabili agiscono come “spazi vuoti” che verranno riempiti al momento dell’esecuzione del prompt legale con i dati effettivi del caso giuridico.
Esempio di variabili comuni in ambito legale:
{ambito_legale}→ es. “diritto civile italiano”{text}→ testo della clausola o documento da analizzare{obiettivo}→ es. “valutare la validità della clausola”{finalita}→ es. “parere per cliente”, “memo interno”
Utilizzando queste variabili, è possibile definire template di prompt flessibili, riutilizzabili e compatibili con interfacce automatizzate o script Python.
Esempio tipico:
“Sei un avvocato esperto in {ambito_legale}. Analizza il seguente testo: {text}. Rispondi focalizzandoti su: {obiettivo}.”
Vantaggi
- Modularità: struttura riutilizzabile in vari ambiti giuridici.
- Coerenza: garantisce uniformità di formulazione tra colleghi.
- Rapidità: consente risposte veloci su input personalizzati.
Principali applicazioni
I prompt dinamici trovano numerose applicazioni nella pratica legale quotidiana.
Ecco alcuni esempi ricorrenti, in cui l’uso di variabili consente di adattare il template a ogni situazione concreta:
- Analisi di contratti: generare analisi automatizzate di contratti inserendo variabili come
{tipo_contratto},{clausole},{ambito_normativo}per evidenziare rischi e incongruenze. - Valutazione di clausole: verificare la validità di una clausola contrattuale rispetto a un certo
{ambito_legale}o{finalita}. - Sintesi di sentenze o decisioni: riassumere contenuti giurisprudenziali fornendo in input
{testo_sentenza},{oggetto},{criterio_di_sintesi}. - Classificazione semantica: categorizzare atti, pareri, verbali o contratti tramite variabili come
{testo_documento},{scopo},{tipologia_attesa}.
Queste applicazioni possono essere combinate in flussi automatizzati più complessi (chaining) o utilizzate come blocchi modulari in strumenti più ampi di analisi legale assistita.
2. Come costruire prompt dinamici con LangChain
ℹ️ Nota: Gli script che seguono presuppongono un ambiente Python già configurato come indicato nel volume 1 della guida. Il sistema deve disporre del modello locale
gemma3ninstallato tramite Ollama, e delle seguenti librerie Python installate:
langchainlangchain_ollamaollama
Per installarle:
pip install langchain langchain_ollama ollama
LangChain è una libreria Python progettata per orchestrare LLM (Large Language Models) e integrarli con strumenti esterni. La classe PromptTemplate consente di costruire prompt parametrizzati che accettano input dinamici.
Esempio di codice:
Questo script definisce un template con tre variabili: {ambito_legale}, {text} e {obiettivo}.
Utilizza PromptTemplate di LangChain per costruire il prompt dinamico e inviarlo al modello gemma3n eseguito in locale tramite Ollama.
Il prompt viene compilato automaticamente con i dati forniti nel dizionario e il risultato viene stampato a schermo.
È un esempio base per comprendere l’interazione tra struttura dinamica e generazione del contenuto giuridico.
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
# Template con variabili dinamiche
template = """
Sei un avvocato italiano specializzato in {ambito_legale}. Analizza il seguente testo:
{text}
Rispondi focalizzandoti su: {obiettivo}
"""
# Costruzione del PromptTemplate
prompt = PromptTemplate(
input_variables=["ambito_legale", "text", "obiettivo"],
template=template
)
# Inizializzazione del modello locale tramite Ollama
model = OllamaLLM(model="gemma3n")
chain = prompt | model
# Esecuzione del prompt
response = chain.invoke({
"ambito_legale": "Diritto civile italiano",
"text": """Il Conduttore accetta l’immobile nello stato in cui si trova,
rinunciando a far valere vizi non facilmente riconoscibili al momento
della consegna, salvo dolo o colpa grave del Locatore.
Restano a carico del Conduttore, oltre alla piccola manutenzione,
anche riparazioni straordinarie fino a euro 2.500 per singolo intervento.
In presenza di vizi che non impediscano l’uso dell’immobile, il Conduttore
rinuncia alla sospensione del canone e accetta che l’eventuale riduzione operi
solo dalla comunicazione scritta al Locatore.""",
"obiettivo": "Illustrare le ragioni per cui si ritiene la clausola contrattuale valida o invalida"
})
print(response)
Questo approccio è ideale per creare template riutilizzabili con input dinamici, mantenendo il controllo sul linguaggio e sulla forma.
3. Applicazioni concrete dei prompt dinamici nella pratica legale quotidiana
L’uso di prompt dinamici consente di adattare i template legali a differenti finalità operative.
Di seguito quattro esempi rappresentativi, ciascuno strutturato con variabili personalizzabili per garantire adattabilità e riutilizzabilità:
a. Pareri legali
Prompt dinamico:
“Sei un avvocato italiano esperto in {ambito_legale}. Redigi un parere legale sulla seguente questione: {descrizione_caso}. Indica i riferimenti normativi e giurisprudenziali pertinenti (da verificare su fonti ufficiali). Adatta la risposta alla finalità richiesta: {finalita}.”
Variabili → {ambito_legale}, {descrizione_caso}, {finalita}
b. Verifica di conformità contrattuale
Prompt dinamico:
“Analizza il contratto relativo a {materia}, verificandone la conformità alla normativa italiana vigente al {anno_riferimento}. Evidenzia clausole critiche indicando i rischi, e proponi alternative di riformulazione bilanciate dal punto di vista della parte {parte_interessata}.”
Variabili → {materia}, {anno_riferimento}, {parte_interessata}
c. Sintesi di provvedimenti giurisdizionali
Prompt dinamico:
“Sei un avvocato italiano esperto in {ambito_legale}. Sintetizza il seguente provvedimento: {testo_sentenza}. Fornisci un output chiaro e strutturato per {finalita}, specificando: 1) Fattispecie, 2) Motivazione, 3) Dispositivo, 4) Principi di diritto richiamati.”
Variabili → {ambito_legale}, {testo_sentenza}, {finalita}
d. Classificazione semantica di documenti legali
Prompt dinamico:
“Classifica il seguente documento giuridico: {testo_documento}. Indica:
- materia giuridica primaria e secondaria,
- tipologia (atto, contratto, sentenza, parere),
- soggetto redattore (giudice, avvocato, notaio, ecc.),
- livello di riservatezza,
- suggerisci tag archivistici coerenti con lo schema adottato: {schema_classificazione}.”
Variabili → {testo_documento}, {schema_classificazione}
📏 Limiti di lunghezza e strategie
I modelli linguistici hanno un limite massimo di token che possono essere elaborati in un’unica richiesta. Il limite varia a seconda del modello: tipicamente da 4.000 a 8.000 token per i modelli standard, con versioni più avanzate che possono arrivare a 32k–128k.
Ciò significa che testi giuridici molto lunghi (ad esempio contratti complessi, atti processuali o sentenze voluminosi) non possono essere inseriti per intero in una sola variabile come {text} o {testo_documento}, pena la perdita di parti rilevanti.
Strategie per gestire testi lunghi:
- Sintetizzare l’input prima di passarlo al prompt (es. riassunto interno preliminare).
- Suddividere il documento in sezioni (es. clausole contrattuali, capi della sentenza) ed eseguire analisi progressive.
- Utilizzare prompt chaining, cioè una catena di richieste che elaborano parti distinte e le integrano successivamente.
- Adottare un sistema RAG (Retrieval-Augmented Generation), che seleziona e fornisce al modello solo i contenuti più pertinenti rispetto alla domanda.
Gestire correttamente questi limiti è fondamentale per ottenere risultati affidabili ed evitare errori di analisi, omissioni o fraintendimenti. Nel contesto legale, la consapevolezza del limite di token è cruciale, perché un’omissione automatica dovuta a un taglio di testo può avere conseguenze significative: l’output deve sempre essere verificato dall’avvocato su documento integrale.
4. Esecuzione da terminale: input delle variabili da script Python
Per studi legali che desiderano mantenere semplicità ed efficienza, è possibile richiedere i valori delle variabili direttamente da terminale, evitando interfacce grafiche.
Script con input manuale:
Questo secondo script mostra un modo interattivo per utilizzare i prompt dinamici da terminale.
Dopo aver definito la struttura del prompt, lo script richiede all’utente l’inserimento manuale delle variabili.
Il contenuto fornito viene inserito nel prompt e inviato al modello locale per la generazione del testo.
Questo approccio è utile per testare rapidamente i template senza necessità di interfacce grafiche o automatismi complessi.
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
# Definizione del prompt dinamico con variabili
prompt_template = """
Sei un avvocato italiano specializzato in {ambito_legale}. Analizza il seguente testo:
{text}
Rispondi focalizzandoti su: {obiettivo}
"""
prompt = PromptTemplate(
input_variables=["ambito_legale", "text", "obiettivo"],
template=prompt_template
)
# Input manuale da terminale
ambito = input("Inserisci l'ambito giuridico: ")
testo = input("Inserisci il testo da analizzare: ")
obiettivo = input("Inserisci l'obiettivo dell'analisi: ")
model = OllamaLLM(model="gemma3n")
chain = prompt | model
response = chain.invoke({
"ambito_legale": ambito,
"text": testo,
"obiettivo": obiettivo
})
print("\nRisposta generata:\n")
print(response)
Questo tipo di script è perfetto per testare prompt in autonomia, anche in studi legali medio-piccoli senza infrastrutture dedicate.
5. Prompt dinamici: vantaggi dell’approccio parametrico
L’utilizzo dei prompt dinamici tramite LangChain e modelli LLM locali porta numerosi benefici concreti negli studi legali.
Benefici operativi
- Efficienza operativa: riduce drasticamente i tempi di redazione e revisione dei testi giuridici ripetitivi o di primo livello.
- Accessibilità: può essere utilizzato anche da personale privo di competenze tecniche, grazie a interfacce semplici o script guidati.
- Scalabilità: rappresenta la base ideale per sviluppare flussi di lavoro automatizzati (reportistica, analisi di massa, sistemi RAG interni).
Benefici qualitativi
- Personalizzazione controllata: ogni output è generato sulla base di variabili ben definite, legate a un contesto specifico (ambito, finalità, tipo di documento…).
- Uniformità comunicativa: i template garantiscono coerenza stilistica e metodologica tra colleghi, utile anche in prospettiva di archiviazione e revisione.
- Monitorabilità e tracciabilità: la struttura parametrica consente di documentare e controllare ogni prompt, aumentando la trasparenza e la conformità agli obblighi di riservatezza e compliance.
In sintesi, i prompt dinamici permettono di industrializzare i flussi di lavoro senza banalizzarli: l’avvocato mantiene il controllo analitico e metodologico, mentre l’automazione si occupa delle parti ripetitive e formali.
6. Checklist operativa per l’uso dei prompt dinamici
Per garantire un uso professionale, sicuro e ripetibile dei prompt dinamici nello studio legale, si consiglia di verificare sempre i seguenti punti:
✅ Ruolo dell’IA: è chiaro? (es. “avvocato esperto in diritto civile”)
📚 Ambito giuridico: è indicato correttamente e delimitato?
📄 Contesto fattuale: è completo, coerente e pertinente?
🎯 Obiettivo: è ben definito (es. sintesi, verifica, parere)?
⚖️ Riferimenti normativi/giurisprudenziali: sono richiesti? e soprattutto, saranno verificati su fonti ufficiali?
🖋️ Stile e linguaggio: sono coerenti con il registro giuridico richiesto?
👁️🗨️ Revisione umana: è prevista la lettura critica dell’output prima dell’uso esterno?
💾 Tracciabilità: il prompt è salvato o documentato per riuso e archiviazione interna?
🔒 Privacy e dati: i contenuti rispettano GDPR e policy dello studio? I dati sensibili sono trattati solo in locale?
🔗 Per approfondire
7. Applicazione del metodo R-CAFAR ai prompt dinamici
Il metodo R-CAFAR, già introdotto nel volume 1 di questa guida, può essere adottato come guida sistematica per strutturare prompt giuridici dinamici, garantendo completezza, chiarezza e controllo delle variabili.
Ogni prompt costruito con R-CAFAR prevede sei componenti fondamentali:
- R – Ruolo (chi è l’IA)
- C – Contesto (situazione giuridica di riferimento)
- A – Attori e Fatti (soggetti coinvolti e quadro fattuale)
- F – Finalità (obiettivo dell’analisi o output desiderato)
- A – Aggiornamento (riferimento temporale della normativa)
- R – Richieste specifiche (elementi puntuali richiesti: norme, precedenti, motivazione, ecc.)
🧩 Esempio di template dinamico R-CAFAR:
“Sei un avvocato italiano esperto in {ambito_legale}.
Ti viene richiesto di analizzare un caso relativo a {descrizione_contesto}, che coinvolge {attori_e_fatti}.
L’analisi deve essere svolta con la finalità di {finalita}, tenendo conto della normativa e della giurisprudenza vigenti al {anno_riferimento}.
Fornisci una risposta in formato {formato_output}, includendo {richieste_specifiche}.
La risposta deve motivare logicamente le conclusioni e distinguere in sezioni Fatti – Diritto – Conclusioni. Riporta, ove pertinenti, riferimenti normativi e giurisprudenziali, da verificare sempre su fonti ufficiali.”
8. Considerazioni su limiti, rischi e privacy
Limitazioni e rischi dei prompt dinamici
I prompt dinamici sono uno strumento potente per l’automazione e l’assistenza legale, ma vanno utilizzati con consapevolezza e senso critico:
- Gli LLM non garantiscono la correttezza giuridica dell’output, soprattutto in contesti complessi o ambigui.
- I modelli possono generare riferimenti normativi o giurisprudenziali inesatti se non collegati a un sistema RAG.
- Non sono affidabili per l’analisi di casi atipici, controversi o senza precedenti.
- È sempre necessaria la supervisione umana prima di qualsiasi utilizzo esterno, in particolare verso clienti o in atti ufficiali: la responsabilità professionale resta in capo all’avvocato.
Elaborazione locale e privacy
L’impiego di modelli locali, come quelli offerti da Ollama, consente invece di:
- evitare la trasmissione di dati riservati a server esterni;
- lavorare in conformità con il Regolamento (UE) 2016/679 (GDPR);
- proteggere la riservatezza dei dati sensibili contenuti in atti, contratti o pareri.
Questa architettura rafforza il controllo sul trattamento dei dati e si adatta alle esigenze degli studi legali italiani, a condizione che siano rispettate anche adeguate misure di sicurezza interna (accessi controllati, policy di archiviazione, protezione del dato).
👉 In conclusione: i prompt dinamici offrono grande valore operativo, ma non sostituiscono l’analisi critica e la responsabilità professionale dell’avvocato.
In tema di rischi, sicurezza, privacy e deontologia professionale si rimanda a quanto già discusso nel volume 1 di questa guida.
Conclusione
L’impiego dei prompt dinamici in ambito giuridico rappresenta un passaggio essenziale per introdurre metodologie moderne e strutturate nei flussi di lavoro legali.
Grazie alla parametrizzazione, è possibile:
- garantire coerenza tra colleghi,
- ridurre i tempi di redazione,
- generare risposte rapide, ma sempre aderenti alla finalità richiesta.
Questo approccio consente di creare template riutilizzabili e controllabili, che preservano la qualità del ragionamento giuridico pur sfruttando la potenza dell’IA generativa.
La combinazione di LangChain, Ollama e modelli locali come gemma3n offre un’alternativa sicura ed efficace rispetto al cloud, riducendo i rischi legati alla privacy e massimizzando il controllo sul dato.
L’integrazione del metodo R-CAFAR assicura rigore strutturale anche nella formulazione dinamica, facilitando tracciabilità e archiviazione dei prompt.
Infine, è fondamentale ricordare che ogni utilizzo professionale dell’IA richiede:
- supervisione esperta,
- una strategia documentale chiara,
- consapevolezza dei limiti dello strumento.
In sintesi, i prompt dinamici non sostituiscono l’avvocato: lo supportano, liberandolo dalle attività ripetitive e consentendogli di concentrarsi sull’analisi critica e sul valore aggiunto del lavoro legale.
Per un aiuto e per approfondire
Per un aiuto e per approfondire i temi dell’intelligenza artificiale nello studio legale, del legal tech e del legal design è online il GPT Iusreporter.tech (link esterno, richiede ChatGPT)
Per gli altri articoli pubblicati su questo blog sul tema:
Intelligenza artificiale e Avvocati
Scritto con l’aiuto di Iusreporter, il tuo assistente per la ricerca giuridica online
Studio legale Avvocato Giuseppe Briganti
Pesaro – Urbino
Post aggiornato alla data di pubblicazione
📄 Disclaimer
Gli script Python e i contenuti di questo testo sono forniti esclusivamente a scopo informativo, didattico e sperimentale in ambienti di test controllati. Non costituiscono consulenza legale o tecnica e non sostituiscono il parere di un professionista qualificato.
L’autore declina ogni responsabilità per eventuali errori, omissioni, malfunzionamenti, danni diretti o indiretti, incidentali, consequenziali o di altro tipo derivanti dall’uso, dall’uso improprio o dall’impossibilità di utilizzo degli script o delle informazioni contenute nel presente testo. Gli script sono forniti “così come sono” (AS IS), senza garanzie esplicite o implicite, incluse, ma non limitate a, garanzie di commerciabilità, idoneità a uno scopo particolare o assenza di violazioni.
L’utilizzo degli strumenti è sotto la piena responsabilità dell’utente, che è tenuto a verificarne, in particolare:
- la correttezza tecnica e funzionale,
- la conformità alle normative vigenti, incluse, a titolo esemplificativo, l’AI Act, il GDPR, il Codice Deontologico Forense,
- il rispetto delle licenze delle librerie e dei componenti e software di terze parti eventualmente utilizzati, inclusi quelli distribuiti con licenze open source.
Gli script non sono progettati né validati per l’uso in ambienti produttivi o per l’elaborazione di dati personali. Qualsiasi utilizzo in tali contesti è esclusiva responsabilità dell’utente, che deve adottare le opportune misure di sicurezza e valutare l’impatto normativo.
Gli script sono stati testati su Python 3.10 in ambiente Windows. Non è garantita la compatibilità con versioni diverse del linguaggio o con altri sistemi operativi. L’autore non fornisce assistenza tecnica, aggiornamenti periodici o correzione dei malfunzionamenti.
Tutti i contenuti di questo ebook, inclusi i testi e il codice sorgente, sono protetti dal diritto d’autore ai sensi della Legge 22 aprile 1941, n. 633 e successive modificazioni. È vietata la riproduzione, distribuzione, pubblicazione, comunicazione o modifica, totale o parziale, in qualsiasi forma, dei contenuti senza autorizzazione scritta dell’autore, salvo espressa indicazione contraria.
L’uso di questo testo e degli script in esso contenuti implica l’accettazione integrale del presente disclaimer. Se non si accettano tali condizioni, si prega di non utilizzare il materiale fornito.
Eventuali errori, osservazioni o segnalazioni possono essere comunicati all’autore, che si riserva di valutarli senza alcun obbligo di risposta o correzione.


