访问我们的摘要制作手册查看使用Claude的法律摘要实现示例。

使用Claude构建之前

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

以下是一些关键指标,表明您应该使用像Claude这样的LLM来总结法律文档:
大规模文档审查在手动完成时可能耗时且昂贵。Claude可以快速处理和总结大量法律文档,显著减少与文档审查相关的时间和成本。这种能力对于尽职调查、合同分析或诉讼发现等任务特别有价值,在这些任务中效率至关重要。
Claude可以高效地从法律文档中提取和分类重要元数据,如涉及的当事方、日期、合同条款或特定条款。这种自动提取可以帮助组织信息,使搜索、分析和管理大型文档集变得更容易。它对于合同管理、合规检查或创建可搜索的法律信息数据库特别有用。
Claude可以生成遵循预定格式的结构化摘要,使法律专业人员更容易快速掌握各种文档的要点。这些标准化摘要可以提高可读性,便于文档之间的比较,并增强整体理解,特别是在处理复杂的法律语言或技术术语时。
在创建法律摘要时,适当的归属和引用对于确保可信度和符合法律标准至关重要。Claude可以被提示为所有引用的法律要点包含准确的引用,使法律专业人员更容易审查和验证摘要信息。
Claude可以通过快速分析大量案例法、法规和法律评论来协助法律研究。它可以识别相关先例,提取关键法律原则,并总结复杂的法律论证。这种能力可以显著加快研究过程,使法律专业人员能够专注于更高层次的分析和策略制定。

确定您希望摘要提取的详细信息

对于任何给定的文档,都没有单一正确的摘要。没有明确的指导,Claude很难确定要包含哪些详细信息。为了获得最佳结果,请确定您希望在摘要中包含的具体信息。 例如,在总结转租协议时,您可能希望提取以下要点:
details_to_extract = [
    '涉及的当事方(转租人、承租人和原出租人)',
    '物业详情(地址、描述和允许用途)', 
    '期限和租金(开始日期、结束日期、月租金和押金)',
    '责任(公用事业、维护和维修)',
    '同意和通知(房东同意和通知要求)',
    '特殊条款(家具、停车和转租限制)'
]

建立成功标准

评估摘要质量是一项众所周知的具有挑战性的任务。与许多其他自然语言处理任务不同,摘要评估通常缺乏明确、客观的指标。这个过程可能非常主观,不同的读者重视摘要的不同方面。以下是您在评估Claude执行法律摘要的效果时可能希望考虑的标准。
摘要应准确表示文档中的事实、法律概念和要点。
术语和对法规、案例法或法规的引用必须正确并符合法律标准。
摘要应将法律文档压缩到其要点,而不丢失重要细节。
如果总结多个文档,LLM应该对每个摘要保持一致的结构和方法。
文本应该清晰易懂。如果受众不是法律专家,摘要不应包含可能使受众困惑的法律术语。
摘要应呈现法律论证和立场的无偏见和公平描述。
查看我们关于建立成功标准的指南以获取更多信息。

如何使用Claude总结法律文档

选择正确的Claude模型

在总结法律文档时,模型准确性极其重要。Claude Sonnet 3.5(已弃用)是需要高准确性的用例的绝佳选择。如果您的文档大小和数量很大,以至于成本开始成为问题,您也可以尝试使用像Claude Haiku 3这样的较小模型。 为了帮助估算这些成本,以下是使用Sonnet和Haiku总结1,000份转租协议的成本比较:
  • 内容大小
    • 协议数量:1,000
    • 每份协议字符数:300,000
    • 总字符数:300M
  • 估计令牌
    • 输入令牌:86M(假设每3.5个字符1个令牌)
    • 每个摘要的输出令牌:350
    • 总输出令牌:350,000
  • Claude Sonnet 4.5估计成本
    • 输入令牌成本:86 MTok * $3.00/MTok = $258
    • 输出令牌成本:0.35 MTok * $15.00/MTok = $5.25
    • 总成本:$258.00 + $5.25 = $263.25
  • Claude Haiku 3估计成本
    • 输入令牌成本:86 MTok * $0.25/MTok = $21.50
    • 输出令牌成本:0.35 MTok * $1.25/MTok = $0.44
    • 总成本:$21.50 + $0.44 = $21.96
实际成本可能与这些估算不同。这些估算基于提示部分中突出显示的示例。

将文档转换为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'\s+', ' ', text) 

    # 删除页码
    text = re.sub(r'\n\s*\d+\s*\n', '\n', 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]) 
在这个示例中,我们首先下载摘要制作手册中使用的示例转租协议的pdf。该协议来源于sec.gov网站上公开可用的转租协议。 我们使用pypdf库提取pdf的内容并将其转换为文本。然后通过删除多余的空白和页码来清理文本数据。

构建强大的提示

Claude可以适应各种摘要风格。您可以更改提示的详细信息来指导Claude更详细或更简洁,包含更多或更少的技术术语,或提供更高或更低级别的上下文摘要。 以下是如何创建提示的示例,确保生成的摘要在分析转租协议时遵循一致的结构:
import anthropic

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

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

    # 格式化要提取的详细信息以放置在提示的上下文中
    details_to_extract_str = '\n'.join(details_to_extract)
    
    # 提示模型总结转租协议
    prompt = f"""总结以下转租协议。重点关注这些关键方面:

    {details_to_extract_str}

    在每个部分的XML标题内以项目符号形式提供摘要。例如:

    <涉及的当事方>
    - 转租人:[姓名]
    // 根据需要添加更多详细信息
    </涉及的当事方>
    
    如果文档中没有明确说明任何信息,请注明为"未指定"。不要前言。

    转租协议文本:
    {text}
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="您是专门从事房地产法的法律分析师,以高度准确和详细的转租协议摘要而闻名。",
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "以下是转租协议的摘要:<summary>"}
        ],
        stop_sequences=["</summary>"]
    )

    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标题内嵌套每个要提取的详细信息的摘要进行响应。 因为我们决定在标签内输出摘要的每个部分,所以每个部分都可以作为后处理步骤轻松解析出来。这种方法使结构化摘要能够适应您的用例,以便每个摘要都遵循相同的模式。

评估您的提示

提示通常需要测试和优化才能准备好投入生产。为了确定您的解决方案的准备情况,请使用结合定量和定性方法的系统过程评估摘要的质量。基于您定义的成功标准创建强大的经验评估将允许您优化提示。以下是您可能希望在经验评估中包含的一些指标:
这衡量生成的摘要与专家创建的参考摘要之间的重叠。此指标主要关注召回率,对评估内容覆盖率很有用。
虽然最初是为机器翻译开发的,但此指标可以适用于摘要任务。BLEU分数衡量生成的摘要与参考摘要之间n-gram匹配的精确度。更高的分数表明生成的摘要包含与参考摘要相似的短语和术语。
此指标涉及创建生成摘要和参考摘要的向量表示(嵌入)。然后计算这些嵌入之间的相似性,通常使用余弦相似性。更高的相似性分数表明生成的摘要捕获了参考摘要的语义含义和上下文,即使确切的措辞不同。
此方法涉及使用像Claude这样的LLM根据评分标准评估生成摘要的质量。标准可以根据您的特定需求进行定制,评估准确性、完整性和连贯性等关键因素。有关实施基于LLM的评分的指导,请查看这些提示
除了创建参考摘要外,法律专家还可以评估生成摘要的质量。虽然这在大规模上是昂贵和耗时的,但这通常在部署到生产之前对少数摘要进行理智检查。

部署您的提示

以下是在将解决方案部署到生产环境时要记住的一些额外考虑因素。
  1. **确保无责任:**了解摘要错误的法律影响,这可能导致您的组织或客户承担法律责任。提供免责声明或法律通知,明确说明摘要是由AI生成的,应由法律专业人员审查。
  2. **处理多样化的文档类型:**在本指南中,我们讨论了如何从PDF中提取文本。在现实世界中,文档可能有各种格式(PDF、Word文档、文本文件等)。确保您的数据提取管道可以转换您期望接收的所有文件格式。
  3. **并行化对Claude的API调用:**具有大量令牌的长文档可能需要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-sonnet-4-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"""
    
    您正在查看多个相关文档的分块摘要。
    将以下来自不同真实来源的文档摘要合并为一个连贯的整体摘要:

    <分块摘要>
    {"".join(chunk_summaries)}
    </分块摘要>

    重点关注这些关键方面:
    {details_to_extract_str})

    在每个部分的XML标题内以项目符号形式提供摘要。例如:

    <涉及的当事方>
    - 转租人:[姓名]
    // 根据需要添加更多详细信息
    </涉及的当事方>
    
    如果文档中没有明确说明任何信息,请注明为"未指定"。不要前言。
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="您是总结一个文档笔记的法律专家。",
        messages=[
            {"role": "user",  "content": final_summary_prompt},
            {"role": "assistant", "content": "以下是转租协议的摘要:<summary>"}

        ],
        stop_sequences=["</summary>"]
    )
    
    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个字符的块来实现这一点。然后组合各个摘要,并从这些块摘要创建最终摘要。 请注意,对于我们的示例pdf,summarize_long_document函数并不是严格必要的,因为整个文档适合Claude的上下文窗口。但是,对于超出Claude上下文窗口的文档或同时总结多个相关文档时,它变得至关重要。无论如何,这种元摘要技术通常在最终摘要中捕获在早期单摘要方法中遗漏的额外重要细节。

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

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

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

提高Claude生成摘要能力的另一种高级技术是微调。微调涉及在专门符合您的法律摘要需求的自定义数据集上训练Claude,确保Claude适应您的用例。以下是如何执行微调的概述:
  1. **识别错误:**首先收集Claude摘要不足的实例 - 这可能包括遗漏关键法律细节、误解上下文或使用不当的法律术语。
  2. **策划数据集:**一旦您识别了这些问题,编译这些有问题示例的数据集。此数据集应包括原始法律文档以及您的更正摘要,确保Claude学习所需的行为。
  3. **执行微调:**微调涉及在您策划的数据集上重新训练模型以调整其权重和参数。这种重新训练帮助Claude更好地理解您的法律领域的特定要求,提高其根据您的标准总结文档的能力。
  4. **迭代改进:**微调不是一次性过程。随着Claude继续生成摘要,您可以迭代地添加它表现不佳的新示例,进一步完善其能力。随着时间的推移,这种持续的反馈循环将产生一个高度专门化的法律摘要任务模型。
微调目前仅通过Amazon Bedrock提供。更多详细信息可在AWS发布博客中找到。