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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

    • Стоимость входных токенов: 86 млн токенов * 3,00/млнтокенов=3,00/млн токенов = 258
    • Стоимость выходных токенов: 0,35 млн токенов * 15,00/млнтокенов=15,00/млн токенов = 5,25
    • Общая стоимость: 258,00+258,00 + 5,25 = $263,25
  • Оценка стоимости Claude Haiku 3

    • Стоимость входных токенов: 86 млн токенов * 0,25/млнтокенов=0,25/млн токенов = 21,50
    • Стоимость выходных токенов: 0,35 млн токенов * 1,25/млнтокенов=1,25/млн токенов = 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-opus-4-20250514", 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)

Этот код реализует функцию summarize_document, которая использует Claude для резюмирования содержимого договора субаренды. Функция принимает текстовую строку и список деталей для извлечения в качестве входных данных. В этом примере мы вызываем функцию с переменными document_text и details_to_extract, которые были определены в предыдущих фрагментах кода.

Внутри функции для Claude генерируется промпт, включающий документ для резюмирования, детали для извлечения и конкретные инструкции по резюмированию документа. Промпт инструктирует Claude отвечать резюме каждой детали для извлечения, вложенной в XML-заголовки.

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

Оцените ваш промпт

Составление промптов часто требует тестирования и оптимизации, чтобы быть готовым к производству. Чтобы определить готовность вашего решения, оцените качество ваших резюме, используя систематический процесс, сочетающий количественные и качественные методы. Создание сильной эмпирической оценки на основе ваших определенных критериев успеха позволит вам оптимизировать ваши промпты. Вот некоторые метрики, которые вы можете включить в вашу эмпирическую оценку:

Разверните ваш промпт

Вот некоторые дополнительные соображения, которые следует иметь в виду при развертывании вашего решения в производство.

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

  2. Обрабатывайте различные типы документов: В этом руководстве мы обсудили, как извлекать текст из PDF. В реальном мире документы могут быть в различных форматах (PDF, документы Word, текстовые файлы и т.д.). Убедитесь, что ваш конвейер извлечения данных может конвертировать все форматы файлов, которые вы ожидаете получить.

  3. Распараллельте API-вызовы к Claude: Длинные документы с большим количеством токенов могут требовать до минуты для генерации резюме Claude. Для больших коллекций документов вы можете захотеть отправлять API-вызовы к Claude параллельно, чтобы резюме могли быть завершены в разумные сроки. Обратитесь к ограничениям скорости 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-20250514", 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"""
    
    Вы просматриваете разбитые резюме нескольких документов, которые все связаны. 
    Объедините следующие резюме документа из разных достоверных источников в связное общее резюме:

    <chunked_summaries>
    {"".join(chunk_summaries)}
    </chunked_summaries>

    Сосредоточьтесь на этих ключевых аспектах:
    {details_to_extract_str})

    Предоставьте резюме в виде маркированных пунктов, вложенных в XML-заголовок для каждого раздела. Например:

    <parties involved>
    - Субарендодатель: [Имя]
    // Добавьте больше деталей по необходимости
    </parties involved>
    
    Если какая-либо информация не указана явно в документе, отметьте ее как "Не указано". Не делайте преамбулу.
    """

    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 символов в исходном документе. Затем отдельные резюме объединяются, и из этих резюме фрагментов создается итоговое резюме.

Обратите внимание, что функция summarize_long_document не является строго необходимой для нашего примера PDF, так как весь документ помещается в контекстное окно Claude. Однако она становится необходимой для документов, превышающих контекстное окно Claude, или при резюмировании нескольких связанных документов вместе. Тем не менее, эта техника мета-резюмирования часто захватывает дополнительные важные детали в итоговом резюме, которые были пропущены в более раннем подходе с одним резюме.

Используйте документы с индексированными резюме для исследования большой коллекции документов

Поиск в коллекции документов с помощью LLM обычно включает генерацию с дополнением извлечения (RAG). Однако в сценариях, включающих большие документы или когда критически важно точное извлечение информации, базового подхода RAG может быть недостаточно. Документы с индексированными резюме — это продвинутый подход RAG, который обеспечивает более эффективный способ ранжирования документов для извлечения, используя меньше контекста, чем традиционные методы RAG. В этом подходе вы сначала используете Claude для генерации краткого резюме для каждого документа в вашем корпусе, а затем используете Clade для ранжирования релевантности каждого резюме к задаваемому запросу. Для получения дополнительной информации об этом подходе, включая пример на основе кода, ознакомьтесь с разделом о документах с индексированными резюме в сборнике рецептов по резюмированию.

Дообучите Claude для обучения на вашем наборе данных

Еще одна продвинутая техника для улучшения способности Claude генерировать резюме — это дообучение. Дообучение включает тренировку Claude на пользовательском наборе данных, который специально соответствует вашим потребностям в юридическом резюмировании, обеспечивая адаптацию Claude к вашему случаю использования. Вот обзор того, как выполнить дообучение:

  1. Выявите ошибки: Начните со сбора случаев, где резюме Claude не соответствуют требованиям — это может включать пропуск критических юридических деталей, непонимание контекста или использование неподходящей юридической терминологии.

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

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

  4. Итеративное улучшение: Дообучение — это не одноразовый процесс. По мере того как Claude продолжает генерировать резюме, вы можете итеративно добавлять новые примеры, где он показал недостаточную производительность, дальше совершенствуя его возможности. Со временем этот непрерывный цикл обратной связи приведет к модели, которая высоко специализирована для ваших задач юридического резюмирования.

Дообучение в настоящее время доступно только через Amazon Bedrock. Дополнительные детали доступны в блоге о запуске AWS.