法律文档摘要

本指南介绍如何利用 Claude 先进的自然语言处理能力高效地摘要法律文档,提取关键信息并加速法律研究。借助 Claude,您可以简化合同审查、诉讼准备和监管工作,节省时间并确保法律流程的准确性。


访问摘要 Cookbook查看使用 Claude 实现法律文档摘要的示例。

使用 Claude 构建之前

决定是否使用 Claude 进行法律文档摘要

以下是一些关键指标,表明您应该使用像 Claude 这样的 LLM 来摘要法律文档:

您希望以经济高效的方式高效审查大量文档

大规模文档审查在手动完成时可能耗时且昂贵。Claude 可以快速处理和摘要大量法律文档,显著减少与文档审查相关的时间和成本。此能力对于尽职调查、合同分析或诉讼发现等需要效率的任务尤为有价值。

您需要自动提取关键元数据

Claude 可以高效地从法律文档中提取和分类重要的元数据,如相关方、日期、合同条款或特定条款。这种自动提取可以帮助组织信息,使其更易于搜索、分析和管理大型文档集。它对于合同管理、合规检查或创建可搜索的法律信息数据库特别有用。

您希望生成清晰、简洁和标准化的摘要

Claude 可以生成遵循预定格式的结构化摘要,使法律专业人士更容易快速掌握各种文档的要点。这些标准化摘要可以提高可读性,促进文档之间的比较,并增强整体理解,特别是在处理复杂的法律语言或技术术语时。

您需要为摘要提供精确的引用

在创建法律摘要时,适当的归属和引用对于确保可信度和符合法律标准至关重要。可以提示 Claude 为所有引用的法律要点包含准确的引用,使法律专业人士更容易审查和验证摘要信息。

您希望简化和加速法律研究流程

Claude 可以通过快速分析大量判例法、法规和法律评论来协助法律研究。它可以识别相关先例,提取关键法律原则,并摘要复杂的法律论证。此能力可以显著加速研究过程,使法律专业人士能够专注于更高层次的分析和战略制定。

确定您希望摘要提取的详情

对于任何给定的文档,没有唯一正确的摘要。如果没有明确的方向,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 执行法律文档摘要效果时可以考虑的标准。

事实正确性

摘要应准确反映文档中的事实、法律概念和要点。

法律精确性

术语以及对法规、判例法或法规的引用必须正确且符合法律标准。

简洁性

摘要应将法律文档浓缩为其要点,同时不丢失重要细节。

一致性

如果摘要多个文档,LLM 应对每个摘要保持一致的结构和方法。

可读性

文本应清晰易懂。如果受众不是法律专家,摘要不应包含可能混淆受众的法律术语。

偏见和公平性

摘要应呈现对法律论证和立场的无偏见和公平的描述。

有关更多信息,请参阅建立成功标准指南。


如何使用 Claude 摘要法律文档

选择合适的 Claude 模型

在摘要法律文档时,模型准确性极为重要。Claude Opus 4.7 是像这样需要高准确性的用例的极佳选择。如果您的文档大小和数量大到成本成为关注点,您也可以尝试使用像 Claude Haiku 4.5 这样的较小模型。

为了帮助估算这些成本,以下是使用 Opus 和 Haiku 摘要 1,000 份转租协议的成本对比:

  • 内容大小

    • 协议数量:1,000
    • 每份协议字符数:300,000
    • 总字符数:3 亿
  • 估算 token 数

    • 输入 token:8,600 万(假设每 3.5 个字符 1 个 token)
    • 每份摘要的输出 token:350
    • 总输出 token:350,000
  • Claude Opus 4.7 估算成本

    • 输入 token 成本:86 MTok x $5.00/MTok = $430.00 USD
    • 输出 token 成本:0.35 MTok x $25.00/MTok = $8.75 USD
    • 总成本:$430.00 + $8.75 = $438.75 USD
  • Claude Haiku 4.5 估算成本

    • 输入 token 成本:86 MTok x $1.00/MTok = $86.00 USD
    • 输出 token 成本:0.35 MTok x $5.00/MTok = $1.75 USD
    • 总成本:$86.00 + $1.75 = $87.75 USD
Tip
实际成本可能与这些估算不同。这些估算基于提示部分中突出显示的示例。

将文档转换为 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/anthropic-cookbook/main/skills/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 更加详细或简洁,包含更多或更少的技术术语,或提供更高或更低层次的上下文摘要。

以下是创建提示词的示例,确保在分析转租协议时生成的摘要遵循一致的结构:

import anthropic

# 初始化 Anthropic 客户端
client = anthropic.Anthropic()


def summarize_document(
    text, details_to_extract, model="claude-opus-4-7", 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 response.content[0].text


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

此代码实现了一个 summarize_document 函数,使用 Claude 摘要转租协议的内容。该函数接受文本字符串和要提取的详情列表作为输入。在此示例中,代码使用前面代码片段中定义的 document_textdetails_to_extract 变量调用该函数。

在函数内部,为 Claude 生成一个提示词,包括要摘要的文档、要提取的详情以及摘要文档的具体指令。该提示词指示 Claude 在 XML 标题中嵌套每个要提取的详情的摘要进行回复。

因为代码在标签中输出摘要的每个部分,所以每个部分可以轻松地作为后处理步骤解析出来。这种方法实现了可以适应您用例的结构化摘要,使每个摘要都遵循相同的模式。

评估您的提示词

提示词通常需要测试和优化才能达到生产就绪状态。要确定解决方案的就绪状态,请使用结合定量和定性方法的系统流程评估摘要质量。基于您定义的成功标准创建强有力的实证评估使您能够优化提示词。以下是您可能希望包含在实证评估中的一些指标:

ROUGE 分数

此指标衡量生成的摘要与专家创建的参考摘要之间的重叠。此指标主要关注召回率,对于评估内容覆盖范围很有用。

BLEU 分数

虽然最初是为机器翻译开发的,但此指标可以适用于摘要任务。BLEU 分数衡量生成的摘要与参考摘要之间 n-gram 匹配的精确率。分数越高表示生成的摘要包含与参考摘要相似的短语和术语。

上下文嵌入相似度

此指标涉及为生成的摘要和参考摘要创建向量表示(嵌入)。然后计算这些嵌入之间的相似度,通常使用余弦相似度。更高的相似度分数表示生成的摘要捕获了参考摘要的语义含义和上下文,即使确切措辞不同。

基于 LLM 的评分

此方法涉及使用像 Claude 这样的 LLM 根据评分标准评估生成摘要的质量。该标准可以根据您的特定需求进行定制,评估准确性、完整性和连贯性等关键因素。有关实施基于 LLM 的评分的指导,请查看这些提示

人工评估

除了创建参考摘要外,法律专家还可以评估生成摘要的质量。虽然这在大规模上既昂贵又耗时,但通常在部署到生产环境之前对少数摘要进行健全性检查。

部署您的提示词

以下是将解决方案部署到生产环境时需要记住的一些额外考虑事项。

  1. 确保无责任风险: 了解摘要中错误的法律影响,这可能给您的组织或客户带来法律责任。提供免责声明或法律通知,澄清摘要是由 AI 生成的,应由法律专业人士审查。

  2. 处理多样化的文档类型: 本指南讨论了如何从 PDF 中提取文本。在现实世界中,文档可能以各种格式出现(PDF、Word 文档、文本文件等)。确保您的数据提取管道可以转换您预期接收的所有文件格式。

  3. 并行化对 Claude 的 API 调用: 具有大量 token 的长文档可能需要长达一分钟才能让 Claude 生成摘要。对于大型文档集合,您可能希望并行发送对 Claude 的 API 调用,以便在合理的时间范围内完成摘要。请参阅 Anthropic 的速率限制以确定可以并行执行的最大 API 调用量。


提升性能

在复杂场景中,考虑在标准提示工程技术之外的额外策略来提升性能可能会有所帮助。以下是一些高级策略:

执行元摘要来摘要长文档

法律文档摘要通常涉及同时处理长文档或多个相关文档,以至于超过 Claude 的上下文窗口。您可以使用一种称为元摘要的分块方法来处理此用例。该技术涉及将文档分解为更小、可管理的块,然后分别处理每个块。然后您可以组合每个块的摘要来创建整个文档的元摘要。

以下是执行元摘要的示例:

import anthropic

# 初始化 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-4-7", 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 response.content[0].text


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

summarize_long_document 函数在之前的 summarize_document 函数基础上进行了扩展,将文档拆分为更小的块并分别摘要每个块。

代码通过将 summarize_document 函数应用于原始文档中每 20,000 个字符的块来实现这一点。然后组合各个摘要,并从这些块摘要中创建最终摘要。

请注意,summarize_long_document 函数对于示例 PDF 并非严格必要,因为整个文档适合 Claude 的上下文窗口。但是,对于超过 Claude 上下文窗口的文档或同时摘要多个相关文档时,它是必不可少的。尽管如此,这种元摘要技术通常会在最终摘要中捕获早期单次摘要方法中遗漏的额外重要细节。

使用摘要索引文档探索大型文档集合

使用 LLM 搜索文档集合通常涉及检索增强生成(RAG)。但是,在涉及大型文档或精确信息检索至关重要的场景中,基本的 RAG 方法可能不够。摘要索引文档是一种高级 RAG 方法,它提供了一种更高效的方式来对文档进行检索排名,使用的上下文比传统 RAG 方法更少。在此方法中,您首先使用 Claude 为语料库中的每个文档生成简洁的摘要,然后使用 Claude 对每个摘要与所问查询的相关性进行排名。有关此方法的更多详情,包括基于代码的示例,请查看摘要 Cookbook中的摘要索引文档部分。

微调 Claude 以从您的数据集中学习

另一种提高 Claude 生成摘要能力的高级技术是微调。微调涉及在自定义数据集上训练 Claude,该数据集专门与您的法律摘要需求保持一致,确保 Claude 适应您的用例。以下是执行微调的概述:

  1. 识别错误: 首先收集 Claude 的摘要不足的实例——这可能包括遗漏关键法律细节、误解上下文或使用不当的法律术语。

  2. 整理数据集: 识别这些问题后,将这些有问题的示例编译成数据集。该数据集应包括原始法律文档以及您纠正的摘要,确保 Claude 学习到期望的行为。

  3. 执行微调: 微调涉及在您整理的数据集上重新训练模型以调整其权重和参数。此重新训练帮助 Claude 更好地理解您法律领域的特定要求,提高其按照您的标准摘要文档的能力。

  4. 迭代改进: 微调不是一次性过程。随着 Claude 继续生成摘要,您可以迭代添加它表现不佳的新示例,进一步完善其能力。随着时间的推移,这个持续的反馈循环将产生一个高度专业化的法律摘要任务模型。

Tip
微调目前仅通过 Amazon Bedrock 提供。更多详情请参阅 AWS 发布博客