Synthèse juridique
Ce guide explique comment exploiter les capacités avancées de traitement du langage naturel de Claude pour résumer efficacement des documents juridiques, en extrayant les informations clés et en accélérant la recherche juridique. Avec Claude, vous pouvez rationaliser l'examen des contrats, la préparation des litiges et le travail réglementaire, ce qui vous permet de gagner du temps et de garantir l'exactitude de vos processus juridiques.
Consultez le cookbook de synthèse pour voir un exemple d'implémentation de synthèse juridique avec Claude.
Avant de construire avec Claude
Décider d'utiliser ou non Claude pour la synthèse juridique
Voici quelques indicateurs clés montrant que vous devriez employer un « large language model » (grand modèle de langage), ou LLM, tel que Claude pour résumer des documents juridiques :
Déterminer les détails que vous souhaitez extraire par la synthèse
Il n'existe pas de résumé unique et correct pour un document donné. Sans orientation claire, il peut être difficile pour Claude de déterminer quels détails inclure. Pour obtenir des résultats optimaux, identifiez les informations spécifiques que vous souhaitez inclure dans le résumé.
Par exemple, lors de la synthèse d'un contrat de sous-location, vous pourriez vouloir extraire les points clés suivants :
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)",
]Établir des critères de réussite
L'évaluation de la qualité des résumés est une tâche notoirement difficile. Contrairement à de nombreuses autres tâches de traitement du langage naturel, l'évaluation des résumés manque souvent de métriques objectives et tranchées. Le processus peut être très subjectif, différents lecteurs valorisant différents aspects d'un résumé. Voici des critères que vous pourriez prendre en compte pour évaluer la performance de Claude en matière de synthèse juridique.
Consultez le guide sur l'établissement de critères de réussite pour plus d'informations.
Comment résumer des documents juridiques avec Claude
Sélectionner le bon modèle Claude
La précision du modèle est extrêmement importante lors de la synthèse de documents juridiques. Claude Opus 5 est un excellent choix pour des cas d'usage comme celui-ci, où une grande précision est requise. Si la taille et la quantité de vos documents sont telles que les coûts commencent à devenir une préoccupation, vous pouvez également essayer d'utiliser un modèle plus petit tel que Claude Haiku 4.5.
Pour vous aider à estimer ces coûts, voici une comparaison du coût de synthèse de 1 000 contrats de sous-location avec les modèles Opus et Haiku :
-
Taille du contenu
- Nombre de contrats : 1 000
- Caractères par contrat : 300 000
- Total de caractères : 300 M
-
Tokens estimés
- Tokens d'entrée : 86 M (en supposant 1 token pour 3,5 caractères)
- Tokens de sortie par résumé : 350
- Total de tokens de sortie : 350 000
-
Coût estimé avec Claude Opus 5
- Coût des tokens d'entrée : 86 MTok * 5,00 $ / MTok = 430,00 $ USD
- Coût des tokens de sortie : 0,35 MTok * 25,00 $ / MTok = 8,75 $ USD
- Coût total : 430,00 $ + 8,75 $ = 438,75 $ USD
-
Coût estimé avec Claude Opus 4.8
- Coût des tokens d'entrée : 86 MTok * 5,00 $ / MTok = 430,00 $ USD
- Coût des tokens de sortie : 0,35 MTok * 25,00 $ / MTok = 8,75 $ USD
- Coût total : 430,00 $ + 8,75 $ = 438,75 $ USD
-
Coût estimé avec Claude Haiku 4.5
- Coût des tokens d'entrée : 86 MTok * 1,00 $ / MTok = 86,00 $ USD
- Coût des tokens de sortie : 0,35 MTok * 5,00 $ / MTok = 1,75 $ USD
- Coût total : 86,00 $ + 1,75 $ = 87,75 $ USD
Transformer les documents dans un format que Claude peut traiter
Avant de commencer à résumer des documents, vous devez préparer vos données. Cela implique d'extraire le texte des PDF, de nettoyer le texte et de vous assurer qu'il est prêt à être traité par Claude.
Voici une démonstration de ce processus sur un exemple de PDF :
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])
# Supprimer les numéros de page
text = re.sub(r"\n\s*\d+\s*\n", "\n", text)
# Supprimer les espaces superflus
text = re.sub(r"\s+", " ", text)
return text
# Créer l'URL complète à partir du dépôt GitHub
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")
# Télécharger le fichier PDF en mémoire
response = requests.get(url)
# Charger le PDF depuis la mémoire
pdf_file = BytesIO(response.content)
document_text = get_llm_text(pdf_file)
print(document_text[:50000])Dans cet exemple, vous téléchargez d'abord le PDF d'un exemple de contrat de sous-location utilisé dans le cookbook de synthèse. Ce contrat provient d'un contrat de sous-location accessible au public sur le site sec.gov.
L'exemple utilise la bibliothèque pypdf pour extraire le contenu du PDF et le convertir en texte. Les données textuelles sont ensuite nettoyées en supprimant les numéros de page et les espaces superflus.
Construire un prompt solide
Claude peut s'adapter à divers styles de synthèse. Vous pouvez modifier les détails du prompt pour amener Claude à être plus ou moins verbeux, à inclure plus ou moins de terminologie technique, ou à fournir un résumé de plus haut ou de plus bas niveau du contexte en question.
Voici un exemple de création d'un prompt garantissant que les résumés générés suivent une structure cohérente lors de l'analyse de contrats de sous-location :
# Initialiser le client Anthropic
client = anthropic.Anthropic()
def summarize_document(
text, details_to_extract, model="claude-opus-5", max_tokens=1000
):
# Formater les détails à extraire pour les placer dans le contexte du prompt
details_to_extract_str = "\n".join(details_to_extract)
# Demander au modèle de résumer le contrat de sous-location
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)Ce code implémente une fonction summarize_document qui utilise Claude pour résumer le contenu d'un contrat de sous-location. La fonction accepte en entrée une chaîne de texte et une liste de détails à extraire. Dans cet exemple, le code appelle la fonction avec les variables document_text et details_to_extract définies dans les extraits de code précédents.
Au sein de la fonction, un prompt est généré pour Claude, comprenant le document à résumer, les détails à extraire et des instructions spécifiques pour résumer le document. Le prompt demande à Claude de répondre avec un résumé de chaque détail à extraire, imbriqué dans des en-têtes XML.
Comme le code produit chaque section du résumé à l'intérieur de balises, chaque section peut facilement être extraite lors d'une étape de post-traitement. Cette approche permet d'obtenir des résumés structurés adaptables à votre cas d'usage, de sorte que chaque résumé suive le même modèle.
Évaluer votre prompt
Le prompting nécessite souvent des tests et une optimisation pour être prêt pour la production. Pour déterminer la maturité de votre solution, évaluez la qualité de vos résumés à l'aide d'un processus systématique combinant des méthodes quantitatives et qualitatives. La création d'une évaluation empirique solide basée sur vos critères de réussite définis vous permet d'optimiser vos prompts. Voici quelques métriques que vous pourriez inclure dans votre évaluation empirique :
Déployer votre prompt
Voici quelques considérations supplémentaires à garder à l'esprit lorsque vous déployez votre solution en production.
-
Garantir l'absence de responsabilité : comprenez les implications juridiques des erreurs dans les résumés, qui pourraient engager la responsabilité juridique de votre organisation ou de vos clients. Fournissez des avertissements ou des mentions légales précisant que les résumés sont générés par une IA et doivent être examinés par des professionnels du droit.
-
Gérer divers types de documents : ce guide explique comment extraire du texte à partir de PDF. Dans le monde réel, les documents peuvent se présenter sous divers formats (tels que des PDF, des documents Word et des fichiers texte). Assurez-vous que votre pipeline d'extraction de données peut convertir tous les formats de fichiers que vous prévoyez de recevoir.
-
Paralléliser les appels API vers Claude : les documents longs comportant un grand nombre de tokens peuvent nécessiter jusqu'à une minute pour que Claude génère un résumé. Pour les grandes collections de documents, vous pourriez vouloir envoyer les appels API à Claude en parallèle afin que les résumés puissent être réalisés dans un délai raisonnable. Reportez-vous aux limites de débit d'Anthropic pour déterminer le nombre maximal d'appels API pouvant être effectués en parallèle.
Améliorer les performances
Dans des scénarios complexes, il peut être utile d'envisager des stratégies supplémentaires pour améliorer les performances au-delà des techniques de « prompt engineering » (ingénierie de prompt) standard. Voici quelques stratégies avancées :
Effectuer une méta-synthèse pour résumer de longs documents
La synthèse juridique implique souvent de traiter de longs documents ou de nombreux documents connexes à la fois, au point de dépasser la « context window » (fenêtre de contexte) de Claude. Vous pouvez utiliser une méthode de découpage appelée « meta-summarization » (méta-synthèse) pour gérer ce cas d'usage. Cette technique consiste à décomposer les documents en morceaux plus petits et gérables, puis à traiter chaque morceau séparément. Vous pouvez ensuite combiner les résumés de chaque morceau pour créer un méta-résumé de l'ensemble du document.
Voici un exemple de réalisation d'une méta-synthèse :
# Initialiser le 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", max_tokens=1000
):
# Formater les détails à extraire pour les placer dans le contexte du prompt
details_to_extract_str = "\n".join(details_to_extract)
# Parcourir les segments et résumer chacun d'eux
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 fonction summarize_long_document s'appuie sur la fonction summarize_document précédente en divisant le document en morceaux plus petits et en résumant chaque morceau individuellement.
Le code y parvient en appliquant la fonction summarize_document à chaque morceau de 20 000 caractères du document original. Les résumés individuels sont ensuite combinés, et un résumé final est créé à partir de ces résumés de morceaux.
Notez que la fonction summarize_long_document n'est pas strictement nécessaire pour le PDF d'exemple, car l'ensemble du document tient dans la fenêtre de contexte de Claude. Cependant, elle devient essentielle pour les documents dépassant la fenêtre de contexte de Claude ou lors de la synthèse conjointe de plusieurs documents connexes. Quoi qu'il en soit, cette technique de méta-synthèse capture souvent dans le résumé final des détails importants supplémentaires qui avaient été manqués dans l'approche précédente à résumé unique.
Utiliser des documents indexés par résumé pour explorer une grande collection de documents
La recherche dans une collection de documents avec un LLM implique généralement la « retrieval-augmented generation » (génération augmentée par récupération), ou RAG. Cependant, dans des scénarios impliquant de grands documents ou lorsque la récupération précise d'informations est cruciale, une approche RAG basique peut être insuffisante. Les « summary indexed documents » (documents indexés par résumé) constituent une approche RAG avancée qui offre un moyen plus efficace de classer les documents pour la récupération, en utilisant moins de contexte que les méthodes RAG traditionnelles. Dans cette approche, vous utilisez d'abord Claude pour générer un résumé concis de chaque document de votre corpus, puis vous utilisez Claude pour classer la pertinence de chaque résumé par rapport à la requête posée. Pour plus de détails sur cette approche, y compris un exemple basé sur du code, consultez la section sur les documents indexés par résumé dans le cookbook de synthèse.
Effectuer un fine-tuning de Claude pour apprendre de votre jeu de données
Une autre technique avancée pour améliorer la capacité de Claude à générer des résumés est le « fine-tuning » (ajustement fin). Le fine-tuning consiste à entraîner Claude sur un jeu de données personnalisé qui correspond spécifiquement à vos besoins de synthèse juridique, garantissant que Claude s'adapte à votre cas d'usage. Voici un aperçu de la manière d'effectuer un fine-tuning :
-
Identifier les erreurs : commencez par collecter les cas où les résumés de Claude sont insuffisants — cela peut inclure l'omission de détails juridiques critiques, une mauvaise compréhension du contexte ou l'utilisation d'une terminologie juridique inappropriée.
-
Constituer un jeu de données : une fois ces problèmes identifiés, compilez un jeu de données de ces exemples problématiques. Ce jeu de données doit inclure les documents juridiques originaux accompagnés de vos résumés corrigés, garantissant que Claude apprenne le comportement souhaité.
-
Effectuer le fine-tuning : le fine-tuning consiste à réentraîner le modèle sur votre jeu de données constitué afin d'ajuster ses poids et ses paramètres. Ce réentraînement aide Claude à mieux s'adapter aux exigences spécifiques de votre domaine juridique, améliorant sa capacité à résumer des documents selon vos normes.
-
Amélioration itérative : le fine-tuning n'est pas un processus ponctuel. À mesure que Claude continue de générer des résumés, vous pouvez ajouter de manière itérative de nouveaux exemples où il a sous-performé, affinant davantage ses capacités. Au fil du temps, cette boucle de rétroaction continue aboutira à un modèle hautement spécialisé pour vos tâches de synthèse juridique.
Consultez un exemple de code entièrement implémenté montrant comment utiliser Claude pour résumer des contrats.
Explorez la recette du cookbook sur les citations pour obtenir des conseils sur la manière de garantir l'exactitude et l'explicabilité des informations.
Was this page helpful?