Claude Platform Docs
Best practiceCasi d'uso

Sintesi di documenti legali

Questa guida illustra come sfruttare le avanzate capacità di elaborazione del linguaggio naturale di Claude per sintetizzare in modo efficiente documenti legali, estraendo le informazioni chiave e accelerando la ricerca giuridica. Con Claude puoi semplificare la revisione dei contratti, la preparazione dei contenziosi e il lavoro normativo, risparmiando tempo e garantendo accuratezza nei tuoi processi legali.

Visita il cookbook sulla sintesi per vedere un esempio di implementazione della sintesi di documenti legali con Claude.

Prima di sviluppare con Claude

Ecco alcuni indicatori chiave che suggeriscono di impiegare un "large language model" (grande modello linguistico), o LLM, come Claude per sintetizzare documenti legali:

Determina i dettagli che vuoi che la sintesi estragga

Non esiste un'unica sintesi corretta per un dato documento. Senza indicazioni chiare, può essere difficile per Claude determinare quali dettagli includere. Per ottenere risultati ottimali, identifica le informazioni specifiche che vuoi includere nella sintesi.

Ad esempio, quando sintetizzi un contratto di sublocazione, potresti voler estrarre i seguenti punti chiave:

details_to_extract = [
    "Parties involved (sublessor, sublessee, and original lessor)",
    "Property details (address, description, and permitted use)",
    "Term and rent (start date, end date, monthly rent, and security deposit)",
    "Responsibilities (utilities, maintenance, and repairs)",
    "Consent and notices (landlord's consent, and notice requirements)",
    "Special provisions (furniture, parking, and subletting restrictions)",
]

Stabilisci i criteri di successo

Valutare la qualità delle sintesi è un compito notoriamente impegnativo. A differenza di molte altre attività di elaborazione del linguaggio naturale, la valutazione delle sintesi spesso manca di metriche nette e oggettive. Il processo può essere altamente soggettivo, con lettori diversi che attribuiscono valore ad aspetti diversi di una sintesi. Ecco alcuni criteri che potresti voler considerare nel valutare quanto bene Claude esegue la sintesi di documenti legali.

Consulta la guida su come stabilire i criteri di successo per maggiori informazioni.


Seleziona il modello Claude giusto

L'accuratezza del modello è estremamente importante quando si sintetizzano documenti legali. Claude Opus 5 è una scelta eccellente per casi d'uso come questo, in cui è richiesta un'elevata accuratezza. Se la dimensione e la quantità dei tuoi documenti sono tali che i costi iniziano a diventare un problema, puoi anche provare a usare un modello più piccolo come Claude Haiku 4.5.

Per aiutarti a stimare questi costi, ecco un confronto del costo per sintetizzare 1.000 contratti di sublocazione usando i modelli Opus e Haiku:

  • Dimensione del contenuto

    • Numero di contratti: 1.000
    • Caratteri per contratto: 300.000
    • Caratteri totali: 300M
  • Token stimati

    • Token di input: 86M (assumendo 1 token ogni 3,5 caratteri)
    • Token di output per sintesi: 350
    • Token di output totali: 350.000
  • Costo stimato di Claude Opus 5

    • Costo dei token di input: 86 MTok * $5,00/MTok = $430,00 USD
    • Costo dei token di output: 0,35 MTok * $25,00/MTok = $8,75 USD
    • Costo totale: $430,00 + $8,75 = $438,75 USD
  • Costo stimato di Claude Opus 4.8

    • Costo dei token di input: 86 MTok * $5,00/MTok = $430,00 USD
    • Costo dei token di output: 0,35 MTok * $25,00/MTok = $8,75 USD
    • Costo totale: $430,00 + $8,75 = $438,75 USD
  • Costo stimato di Claude Haiku 4.5

    • Costo dei token di input: 86 MTok * $1,00/MTok = $86,00 USD
    • Costo dei token di output: 0,35 MTok * $5,00/MTok = $1,75 USD
    • Costo totale: $86,00 + $1,75 = $87,75 USD

Trasforma i documenti in un formato che Claude possa elaborare

Prima di iniziare a sintetizzare i documenti, devi preparare i tuoi dati. Ciò comporta l'estrazione del testo dai PDF, la pulizia del testo e la verifica che sia pronto per essere elaborato da Claude.

Ecco una dimostrazione di questo processo su un PDF di esempio:

from io import BytesIO
import re

import pypdf
import requests


def get_llm_text(pdf_file):
    reader = pypdf.PdfReader(pdf_file)
    text = "\n".join([page.extract_text() for page in reader.pages])

    # Rimuovi i numeri di pagina
    text = re.sub(r"\n\s*\d+\s*\n", "\n", text)

    # Rimuovi gli spazi bianchi in eccesso
    text = re.sub(r"\s+", " ", text)

    return text


# Crea l'URL completo dal repository GitHub
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")

# Scarica il file PDF in memoria
response = requests.get(url)

# Carica il PDF dalla memoria
pdf_file = BytesIO(response.content)

document_text = get_llm_text(pdf_file)
print(document_text[:50000])

In questo esempio, scarichi innanzitutto un PDF di un contratto di sublocazione di esempio utilizzato nel cookbook sulla sintesi. Questo contratto proviene da un contratto di sublocazione disponibile pubblicamente sul sito sec.gov.

L'esempio usa la libreria pypdf per estrarre il contenuto del PDF e convertirlo in testo. I dati testuali vengono poi puliti rimuovendo i numeri di pagina e gli spazi bianchi in eccesso.

Costruisci un prompt efficace

Claude può adattarsi a vari stili di sintesi. Puoi modificare i dettagli del prompt per guidare Claude a essere più o meno prolisso, a includere più o meno terminologia tecnica, o a fornire una sintesi di livello più alto o più basso del contesto in questione.

Ecco un esempio di come creare un prompt che garantisca che le sintesi generate seguano una struttura coerente nell'analisi dei contratti di sublocazione:

Python
# Inizializza il client Anthropic
client = anthropic.Anthropic()


def summarize_document(
    text, details_to_extract, model="claude-opus-5-5", max_tokens=1000
):
    # Formatta i dettagli da estrarre da inserire nel contesto del prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Chiedi al modello di riassumere il contratto di sublocazione
    prompt = f"""Summarize the following sublease agreement. Focus on these key aspects:

    {details_to_extract_str}

    Provide the summary in bullet points nested within the XML header for each section. For example:

    <parties involved>
    - Sublessor: [Name]
    // Add more details as needed
    </parties involved>

    If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.

    Sublease agreement text:
    {text}
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="You are a legal analyst specializing in real estate law, known for highly accurate and detailed summaries of sublease agreements.",
        messages=[
            {"role": "user", "content": prompt},
        ],
    )

    return next(block.text for block in response.content if block.type == "text")


sublease_summary = summarize_document(document_text, details_to_extract)
print(sublease_summary)

Questo codice implementa una funzione summarize_document che usa Claude per sintetizzare il contenuto di un contratto di sublocazione. La funzione accetta come input una stringa di testo e un elenco di dettagli da estrarre. In questo esempio, il codice chiama la funzione con le variabili document_text e details_to_extract definite nei frammenti di codice precedenti.

All'interno della funzione viene generato un prompt per Claude, che include il documento da sintetizzare, i dettagli da estrarre e istruzioni specifiche per la sintesi del documento. Il prompt istruisce Claude a rispondere con una sintesi di ciascun dettaglio da estrarre racchiusa all'interno di intestazioni XML.

Poiché il codice restituisce ogni sezione della sintesi all'interno di tag, ogni sezione può essere facilmente estratta in una fase di post-elaborazione. Questo approccio consente sintesi strutturate che possono essere adattate al tuo caso d'uso, in modo che ogni sintesi segua lo stesso schema.

Valuta il tuo prompt

Il prompting richiede spesso test e ottimizzazione per essere pronto per la produzione. Per determinare la maturità della tua soluzione, valuta la qualità delle tue sintesi usando un processo sistematico che combini metodi quantitativi e qualitativi. Creare una solida valutazione empirica basata sui criteri di successo che hai definito ti consente di ottimizzare i tuoi prompt. Ecco alcune metriche che potresti voler includere nella tua valutazione empirica:

Distribuisci il tuo prompt

Ecco alcune considerazioni aggiuntive da tenere presenti quando distribuisci la tua soluzione in produzione.

  1. Assicurati di non incorrere in responsabilità: Comprendi le implicazioni legali degli errori nelle sintesi, che potrebbero comportare responsabilità legali per la tua organizzazione o i tuoi clienti. Fornisci disclaimer o avvisi legali che chiariscano che le sintesi sono generate dall'IA e devono essere riviste da professionisti legali.

  2. Gestisci tipi di documenti diversi: Questa guida illustra come estrarre testo dai PDF. Nel mondo reale, i documenti possono presentarsi in una varietà di formati (come PDF, documenti Word e file di testo). Assicurati che la tua pipeline di estrazione dei dati possa convertire tutti i formati di file che prevedi di ricevere.

  3. Parallelizza le chiamate API a Claude: I documenti lunghi con un gran numero di token possono richiedere fino a un minuto perché Claude generi una sintesi. Per grandi raccolte di documenti, potresti voler inviare le chiamate API a Claude in parallelo, in modo che le sintesi possano essere completate in tempi ragionevoli. Fai riferimento ai limiti di velocità ("rate limits") di Anthropic per determinare il numero massimo di chiamate API che possono essere eseguite in parallelo.


Migliora le prestazioni

In scenari complessi, può essere utile considerare strategie aggiuntive per migliorare le prestazioni oltre alle tecniche di prompt engineering standard. Ecco alcune strategie avanzate:

Esegui la meta-sintesi per sintetizzare documenti lunghi

La sintesi di documenti legali spesso comporta la gestione di documenti lunghi o di molti documenti correlati contemporaneamente, al punto da superare la "context window" (finestra di contesto) di Claude. Puoi usare un metodo di suddivisione in blocchi noto come meta-sintesi per gestire questo caso d'uso. Questa tecnica prevede la scomposizione dei documenti in blocchi più piccoli e gestibili e l'elaborazione separata di ciascun blocco. Puoi poi combinare le sintesi di ciascun blocco per creare una meta-sintesi dell'intero documento.

Ecco un esempio di come eseguire la meta-sintesi:

Python
# Inizializza il client Anthropic
client = anthropic.Anthropic()


def chunk_text(text, chunk_size=20000):
    return [text[i : i + chunk_size] for i in range(0, len(text), chunk_size)]


def summarize_long_document(
    text, details_to_extract, model="claude-opus-5-5", max_tokens=1000
):
    # Formatta i dettagli da estrarre da inserire nel contesto del prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Itera sui chunk e riassumi ciascuno
    chunk_summaries = [
        summarize_document(
            chunk, details_to_extract, model=model, max_tokens=max_tokens
        )
        for chunk in chunk_text(text)
    ]

    final_summary_prompt = f"""

    You are looking at the chunked summaries of multiple documents that are all related.
    Combine the following summaries of the document from different truthful sources into a coherent overall summary:

    <chunked_summaries>
    {"".join(chunk_summaries)}
    </chunked_summaries>

    Focus on these key aspects:
    {details_to_extract_str}

    Provide the summary in bullet points nested within the XML header for each section. For example:

    <parties involved>
    - Sublessor: [Name]
    // Add more details as needed
    </parties involved>

    If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="You are a legal expert that summarizes notes on one document.",
        messages=[
            {"role": "user", "content": final_summary_prompt},
        ],
    )

    return next(block.text for block in response.content if block.type == "text")


long_summary = summarize_long_document(document_text, details_to_extract)
print(long_summary)

La funzione summarize_long_document si basa sulla precedente funzione summarize_document, suddividendo il documento in blocchi più piccoli e sintetizzando ciascun blocco singolarmente.

Il codice ottiene questo risultato applicando la funzione summarize_document a ciascun blocco di 20.000 caratteri del documento originale. Le singole sintesi vengono poi combinate e da queste sintesi dei blocchi viene creata una sintesi finale.

Nota che la funzione summarize_long_document non è strettamente necessaria per il PDF di esempio, poiché l'intero documento rientra nella finestra di contesto di Claude. Tuttavia, diventa essenziale per documenti che superano la finestra di contesto di Claude o quando si sintetizzano insieme più documenti correlati. In ogni caso, questa tecnica di meta-sintesi spesso cattura nella sintesi finale ulteriori dettagli importanti che erano stati tralasciati nel precedente approccio a sintesi singola.

Usa documenti indicizzati per sintesi per esplorare una grande raccolta di documenti

La ricerca in una raccolta di documenti con un LLM di solito prevede la "retrieval-augmented generation" (generazione aumentata dal recupero), o RAG. Tuttavia, in scenari che coinvolgono documenti di grandi dimensioni o quando il recupero preciso delle informazioni è fondamentale, un approccio RAG di base può essere insufficiente. I documenti indicizzati per sintesi ("summary indexed documents") sono un approccio RAG avanzato che fornisce un modo più efficiente di classificare i documenti per il recupero, usando meno contesto rispetto ai metodi RAG tradizionali. In questo approccio, usi innanzitutto Claude per generare una sintesi concisa di ciascun documento del tuo corpus, e poi usi Claude per classificare la rilevanza di ciascuna sintesi rispetto alla query posta. Per ulteriori dettagli su questo approccio, incluso un esempio basato su codice, consulta la sezione sui documenti indicizzati per sintesi nel cookbook sulla sintesi.

Esegui il fine-tuning di Claude per apprendere dal tuo dataset

Un'altra tecnica avanzata per migliorare la capacità di Claude di generare sintesi è il "fine-tuning" (affinamento). Il fine-tuning prevede l'addestramento di Claude su un dataset personalizzato che si allinea specificamente alle tue esigenze di sintesi legale, garantendo che Claude si adatti al tuo caso d'uso. Ecco una panoramica su come eseguire il fine-tuning:

  1. Identifica gli errori: Inizia raccogliendo i casi in cui le sintesi di Claude risultano carenti: ciò potrebbe includere l'omissione di dettagli legali critici, l'incomprensione del contesto o l'uso di terminologia giuridica inappropriata.

  2. Cura un dataset: Una volta identificati questi problemi, compila un dataset di questi esempi problematici. Questo dataset deve includere i documenti legali originali insieme alle tue sintesi corrette, garantendo che Claude apprenda il comportamento desiderato.

  3. Esegui il fine-tuning: Il fine-tuning prevede il riaddestramento del modello sul tuo dataset curato per regolarne i pesi e i parametri. Questo riaddestramento aiuta Claude ad adattarsi meglio ai requisiti specifici del tuo ambito legale, migliorando la sua capacità di sintetizzare documenti secondo i tuoi standard.

  4. Miglioramento iterativo: Il fine-tuning non è un processo una tantum. Man mano che Claude continua a generare sintesi, puoi aggiungere iterativamente nuovi esempi in cui ha avuto prestazioni insufficienti, affinando ulteriormente le sue capacità. Nel tempo, questo ciclo di feedback continuo porterà a un modello altamente specializzato per le tue attività di sintesi legale.

Visualizza un esempio basato su codice completamente implementato di come usare Claude per sintetizzare contratti.

Esplora la ricetta del cookbook sulle citazioni per indicazioni su come garantire l'accuratezza e la spiegabilità delle informazioni.

Was this page helpful?