Посетите наш сборник рецептов по резюмированию, чтобы увидеть пример реализации юридического резюмирования с использованием Claude.

Перед началом работы с Claude

Решите, стоит ли использовать Claude для юридического резюмирования

Вот несколько ключевых показателей того, что вам следует использовать LLM, такую как Claude, для резюмирования юридических документов:

Определите детали, которые вы хотите извлечь при резюмировании

Не существует единственно правильного резюме для любого документа. Без четких указаний Claude может быть сложно определить, какие детали включать. Для достижения оптимальных результатов определите конкретную информацию, которую вы хотите включить в резюме.

Например, при резюмировании договора субаренды вы можете захотеть извлечь следующие ключевые моменты:

details_to_extract = [
    'Участвующие стороны (субарендодатель, субарендатор и первоначальный арендодатель)',
    'Детали недвижимости (адрес, описание и разрешенное использование)',
    'Срок и арендная плата (дата начала, дата окончания, ежемесячная арендная плата и залоговый депозит)',
    'Обязанности (коммунальные услуги, обслуживание и ремонт)',
    'Согласие и уведомления (согласие арендодателя и требования к уведомлениям)',
    'Особые положения (мебель, парковка и ограничения на субаренду)'
]

Установите критерии успеха

Оценка качества резюме является заведомо сложной задачей. В отличие от многих других задач обработки естественного языка, оценка резюме часто не имеет четких, объективных метрик. Процесс может быть весьма субъективным, когда разные читатели ценят разные аспекты резюме. Вот критерии, которые вы можете рассмотреть при оценке того, насколько хорошо Claude выполняет юридическое резюмирование.

Смотрите наше руководство по установлению критериев успеха для получения дополнительной информации.


Как резюмировать юридические документы с помощью Claude

Выберите правильную модель Claude

Точность модели крайне важна при резюмировании юридических документов. Claude 3.5 Sonnet - отличный выбор для таких случаев использования, где требуется высокая точность. Если размер и количество ваших документов велики настолько, что затраты начинают вызывать беспокойство, вы также можете попробовать использовать более компактную модель, такую как Claude 3 Haiku.

Чтобы помочь оценить эти затраты, ниже приведено сравнение стоимости резюмирования 1000 договоров субаренды с использованием как Sonnet, так и Haiku:

  • Размер контента

    • Количество договоров: 1000
    • Символов на договор: 300000
    • Всего символов: 300M
  • Оценка токенов

    • Входные токены: 86M (предполагая 1 токен на 3.5 символа)
    • Выходные токены на резюме: 350
    • Всего выходных токенов: 350000
  • Оценка стоимости Claude 3.5 Sonnet

    • Стоимость входных токенов: 86 MTok * 3.00/MTok=3.00/MTok = 258
    • Стоимость выходных токенов: 0.35 MTok * 15.00/MTok=15.00/MTok = 5.25
    • Общая стоимость: 258.00+258.00 + 5.25 = $263.25
  • Оценка стоимости Claude 3 Haiku

    • Стоимость входных токенов: 86 MTok * 0.25/MTok=0.25/MTok = 21.50
    • Стоимость выходных токенов: 0.35 MTok * 1.25/MTok=1.25/MTok = 0.44
    • Общая стоимость: 21.50+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 из репозитория GitHub
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-3-5-sonnet-20241022", 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)

[Продолжение следует в следующем сообщении из-за ограничений длины]