Claude Platform Docs
最佳實務使用案例

法律文件摘要

本指南將逐步說明如何運用 Claude 先進的自然語言處理能力,有效率地摘要法律文件、擷取關鍵資訊並加速法律研究。透過 Claude,您可以簡化合約審閱、訴訟準備及法規遵循工作,節省時間並確保法律流程的準確性。

請造訪摘要 cookbook,查看使用 Claude 實作法律文件摘要的範例。

使用 Claude 建構之前

以下是一些關鍵指標,顯示您應該採用像 Claude 這樣的「large language model」(大型語言模型),即 LLM,來摘要法律文件:

確定您希望摘要擷取的細節

任何一份文件都沒有唯一正確的摘要。若缺乏明確的指引,Claude 可能難以判斷應納入哪些細節。為了獲得最佳結果,請先確認您希望摘要中包含的具體資訊。

舉例來說,在摘要一份轉租合約時,您可能希望擷取以下重點:

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)",
]

建立成功標準

評估摘要品質是出了名的困難任務。與許多其他自然語言處理任務不同,摘要的評估往往缺乏明確、客觀的衡量指標。這個過程可能相當主觀,不同的讀者會重視摘要的不同面向。以下是您在評估 Claude 執行法律文件摘要的表現時,可以考慮的標準。

請參閱建立成功標準指南以了解更多資訊。


選擇合適的 Claude 模型

在摘要法律文件時,模型的準確性極為重要。對於此類需要高準確性的使用情境,Claude Opus 5 是絕佳的選擇。如果您的文件規模與數量龐大,以致成本開始成為考量因素,您也可以嘗試使用較小的模型,例如 Claude Haiku 4.5。

為了協助估算這些成本,以下比較了使用 Opus 與 Haiku 模型摘要 1,000 份轉租合約的成本:

  • 內容規模

    • 合約數量:1,000
    • 每份合約字元數:300,000
    • 總字元數:300M
  • 預估 token 數

    • 輸入 token:86M(假設每 3.5 個字元為 1 個 token)
    • 每份摘要的輸出 token:350
    • 總輸出 token:350,000
  • Claude Opus 5 預估成本

    • 輸入 token 成本:86 MTok * $5.00/MTok = $430.00 USD
    • 輸出 token 成本:0.35 MTok * $25.00/MTok = $8.75 USD
    • 總成本:$430.00 + $8.75 = $438.75 USD
  • Claude Opus 4.8 預估成本

    • 輸入 token 成本:86 MTok * $5.00/MTok = $430.00 USD
    • 輸出 token 成本:0.35 MTok * $25.00/MTok = $8.75 USD
    • 總成本:$430.00 + $8.75 = $438.75 USD
  • Claude Haiku 4.5 預估成本

    • 輸入 token 成本:86 MTok * $1.00/MTok = $86.00 USD
    • 輸出 token 成本:0.35 MTok * $5.00/MTok = $1.75 USD
    • 總成本:$86.00 + $1.75 = $87.75 USD

將文件轉換為 Claude 可處理的格式

在開始摘要文件之前,您需要先準備資料。這包括從 PDF 中擷取文字、清理文字,並確保其已準備好供 Claude 處理。

以下是在一份範例 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])

    # 移除頁碼
    text = re.sub(r"\n\s*\d+\s*\n", "\n", text)

    # 移除多餘的空白
    text = re.sub(r"\s+", " ", text)

    return text


# 從 GitHub 儲存庫建立完整的 URL
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")

# 將 PDF 檔案下載至記憶體中
response = requests.get(url)

# 從記憶體載入 PDF
pdf_file = BytesIO(response.content)

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

在此範例中,您首先下載摘要 cookbook 中所使用的範例轉租合約 PDF。這份合約取自 sec.gov 網站上公開的轉租合約。

此範例使用 pypdf 函式庫擷取 PDF 的內容並將其轉換為文字。接著透過移除頁碼與多餘空白來清理文字資料。

建構強大的提示

Claude 能夠適應各種摘要風格。您可以調整提示的細節,引導 Claude 更詳盡或更精簡、納入更多或更少的專業術語,或針對當前內容提供較高層次或較低層次的摘要。

以下範例說明如何建立一個提示,確保在分析轉租合約時所產生的摘要遵循一致的結構:

Python
# 初始化 Anthropic 用戶端
client = anthropic.Anthropic()


def summarize_document(
    text, details_to_extract, model="claude-opus-5-5", max_tokens=1000
):
    # 格式化要擷取的細節,以便放入提示的上下文中
    details_to_extract_str = "\n".join(details_to_extract)

    # 提示模型摘要轉租合約
    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)

這段程式碼實作了一個 summarize_document 函式,使用 Claude 來摘要轉租合約的內容。該函式接受一個文字字串以及一份要擷取的細節清單作為輸入。在此範例中,程式碼以先前程式碼片段中定義的 document_text 與 details_to_extract 變數呼叫該函式。

在函式內部,會為 Claude 產生一個提示,其中包含要摘要的文件、要擷取的細節,以及摘要文件的具體指示。該提示指示 Claude 以巢狀於 XML 標頭內的方式,回覆每項待擷取細節的摘要。

由於程式碼將摘要的每個區段輸出於標籤之內,因此每個區段都可以在後處理步驟中輕鬆解析出來。這種方法能夠產生可依您的使用情境調整的結構化摘要,讓每份摘要都遵循相同的模式。

評估您的提示

提示通常需要經過測試與最佳化,才能達到可投入生產環境的程度。為了判斷您的解決方案是否已準備就緒,請使用結合量化與質化方法的系統化流程來評估摘要品質。根據您所定義的成功標準建立強大的實證評估,能讓您最佳化提示。以下是您可能希望納入實證評估中的一些指標:

部署您的提示

以下是您將解決方案部署至生產環境時需要留意的一些額外考量。

  1. 確保無法律責任: 了解摘要中的錯誤可能帶來的法律影響,這些錯誤可能導致您的組織或客戶承擔法律責任。請提供免責聲明或法律告示,說明摘要由 AI 產生,應由法律專業人員審閱。

  2. 處理多樣的文件類型: 本指南討論了如何從 PDF 中擷取文字。在實務上,文件可能以各種格式出現(例如 PDF、Word 文件及文字檔)。請確保您的資料擷取管線能夠轉換您預期會收到的所有檔案格式。

  3. 平行化對 Claude 的 API 呼叫: 包含大量 token 的長篇文件可能需要長達一分鐘的時間讓 Claude 產生摘要。對於大型文件集,您可能希望以平行方式向 Claude 發送 API 呼叫,以便在合理的時間內完成摘要。請參閱 Anthropic 的速率限制(rate limit),以確定可平行執行的 API 呼叫數量上限。


提升效能

在複雜的情境中,除了標準的提示工程技巧之外,考慮其他策略來提升效能可能會有所幫助。以下是一些進階策略:

執行後設摘要以摘要長篇文件

法律文件摘要經常需要一次處理長篇文件或許多相關文件,以致超出 Claude 的「context window」(上下文視窗)。您可以使用一種稱為後設摘要(meta-summarization)的分塊方法來處理此使用情境。此技術將文件拆分為較小、易於管理的區塊,然後分別處理每個區塊。接著,您可以將各區塊的摘要合併,建立整份文件的後設摘要。

以下是執行後設摘要的範例:

Python
# 初始化 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
):
    # 格式化要擷取的細節,以便放入提示的上下文中
    details_to_extract_str = "\n".join(details_to_extract)

    # 逐一處理各個區塊並分別摘要
    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)

summarize_long_document 函式以先前的 summarize_document 函式為基礎,將文件拆分為較小的區塊並逐一摘要每個區塊。

程式碼透過對原始文件中每 20,000 個字元的區塊套用 summarize_document 函式來達成此目的。接著將各個摘要合併,並從這些區塊摘要中建立最終摘要。

請注意,對於範例 PDF 而言,summarize_long_document 函式並非絕對必要,因為整份文件可容納於 Claude 的上下文視窗之內。然而,對於超出 Claude 上下文視窗的文件,或是在一併摘要多份相關文件時,它就變得不可或缺。無論如何,這種後設摘要技術往往能在最終摘要中捕捉到先前單一摘要方法所遺漏的其他重要細節。

使用摘要索引文件來探索大型文件集

使用 LLM 搜尋文件集通常涉及「retrieval-augmented generation」(檢索增強生成),即 RAG。然而,在涉及大型文件或精確資訊檢索至關重要的情境中,基本的 RAG 方法可能不夠充分。摘要索引文件(summary indexed documents)是一種進階的 RAG 方法,提供更有效率的文件檢索排序方式,且比傳統 RAG 方法使用更少的上下文。在此方法中,您首先使用 Claude 為語料庫中的每份文件產生簡潔的摘要,然後使用 Claude 對每份摘要與所提問題的相關性進行排序。如需此方法的進一步細節(包括程式碼範例),請查看摘要 cookbook 中的摘要索引文件章節。

微調 Claude 以從您的資料集中學習

另一項提升 Claude 產生摘要能力的進階技術是「fine-tuning」(微調)。微調是以專門符合您法律文件摘要需求的自訂資料集來訓練 Claude,確保 Claude 能適應您的使用情境。以下是執行微調的概述:

  1. 找出錯誤: 首先收集 Claude 摘要表現不佳的案例——這可能包括遺漏關鍵法律細節、誤解上下文,或使用不恰當的法律術語。

  2. 整理資料集: 一旦找出這些問題,請將這些有問題的範例彙整成資料集。此資料集應包含原始法律文件以及您修正後的摘要,以確保 Claude 學習到期望的行為。

  3. 執行微調: 微調是以您整理的資料集重新訓練模型,以調整其權重與參數。這種重新訓練有助於 Claude 更好地適應您法律領域的特定需求,提升其依照您的標準摘要文件的能力。

  4. 反覆改進: 微調並非一次性的流程。隨著 Claude 持續產生摘要,您可以反覆加入其表現不佳的新範例,進一步精進其能力。隨著時間推移,這種持續的回饋循環將造就一個高度專精於您法律文件摘要任務的模型。

查看如何使用 Claude 摘要合約的完整程式碼實作範例。

探索引用 cookbook 範例,了解如何確保資訊的準確性與可解釋性。

Was this page helpful?