Besuche das Summarization Cookbook, um eine Beispielimplementierung für die Zusammenfassung juristischer Dokumente mit Claude zu sehen.
Hier sind einige wichtige Indikatoren dafür, dass du ein LLM wie Claude einsetzen solltest, um juristische Dokumente zusammenzufassen:
Es gibt keine einzig richtige Zusammenfassung für ein bestimmtes Dokument. Ohne klare Anweisungen kann es für Claude schwierig sein zu bestimmen, welche Details aufgenommen werden sollen. Um optimale Ergebnisse zu erzielen, identifiziere die spezifischen Informationen, die du in die Zusammenfassung aufnehmen möchtest.
Wenn du beispielsweise einen Untermietvertrag zusammenfasst, möchtest du möglicherweise die folgenden wichtigen Punkte extrahieren:
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)",
]Die Bewertung der Qualität von Zusammenfassungen ist eine bekanntermaßen schwierige Aufgabe. Im Gegensatz zu vielen anderen Aufgaben der Verarbeitung natürlicher Sprache fehlen bei der Bewertung von Zusammenfassungen oft eindeutige, objektive Metriken. Der Prozess kann sehr subjektiv sein, da verschiedene Leser unterschiedliche Aspekte einer Zusammenfassung schätzen. Hier sind Kriterien, die du berücksichtigen solltest, wenn du bewertest, wie gut Claude juristische Zusammenfassungen erstellt.
Weitere Informationen findest du im Leitfaden zum Festlegen von Erfolgskriterien.
Die Modellgenauigkeit ist bei der Zusammenfassung juristischer Dokumente äußerst wichtig. Claude Opus 4.8 ist eine ausgezeichnete Wahl für Anwendungsfälle wie diesen, bei denen hohe Genauigkeit erforderlich ist. Wenn die Größe und Menge deiner Dokumente so groß ist, dass die Kosten zu einem Problem werden, kannst du auch ein kleineres Modell wie Claude Haiku 4.5 ausprobieren.
Um diese Kosten abzuschätzen, folgt hier ein Vergleich der Kosten für die Zusammenfassung von 1.000 Untermietverträgen mit Opus und Haiku:
Inhaltsgröße
Geschätzte Token
Geschätzte Kosten für Claude Opus 4.8
Geschätzte Kosten für Claude Haiku 4.5
Bevor du mit der Zusammenfassung von Dokumenten beginnst, musst du deine Daten vorbereiten. Dies umfasst das Extrahieren von Text aus PDFs, das Bereinigen des Textes und das Sicherstellen, dass er von Claude verarbeitet werden kann.
Hier ist eine Demonstration dieses Prozesses anhand einer Beispiel-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])
# Entferne Seitenzahlen
text = re.sub(r"\n\s*\d+\s*\n", "\n", text)
# Entferne überflüssige Leerzeichen
text = re.sub(r"\s+", " ", text)
return text
# Erstelle die vollständige URL aus dem GitHub-Repository
url = "https://raw.githubusercontent.com/anthropics/anthropic-cookbook/main/skills/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")
# Lade die PDF-Datei in den Arbeitsspeicher herunter
response = requests.get(url)
# Lade das PDF aus dem Arbeitsspeicher
pdf_file = BytesIO(response.content)
document_text = get_llm_text(pdf_file)
print(document_text[:50000])In diesem Beispiel lädst du zunächst eine PDF eines Beispiel-Untermietvertrags herunter, der im Summarization Cookbook verwendet wird. Dieser Vertrag stammt aus einem öffentlich verfügbaren Untermietvertrag von der sec.gov-Website.
Das Beispiel verwendet die pypdf-Bibliothek, um den Inhalt der PDF zu extrahieren und in Text umzuwandeln. Die Textdaten werden dann bereinigt, indem Seitenzahlen und überflüssige Leerzeichen entfernt werden.
Claude kann sich an verschiedene Zusammenfassungsstile anpassen. Du kannst die Details des Prompts ändern, um Claude anzuweisen, mehr oder weniger ausführlich zu sein, mehr oder weniger Fachterminologie einzubeziehen oder eine übergeordnete oder detailliertere Zusammenfassung des vorliegenden Kontexts zu liefern.
Hier ist ein Beispiel dafür, wie du einen Prompt erstellst, der sicherstellt, dass die generierten Zusammenfassungen bei der Analyse von Untermietverträgen einer konsistenten Struktur folgen:
# Initialisiere den Anthropic-Client
client = anthropic.Anthropic()
def summarize_document(
text, details_to_extract, model="claude-opus-4-8", max_tokens=1000
):
# Formatiere die zu extrahierenden Details für die Platzierung im Kontext des Prompts
details_to_extract_str = "\n".join(details_to_extract)
# Fordere das Modell auf, den Untermietvertrag zusammenzufassen
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 response.content[0].text
sublease_summary = summarize_document(document_text, details_to_extract)
print(sublease_summary)Dieser Code implementiert eine summarize_document-Funktion, die Claude verwendet, um den Inhalt eines Untermietvertrags zusammenzufassen. Die Funktion akzeptiert einen Text-String und eine Liste von zu extrahierenden Details als Eingaben. In diesem Beispiel ruft der Code die Funktion mit den Variablen document_text und details_to_extract auf, die in den vorherigen Code-Snippets definiert wurden.
Innerhalb der Funktion wird ein Prompt für Claude generiert, der das zusammenzufassende Dokument, die zu extrahierenden Details und spezifische Anweisungen für die Zusammenfassung des Dokuments enthält. Der Prompt weist Claude an, mit einer Zusammenfassung jedes zu extrahierenden Details zu antworten, die in XML-Headern verschachtelt ist.
Da der Code jeden Abschnitt der Zusammenfassung innerhalb von Tags ausgibt, kann jeder Abschnitt in einem Nachbearbeitungsschritt leicht herausgeparst werden. Dieser Ansatz ermöglicht strukturierte Zusammenfassungen, die an deinen Anwendungsfall angepasst werden können, sodass jede Zusammenfassung demselben Muster folgt.
Prompting erfordert oft Tests und Optimierung, bevor es produktionsreif ist. Um die Einsatzbereitschaft deiner Lösung zu bestimmen, evaluiere die Qualität deiner Zusammenfassungen mit einem systematischen Prozess, der quantitative und qualitative Methoden kombiniert. Die Erstellung einer starken empirischen Evaluierung basierend auf deinen definierten Erfolgskriterien ermöglicht es dir, deine Prompts zu optimieren. Hier sind einige Metriken, die du in deine empirische Evaluierung aufnehmen könntest:
Hier sind einige zusätzliche Überlegungen, die du beachten solltest, wenn du deine Lösung in Produktion bringst.
Stelle sicher, dass keine Haftung entsteht: Verstehe die rechtlichen Auswirkungen von Fehlern in den Zusammenfassungen, die zu rechtlicher Haftung für deine Organisation oder Kunden führen könnten. Stelle Haftungsausschlüsse oder rechtliche Hinweise bereit, die klarstellen, dass die Zusammenfassungen von KI generiert wurden und von Juristen überprüft werden sollten.
Verarbeite verschiedene Dokumenttypen: Dieser Leitfaden behandelt, wie man Text aus PDFs extrahiert. In der Praxis können Dokumente in verschiedenen Formaten vorliegen (PDFs, Word-Dokumente, Textdateien usw.). Stelle sicher, dass deine Datenextraktions-Pipeline alle Dateiformate konvertieren kann, die du erwartest.
Parallelisiere API-Aufrufe an Claude: Lange Dokumente mit einer großen Anzahl von Token können bis zu einer Minute benötigen, bis Claude eine Zusammenfassung generiert. Bei großen Dokumentensammlungen möchtest du möglicherweise API-Aufrufe an Claude parallel senden, damit die Zusammenfassungen in einem angemessenen Zeitrahmen abgeschlossen werden können. Schau dir Anthropics Ratenlimits an, um die maximale Anzahl von API-Aufrufen zu bestimmen, die parallel ausgeführt werden können.
In komplexen Szenarien kann es hilfreich sein, zusätzliche Strategien zur Leistungsverbesserung über die standardmäßigen Prompt-Engineering-Techniken hinaus in Betracht zu ziehen. Hier sind einige fortgeschrittene Strategien:
Die Zusammenfassung juristischer Dokumente beinhaltet oft die Verarbeitung langer Dokumente oder vieler zusammenhängender Dokumente auf einmal, sodass du Claudes Kontextfenster überschreitest. Du kannst eine Chunking-Methode namens Meta-Zusammenfassung verwenden, um diesen Anwendungsfall zu bewältigen. Diese Technik beinhaltet das Aufteilen von Dokumenten in kleinere, handhabbare Chunks und die anschließende separate Verarbeitung jedes Chunks. Du kannst dann die Zusammenfassungen jedes Chunks kombinieren, um eine Meta-Zusammenfassung des gesamten Dokuments zu erstellen.
Hier ist ein Beispiel dafür, wie man Meta-Zusammenfassung durchführt:
# Initialisiere den Anthropic-Client
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-4-8", max_tokens=1000
):
# Formatiere die zu extrahierenden Details für die Platzierung im Kontext des Prompts
details_to_extract_str = "\n".join(details_to_extract)
# Iteriere über die Chunks und fasse jeden einzeln zusammen
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 response.content[0].text
long_summary = summarize_long_document(document_text, details_to_extract)
print(long_summary)Die Funktion summarize_long_document baut auf der früheren Funktion summarize_document auf, indem sie das Dokument in kleinere Chunks aufteilt und jeden Chunk einzeln zusammenfasst.
Der Code erreicht dies, indem er die Funktion summarize_document auf jeden Chunk von 20.000 Zeichen innerhalb des ursprünglichen Dokuments anwendet. Die einzelnen Zusammenfassungen werden dann kombiniert, und aus diesen Chunk-Zusammenfassungen wird eine endgültige Zusammenfassung erstellt.
Beachte, dass die Funktion summarize_long_document für die Beispiel-PDF nicht unbedingt erforderlich ist, da das gesamte Dokument in Claudes Kontextfenster passt. Sie wird jedoch unerlässlich für Dokumente, die Claudes Kontextfenster überschreiten, oder wenn mehrere zusammenhängende Dokumente gemeinsam zusammengefasst werden. Unabhängig davon erfasst diese Meta-Zusammenfassungstechnik oft zusätzliche wichtige Details in der endgültigen Zusammenfassung, die beim früheren Ansatz mit einer einzelnen Zusammenfassung übersehen wurden.
Das Durchsuchen einer Dokumentensammlung mit einem LLM beinhaltet normalerweise „retrieval-augmented generation" (abrufgestützte Generierung), oder RAG. In Szenarien mit großen Dokumenten oder wenn präzise Informationsabfrage entscheidend ist, kann ein grundlegender RAG-Ansatz jedoch unzureichend sein. Zusammenfassungsindizierte Dokumente sind ein fortgeschrittener RAG-Ansatz, der eine effizientere Möglichkeit bietet, Dokumente für den Abruf zu ranken, wobei weniger Kontext als bei traditionellen RAG-Methoden verwendet wird. Bei diesem Ansatz verwendest du zunächst Claude, um eine prägnante Zusammenfassung für jedes Dokument in deinem Korpus zu generieren, und verwendest dann Claude, um die Relevanz jeder Zusammenfassung für die gestellte Anfrage zu bewerten. Weitere Details zu diesem Ansatz, einschließlich eines codebasierten Beispiels, findest du im Abschnitt zu zusammenfassungsindizierten Dokumenten im Summarization Cookbook.
Eine weitere fortgeschrittene Technik zur Verbesserung von Claudes Fähigkeit, Zusammenfassungen zu generieren, ist „fine-tuning" (Feinabstimmung). Fine-tuning beinhaltet das Training von Claude auf einem benutzerdefinierten Datensatz, der speziell auf deine Anforderungen an juristische Zusammenfassungen abgestimmt ist, wodurch sichergestellt wird, dass sich Claude an deinen Anwendungsfall anpasst. Hier ist ein Überblick darüber, wie man Fine-tuning durchführt:
Identifiziere Fehler: Beginne damit, Fälle zu sammeln, in denen Claudes Zusammenfassungen unzureichend sind – dies könnte das Fehlen kritischer juristischer Details, das Missverstehen des Kontexts oder die Verwendung unangemessener juristischer Terminologie umfassen.
Kuratiere einen Datensatz: Sobald du diese Probleme identifiziert hast, stelle einen Datensatz dieser problematischen Beispiele zusammen. Dieser Datensatz sollte die ursprünglichen juristischen Dokumente zusammen mit deinen korrigierten Zusammenfassungen enthalten, um sicherzustellen, dass Claude das gewünschte Verhalten lernt.
Führe Fine-tuning durch: Fine-tuning beinhaltet das erneute Training des Modells auf deinem kuratierten Datensatz, um seine Gewichte und Parameter anzupassen. Dieses erneute Training hilft Claude, die spezifischen Anforderungen deines juristischen Bereichs besser zu verstehen und seine Fähigkeit zu verbessern, Dokumente gemäß deinen Standards zusammenzufassen.
Iterative Verbesserung: Fine-tuning ist kein einmaliger Prozess. Während Claude weiterhin Zusammenfassungen generiert, kannst du iterativ neue Beispiele hinzufügen, bei denen es unterdurchschnittlich abgeschnitten hat, und so seine Fähigkeiten weiter verfeinern. Im Laufe der Zeit wird diese kontinuierliche Feedback-Schleife zu einem Modell führen, das hochspezialisiert für deine juristischen Zusammenfassungsaufgaben ist.
Sieh dir ein vollständig implementiertes codebasiertes Beispiel an, wie du Claude zur Zusammenfassung von Verträgen verwendest.
Erkunde das Citations-Cookbook-Rezept für Anleitungen, wie du Genauigkeit und Erklärbarkeit von Informationen sicherstellst.
Was this page helpful?