Посетите руководство по резюмированию, чтобы увидеть пример реализации резюмирования юридических документов с использованием Claude.
Вот несколько ключевых признаков того, что вам следует использовать «large language model» (большую языковую модель), или LLM, такую как Claude, для резюмирования юридических документов:
Не существует единственно правильного резюме для любого документа. Без чётких указаний Claude может быть сложно определить, какие детали включать. Для достижения оптимальных результатов определите конкретную информацию, которую вы хотите включить в резюме.
Например, при резюмировании договора субаренды вы можете захотеть извлечь следующие ключевые моменты:
details_to_extract = [
"Parties involved (sublessor, sublessee, and original lessor)",
"Property details (address, description, and permitted use)",
"Term and rent (start date, end date, monthly rent, and security deposit)",
"Responsibilities (utilities, maintenance, and repairs)",
"Consent and notices (landlord's consent, and notice requirements)",
"Special provisions (furniture, parking, and subletting restrictions)",
]Оценка качества резюме — общеизвестно сложная задача. В отличие от многих других задач обработки естественного языка, оценка резюме часто не имеет чётких объективных метрик. Процесс может быть весьма субъективным: разные читатели ценят разные аспекты резюме. Вот критерии, которые вы можете учитывать при оценке того, насколько хорошо Claude выполняет резюмирование юридических документов.
См. руководство по установлению критериев успеха для получения дополнительной информации.
Точность модели чрезвычайно важна при резюмировании юридических документов. Claude Opus 5 — отличный выбор для подобных сценариев использования, где требуется высокая точность. Если размер и количество ваших документов велики настолько, что затраты начинают вызывать беспокойство, вы также можете попробовать использовать меньшую модель, такую как Claude Haiku 4.5.
Чтобы помочь оценить эти затраты, ниже приведено сравнение стоимости резюмирования 1 000 договоров субаренды с использованием моделей Opus и Haiku:
Размер контента
Оценочное количество токенов
Оценочная стоимость Claude Opus 5
Оценочная стоимость Claude Opus 4.8
Оценочная стоимость Claude Haiku 4.5
Прежде чем начать резюмировать документы, вам необходимо подготовить данные. Это включает извлечение текста из 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"\n\s*\d+\s*\n", "\n", text)
# Удаляем лишние пробелы
text = re.sub(r"\s+", " ", text)
return text
# Формируем полный URL из репозитория GitHub
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/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 быть более или менее многословным, включать больше или меньше технической терминологии или предоставлять резюме контекста более высокого или более низкого уровня.
Вот пример того, как создать подсказку, которая гарантирует, что сгенерированные резюме следуют согласованной структуре при анализе договоров субаренды:
# Инициализируем клиент Anthropic
client = anthropic.Anthropic()
def summarize_document(
text, details_to_extract, model="claude-opus-5", max_tokens=1000
):
# Форматируем извлекаемые сведения для размещения в контексте подсказки
details_to_extract_str = "\n".join(details_to_extract)
# Запрашиваем у модели краткое изложение договора субаренды
prompt = f"""Summarize the following sublease agreement. Focus on these key aspects:
{details_to_extract_str}
Provide the summary in bullet points nested within the XML header for each section. For example:
<parties involved>
- Sublessor: [Name]
// Add more details as needed
</parties involved>
If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.
Sublease agreement text:
{text}
"""
response = client.messages.create(
model=model,
max_tokens=max_tokens,
system="You are a legal analyst specializing in real estate law, known for highly accurate and detailed summaries of sublease agreements.",
messages=[
{"role": "user", "content": prompt},
],
)
return next(block.text for block in response.content if block.type == "text")
sublease_summary = summarize_document(document_text, details_to_extract)
print(sublease_summary)Этот код реализует функцию summarize_document, которая использует Claude для резюмирования содержимого договора субаренды. Функция принимает текстовую строку и список деталей для извлечения в качестве входных данных. В этом примере код вызывает функцию с переменными document_text и details_to_extract, которые были определены в предыдущих фрагментах кода.
Внутри функции генерируется подсказка для Claude, включающая документ для резюмирования, детали для извлечения и конкретные инструкции по резюмированию документа. Подсказка указывает Claude ответить резюме каждой детали для извлечения, вложенным в XML-заголовки.
Поскольку код выводит каждый раздел резюме внутри тегов, каждый раздел можно легко извлечь на этапе постобработки. Этот подход позволяет создавать структурированные резюме, которые можно адаптировать для вашего сценария использования, так что каждое резюме следует одному и тому же шаблону.
Создание подсказок часто требует тестирования и оптимизации, прежде чем они будут готовы к использованию в производственной среде. Чтобы определить готовность вашего решения, оцените качество ваших резюме, используя систематический процесс, сочетающий количественные и качественные методы. Создание надёжной эмпирической оценки на основе определённых вами критериев успеха позволяет оптимизировать ваши подсказки. Вот некоторые метрики, которые вы можете включить в вашу эмпирическую оценку:
Вот некоторые дополнительные соображения, которые следует учитывать при развёртывании вашего решения в производственной среде.
Исключите ответственность: Понимайте юридические последствия ошибок в резюме, которые могут привести к юридической ответственности для вашей организации или клиентов. Предоставьте отказы от ответственности или юридические уведомления, разъясняющие, что резюме генерируются ИИ и должны быть проверены юристами.
Обрабатывайте различные типы документов: В этом руководстве обсуждается, как извлекать текст из PDF-файлов. В реальном мире документы могут поступать в различных форматах (таких как PDF, документы Word и текстовые файлы). Убедитесь, что ваш конвейер извлечения данных может преобразовывать все форматы файлов, которые вы ожидаете получить.
Распараллеливайте вызовы API к Claude: Длинные документы с большим количеством токенов могут потребовать до минуты, чтобы Claude сгенерировал резюме. Для больших коллекций документов вы можете отправлять вызовы API к Claude параллельно, чтобы резюме могли быть завершены в разумные сроки. Обратитесь к ограничениям скорости Anthropic, чтобы определить максимальное количество вызовов API, которые могут выполняться параллельно.
В сложных сценариях может быть полезно рассмотреть дополнительные стратегии для повышения производительности помимо стандартных техник инженерии подсказок. Вот некоторые продвинутые стратегии:
Резюмирование юридических документов часто предполагает работу с длинными документами или множеством связанных документов одновременно, так что вы превышаете контекстное окно Claude. Вы можете использовать метод разбиения на фрагменты, известный как мета-резюмирование, для обработки этого сценария использования. Эта техника включает разбиение документов на меньшие, управляемые фрагменты и последующую обработку каждого фрагмента отдельно. Затем вы можете объединить резюме каждого фрагмента, чтобы создать мета-резюме всего документа.
Вот пример того, как выполнить мета-резюмирование:
# Инициализируем клиент 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-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"""
You are looking at the chunked summaries of multiple documents that are all related.
Combine the following summaries of the document from different truthful sources into a coherent overall summary:
<chunked_summaries>
{"".join(chunk_summaries)}
</chunked_summaries>
Focus on these key aspects:
{details_to_extract_str}
Provide the summary in bullet points nested within the XML header for each section. For example:
<parties involved>
- Sublessor: [Name]
// Add more details as needed
</parties involved>
If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.
"""
response = client.messages.create(
model=model,
max_tokens=max_tokens,
system="You are a legal expert that summarizes notes on one document.",
messages=[
{"role": "user", "content": final_summary_prompt},
],
)
return next(block.text for block in response.content if block.type == "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 обычно включает «retrieval-augmented generation» (генерацию с дополнением извлечёнными данными), или RAG. Однако в сценариях с большими документами или когда критически важно точное извлечение информации, базовый подход RAG может быть недостаточным. Документы с индексированными резюме — это продвинутый подход RAG, который обеспечивает более эффективный способ ранжирования документов для извлечения, используя меньше контекста, чем традиционные методы RAG. В этом подходе вы сначала используете Claude для генерации краткого резюме для каждого документа в вашем корпусе, а затем используете Claude для ранжирования релевантности каждого резюме задаваемому запросу. Для получения дополнительных сведений об этом подходе, включая пример на основе кода, ознакомьтесь с разделом о документах с индексированными резюме в руководстве по резюмированию.
Ещё одна продвинутая техника для улучшения способности Claude генерировать резюме — это «fine-tuning» (тонкая настройка). Тонкая настройка включает обучение Claude на пользовательском наборе данных, который специально соответствует вашим потребностям в резюмировании юридических документов, гарантируя, что Claude адаптируется к вашему сценарию использования. Вот обзор того, как выполнить тонкую настройку:
Выявите ошибки: Начните со сбора случаев, когда резюме Claude не соответствуют требованиям — это может включать пропуск критических юридических деталей, неправильное понимание контекста или использование неподходящей юридической терминологии.
Сформируйте набор данных: После выявления этих проблем составьте набор данных из этих проблемных примеров. Этот набор данных должен включать исходные юридические документы вместе с вашими исправленными резюме, гарантируя, что Claude усвоит желаемое поведение.
Выполните тонкую настройку: Тонкая настройка включает переобучение модели на вашем сформированном наборе данных для корректировки её весов и параметров. Это переобучение помогает Claude лучше адаптироваться к конкретным требованиям вашей юридической области, улучшая его способность резюмировать документы в соответствии с вашими стандартами.
Итеративное улучшение: Тонкая настройка — это не разовый процесс. По мере того как Claude продолжает генерировать резюме, вы можете итеративно добавлять новые примеры, где он показал недостаточные результаты, дополнительно совершенствуя его возможности. Со временем этот непрерывный цикл обратной связи приведёт к модели, которая высоко специализирована для ваших задач резюмирования юридических документов.
Посмотрите полностью реализованный пример на основе кода, как использовать Claude для резюмирования контрактов.
Изучите рецепт из руководства по цитированию для получения рекомендаций о том, как обеспечить точность и объяснимость информации.
Was this page helpful?