Посетите наш справочник по реферированию, чтобы увидеть пример реализации юридического реферирования с использованием 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.7 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-7-sonnet-20250219", 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-3-7-sonnet-20250219", 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 к каждому фрагменту из 20000 символов в исходном документе. Затем отдельные резюме объединяются, и из этих фрагментированных резюме создается финальное резюме.

Обратите внимание, что функция 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.