Besuchen Sie unser Summarization Cookbook, um ein Beispiel für die Implementierung einer juristischen Zusammenfassung mit Claude zu sehen.

Vor dem Aufbau mit Claude

Entscheiden Sie, ob Sie Claude für juristische Zusammenfassungen verwenden sollten

Hier sind einige wichtige Indikatoren dafür, dass Sie ein LLM wie Claude zur Zusammenfassung juristischer Dokumente einsetzen sollten:

Bestimmen Sie die Details, die die Zusammenfassung extrahieren soll

Es gibt keine einzige richtige Zusammenfassung für ein bestimmtes Dokument. Ohne klare Anweisungen kann es für Claude schwierig sein zu bestimmen, welche Details einbezogen werden sollen. Um optimale Ergebnisse zu erzielen, identifizieren Sie die spezifischen Informationen, die Sie in die Zusammenfassung aufnehmen möchten.

Wenn Sie beispielsweise eine Untermietvereinbarung zusammenfassen, möchten Sie möglicherweise die folgenden Schlüsselpunkte extrahieren:

details_to_extract = [
    'Beteiligte Parteien (Untervermieter, Untermieter und ursprünglicher Vermieter)',
    'Immobiliendetails (Adresse, Beschreibung und zulässige Nutzung)', 
    'Laufzeit und Miete (Startdatum, Enddatum, monatliche Miete und Kaution)',
    'Verantwortlichkeiten (Versorgungsleistungen, Instandhaltung und Reparaturen)',
    'Zustimmung und Mitteilungen (Zustimmung des Vermieters und Mitteilungsanforderungen)',
    'Besondere Bestimmungen (Möbel, Parkplätze und Untervermietungsbeschränkungen)'
]

Erfolgskriterien festlegen

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 klare, objektive Metriken. Der Prozess kann sehr subjektiv sein, wobei verschiedene Leser unterschiedliche Aspekte einer Zusammenfassung schätzen. Hier sind Kriterien, die Sie bei der Beurteilung berücksichtigen können, wie gut Claude juristische Zusammenfassungen erstellt.

Weitere Informationen finden Sie in unserem Leitfaden zur Festlegung von Erfolgskriterien.


Wie man juristische Dokumente mit Claude zusammenfasst

Wählen Sie das richtige Claude-Modell

Die Modellgenauigkeit ist äußerst wichtig bei der Zusammenfassung juristischer Dokumente. Claude Sonnet 3.5 ist eine ausgezeichnete Wahl für Anwendungsfälle wie diesen, bei denen hohe Genauigkeit erforderlich ist. Wenn die Größe und Anzahl Ihrer Dokumente so groß ist, dass die Kosten zu einem Problem werden, können Sie auch versuchen, ein kleineres Modell wie Claude Haiku 3 zu verwenden.

Um diese Kosten abzuschätzen, finden Sie unten einen Vergleich der Kosten für die Zusammenfassung von 1.000 Untermietverträgen mit Sonnet und Haiku:

  • Inhaltsgröße

    • Anzahl der Vereinbarungen: 1.000
    • Zeichen pro Vereinbarung: 300.000
    • Gesamtzeichen: 300M
  • Geschätzte Tokens

    • Input-Tokens: 86M (unter der Annahme von 1 Token pro 3,5 Zeichen)
    • Output-Tokens pro Zusammenfassung: 350
    • Gesamte Output-Tokens: 350.000
  • Claude Sonnet 4 geschätzte Kosten

    • Kosten für Input-Tokens: 86 MTok * $3,00/MTok = $258
    • Kosten für Output-Tokens: 0,35 MTok * $15,00/MTok = $5,25
    • Gesamtkosten: $258,00 + $5,25 = $263,25
  • Claude Haiku 3 geschätzte Kosten

    • Kosten für Input-Tokens: 86 MTok * $0,25/MTok = $21,50
    • Kosten für Output-Tokens: 0,35 MTok * $1,25/MTok = $0,44
    • Gesamtkosten: $21,50 + $0,44 = $21,96
Die tatsächlichen Kosten können von diesen Schätzungen abweichen. Diese Schätzungen basieren auf dem Beispiel, das im Abschnitt über Prompting hervorgehoben wird.

Dokumente in ein Format umwandeln, das Claude verarbeiten kann

Bevor Sie mit der Zusammenfassung von Dokumenten beginnen, müssen Sie Ihre Daten vorbereiten. Dies beinhaltet das Extrahieren von Text aus PDFs, das Bereinigen des Textes und die Sicherstellung, dass er bereit ist, von Claude verarbeitet zu werden.

Hier ist eine Demonstration dieses Prozesses an einem 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])

    # Entfernen von zusätzlichen Leerzeichen
    text = re.sub(r'\s+', ' ', text) 

    # Entfernen von Seitenzahlen
    text = re.sub(r'\n\s*\d+\s*\n', '\n', text) 

    return text


# Erstellen der vollständigen 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")

# Herunterladen der PDF-Datei in den Speicher
response = requests.get(url)

# Laden des PDFs aus dem Speicher
pdf_file = BytesIO(response.content)

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

In diesem Beispiel laden wir zunächst ein PDF einer Beispiel-Untermietvereinbarung herunter, die im Summarization Cookbook verwendet wird. Diese Vereinbarung stammt aus einer öffentlich zugänglichen Untermietvereinbarung von der sec.gov-Website.

Wir verwenden die pypdf-Bibliothek, um den Inhalt des PDFs zu extrahieren und in Text umzuwandeln. Die Textdaten werden dann bereinigt, indem zusätzliche Leerzeichen und Seitenzahlen entfernt werden.

Einen starken Prompt erstellen

Claude kann sich an verschiedene Zusammenfassungsstile anpassen. Sie können die Details des Prompts ändern, um Claude anzuleiten, ausführlicher oder weniger ausführlich zu sein, mehr oder weniger Fachterminologie einzubeziehen oder eine höhere oder niedrigere Zusammenfassung des vorliegenden Kontexts zu liefern.

Hier ist ein Beispiel dafür, wie man einen Prompt erstellt, der sicherstellt, dass die generierten Zusammenfassungen einer konsistenten Struktur folgen, wenn Untermietvereinbarungen analysiert werden:

import anthropic

# Initialisieren des Anthropic-Clients
client = anthropic.Anthropic()

def summarize_document(text, details_to_extract, model="claude-opus-4-20250514", max_tokens=1000):

    # Formatieren der zu extrahierenden Details für die Platzierung im Kontext des Prompts
    details_to_extract_str = '\n'.join(details_to_extract)
    
    # Aufforderung an das Modell, die Untermietvereinbarung zusammenzufassen
    prompt = f"""Fasse die folgende Untermietvereinbarung zusammen. Konzentriere dich auf diese Schlüsselaspekte:

    {details_to_extract_str}

    Stelle die Zusammenfassung in Aufzählungspunkten dar, die innerhalb des XML-Headers für jeden Abschnitt verschachtelt sind. Zum Beispiel:

    <beteiligte parteien>
    - Untervermieter: [Name]
    // Füge nach Bedarf weitere Details hinzu
    </beteiligte parteien>
    
    Wenn Informationen im Dokument nicht explizit angegeben sind, vermerke dies als "Nicht angegeben". Keine Einleitung.

    Text der Untermietvereinbarung:
    {text}
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="Du bist ein Rechtsanalyst, der sich auf Immobilienrecht spezialisiert hat und für hochpräzise und detaillierte Zusammenfassungen von Untermietvereinbarungen bekannt ist.",
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "Hier ist die Zusammenfassung der Untermietvereinbarung: <summary>"}
        ],
        stop_sequences=["</summary>"]
    )

    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 einer Untermietvereinbarung zusammenzufassen. Die Funktion akzeptiert einen Textstring und eine Liste der zu extrahierenden Details als Eingaben. In diesem Beispiel rufen wir die Funktion mit den Variablen document_text und details_to_extract auf, die in den vorherigen Codeausschnitten definiert wurden.

Innerhalb der Funktion wird ein Prompt für Claude generiert, der das zu zusammenfassende Dokument, die zu extrahierenden Details und spezifische Anweisungen zur 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 wir uns entschieden haben, jeden Abschnitt der Zusammenfassung innerhalb von Tags auszugeben, kann jeder Abschnitt leicht als Nachbearbeitungsschritt geparst werden. Dieser Ansatz ermöglicht strukturierte Zusammenfassungen, die an Ihren Anwendungsfall angepasst werden können, sodass jede Zusammenfassung dem gleichen Muster folgt.

Bewerten Sie Ihren Prompt

Prompting erfordert oft Tests und Optimierung, um produktionsreif zu sein. Um die Einsatzbereitschaft Ihrer Lösung zu bestimmen, bewerten Sie die Qualität Ihrer Zusammenfassungen mit einem systematischen Prozess, der quantitative und qualitative Methoden kombiniert. Die Erstellung einer starken empirischen Bewertung basierend auf Ihren definierten Erfolgskriterien ermöglicht es Ihnen, Ihre Prompts zu optimieren. Hier sind einige Metriken, die Sie in Ihre empirische Bewertung einbeziehen möchten:

Implementieren Sie Ihren Prompt

Hier sind einige zusätzliche Überlegungen, die Sie beachten sollten, wenn Sie Ihre Lösung in die Produktion bringen.

  1. Stellen Sie sicher, dass keine Haftung entsteht: Verstehen Sie die rechtlichen Auswirkungen von Fehlern in den Zusammenfassungen, die zu rechtlicher Haftung für Ihre Organisation oder Kunden führen könnten. Stellen Sie Haftungsausschlüsse oder rechtliche Hinweise bereit, die klarstellen, dass die Zusammenfassungen von KI generiert wurden und von Rechtsexperten überprüft werden sollten.

  2. Umgang mit verschiedenen Dokumenttypen: In diesem Leitfaden haben wir besprochen, wie man Text aus PDFs extrahiert. In der realen Welt können Dokumente in verschiedenen Formaten vorliegen (PDFs, Word-Dokumente, Textdateien usw.). Stellen Sie sicher, dass Ihre Datenextraktionspipeline alle Dateiformate konvertieren kann, die Sie voraussichtlich erhalten werden.

  3. Parallelisieren Sie API-Aufrufe an Claude: Lange Dokumente mit einer großen Anzahl von Tokens können bis zu einer Minute benötigen, damit Claude eine Zusammenfassung generiert. Für große Dokumentensammlungen möchten Sie möglicherweise API-Aufrufe an Claude parallel senden, damit die Zusammenfassungen in einem angemessenen Zeitrahmen abgeschlossen werden können. Beziehen Sie sich auf Anthropics Ratenlimits, um die maximale Anzahl von API-Aufrufen zu bestimmen, die parallel durchgeführt werden können.


Leistung verbessern

In komplexen Szenarien kann es hilfreich sein, zusätzliche Strategien zur Leistungsverbesserung über Standard-Prompt-Engineering-Techniken hinaus zu berücksichtigen. Hier sind einige fortgeschrittene Strategien:

Führen Sie Meta-Zusammenfassung durch, um lange Dokumente zusammenzufassen

Juristische Zusammenfassung beinhaltet oft die Bearbeitung langer Dokumente oder vieler verwandter Dokumente gleichzeitig, sodass Sie Claudes Kontextfenster überschreiten. Sie können eine Chunking-Methode namens Meta-Zusammenfassung verwenden, um diesen Anwendungsfall zu bewältigen. Diese Technik beinhaltet die Auft eilung von Dokumenten in kleinere, handhabbare Teile und die separate Verarbeitung jedes Teils. Sie können dann die Zusammenfassungen jedes Teils kombinieren, um eine Meta-Zusammenfassung des gesamten Dokuments zu erstellen.

Hier ist ein Beispiel dafür, wie man eine Meta-Zusammenfassung durchführt:

import anthropic

# Initialisieren des Anthropic-Clients
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-20250514", max_tokens=1000):

    # Formatieren der zu extrahierenden Details für die Platzierung im Kontext des Prompts
    details_to_extract_str = '\n'.join(details_to_extract)

    # Iteration über Chunks und Zusammenfassung jedes einzelnen
    chunk_summaries = [summarize_document(chunk, details_to_extract, model=model, max_tokens=max_tokens) for chunk in chunk_text(text)]
    
    final_summary_prompt = f"""
    
    Du betrachtest die gestückelten Zusammenfassungen mehrerer Dokumente, die alle miteinander zusammenhängen. 
    Kombiniere die folgenden Zusammenfassungen des Dokuments aus verschiedenen wahrheitsgetreuen Quellen zu einer kohärenten Gesamtzusammenfassung:

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

    Konzentriere dich auf diese Schlüsselaspekte:
    {details_to_extract_str})

    Stelle die Zusammenfassung in Aufzählungspunkten dar, die innerhalb des XML-Headers für jeden Abschnitt verschachtelt sind. Zum Beispiel:

    <beteiligte parteien>
    - Untervermieter: [Name]
    // Füge nach Bedarf weitere Details hinzu
    </beteiligte parteien>
    
    Wenn Informationen im Dokument nicht explizit angegeben sind, vermerke dies als "Nicht angegeben". Keine Einleitung.
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="Du bist ein Rechtsexperte, der Notizen zu einem Dokument zusammenfasst.",
        messages=[
            {"role": "user",  "content": final_summary_prompt},
            {"role": "assistant", "content": "Hier ist die Zusammenfassung der Untermietvereinbarung: <summary>"}

        ],
        stop_sequences=["</summary>"]
    )
    
    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 Teile aufteilt und jeden Teil einzeln zusammenfasst.

Der Code erreicht dies, indem er die Funktion summarize_document auf jeden Chunk von 20.000 Zeichen innerhalb des Originaldokuments anwendet. Die einzelnen Zusammenfassungen werden dann kombiniert, und aus diesen Chunk-Zusammenfassungen wird eine endgültige Zusammenfassung erstellt.

Beachten Sie, dass die Funktion summarize_long_document für unser 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 verwandte Dokumente zusammen zusammengefasst werden sollen. Unabhängig davon erfasst diese Meta-Zusammenfassungstechnik oft zusätzliche wichtige Details in der endgültigen Zusammenfassung, die im früheren Einzelzusammenfassungsansatz übersehen wurden.

Verwenden Sie zusammenfassungsindexierte Dokumente, um eine große Sammlung von Dokumenten zu durchsuchen

Die Suche in einer Sammlung von Dokumenten mit einem LLM beinhaltet normalerweise Retrieval-Augmented Generation (RAG). In Szenarien mit großen Dokumenten oder wenn präzise Informationsabruf entscheidend ist, kann ein grundlegender RAG-Ansatz jedoch unzureichend sein. Zusammenfassungsindexierte Dokumente sind ein fortgeschrittener RAG-Ansatz, der eine effizientere Methode zur Rangfolge von Dokumenten für den Abruf bietet und weniger Kontext als herkömmliche RAG-Methoden verwendet. Bei diesem Ansatz verwenden Sie zunächst Claude, um eine präzise Zusammenfassung für jedes Dokument in Ihrem Korpus zu erstellen, und dann Clade, um die Relevanz jeder Zusammenfassung für die gestellte Anfrage zu bewerten. Weitere Details zu diesem Ansatz, einschließlich eines codebasierten Beispiels, finden Sie im Abschnitt über zusammenfassungsindexierte Dokumente im Summarization Cookbook.

Feinabstimmung von Claude, um aus Ihrem Datensatz zu lernen

Eine weitere fortgeschrittene Technik zur Verbesserung von Claudes Fähigkeit, Zusammenfassungen zu generieren, ist die Feinabstimmung. Die Feinabstimmung beinhaltet das Training von Claude auf einem benutzerdefinierten Datensatz, der speziell auf Ihre juristischen Zusammenfassungsbedürfnisse abgestimmt ist, um sicherzustellen, dass Claude sich an Ihren Anwendungsfall anpasst. Hier ist ein Überblick darüber, wie man die Feinabstimmung durchführt:

  1. Fehler identifizieren: Beginnen Sie mit dem Sammeln von Fällen, in denen Claudes Zusammenfassungen unzureichend sind - dies könnte das Fehlen kritischer juristischer Details, Missverständnisse des Kontexts oder die Verwendung unangemessener juristischer Terminologie umfassen.

  2. Einen Datensatz kuratieren: Sobald Sie diese Probleme identifiziert haben, stellen Sie einen Datensatz dieser problematischen Beispiele zusammen. Dieser Datensatz sollte die ursprünglichen juristischen Dokumente zusammen mit Ihren korrigierten Zusammenfassungen enthalten, um sicherzustellen, dass Claude das gewünschte Verhalten lernt.

  3. Feinabstimmung durchführen: Die Feinabstimmung beinhaltet das Neutraining des Modells auf Ihrem kuratierten Datensatz, um seine Gewichte und Parameter anzupassen. Dieses Neutraining hilft Claude, die spezifischen Anforderungen Ihres juristischen Bereichs besser zu verstehen und verbessert seine Fähigkeit, Dokumente gemäß Ihren Standards zusammenzufassen.

  4. Iterative Verbesserung: Feinabstimmung ist kein einmaliger Prozess. Während Claude weiterhin Zusammenfassungen generiert, können Sie iterativ neue Beispiele hinzufügen, bei denen es unterdurchschnittlich abgeschnitten hat, und seine Fähigkeiten weiter verfeinern. Im Laufe der Zeit wird diese kontinuierliche Feedback-Schleife zu einem Modell führen, das für Ihre juristischen Zusammenfassungsaufgaben hochspezialisiert ist.

Feinabstimmung ist derzeit nur über Amazon Bedrock verfügbar. Weitere Details sind im AWS-Launch-Blog verfügbar.