访问我们的总结指南,查看使用Claude进行法律文件总结的示例实现。
使用Claude前的准备
决定是否使用Claude进行法律文件总结
以下是一些关键指标,表明您应该使用像Claude这样的LLM来总结法律文件:
确定您希望总结提取的细节
对于任何给定的文件,都没有唯一正确的总结。如果没有明确的指导,Claude可能难以确定应该包含哪些细节。为了获得最佳结果,请确定您想要在总结中包含的具体信息。
例如,在总结转租协议时,您可能希望提取以下关键点:
details_to_extract = [
'相关方(转租人、承租人和原出租人)',
'物业详情(地址、描述和允许用途)',
'期限和租金(开始日期、结束日期、月租金和押金)',
'责任(水电费、维护和维修)',
'同意和通知(房东同意和通知要求)',
'特殊条款(家具、停车和转租限制)'
]
建立成功标准
评估总结的质量是一项出了名的具有挑战性的任务。与许多其他自然语言处理任务不同,总结的评估往往缺乏明确的客观指标。这个过程可能高度主观,不同的读者会重视总结的不同方面。以下是评估Claude执行法律总结表现时可能考虑的标准。
更多信息请参见我们关于建立成功标准的指南。
如何使用Claude总结法律文件
选择合适的Claude模型
在总结法律文件时,模型的准确性极其重要。对于这类需要高准确性的用例,Claude 3.5 Sonnet是一个极好的选择。如果您的文件规模和数量较大,以至于成本开始成为一个考虑因素,您也可以尝试使用像Claude 3 Haiku这样的较小模型。
为帮助估算这些成本,以下是使用Sonnet和Haiku总结1,000份转租协议的成本比较:
-
内容规模
- 协议数量:1,000
- 每份协议字符数:300,000
- 总字符数:300M
-
估计token数
- 输入token:86M(假设每3.5个字符1个token)
- 每份总结的输出token:350
- 总输出token:350,000
-
Claude 3.5 Sonnet估计成本
- 输入token成本:86 MTok * 3.00/MTok=258
- 输出token成本:0.35 MTok * 15.00/MTok=5.25
- 总成本:258.00+5.25 = $263.25
-
Claude 3 Haiku估计成本
- 输入token成本:86 MTok * 0.25/MTok=21.50
- 输出token成本: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
url = "https://raw.githubusercontent.com/anthropics/anthropic-cookbook/main/skills/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")
response = requests.get(url)
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
client = anthropic.Anthropic()
def summarize_document(text, details_to_extract, model="claude-3-5-sonnet-20241022", max_tokens=1000):
details_to_extract_str = '\n'.join(details_to_extract)
prompt = f"""总结以下转租协议。关注这些关键方面:
{details_to_extract_str}
请在每个部分的XML标头内以项目符号形式提供总结。例如:
<parties involved>
- 转租人:[姓名]
// 根据需要添加更多细节
</parties involved>
如果文件中未明确说明任何信息,请注明"未指定"。不要添加前言。
转租协议文本:
{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)
[继续…]