Claude Platform Docs
Melhores práticasCasos de uso

Sumarização jurídica

Este guia mostra como aproveitar os recursos avançados de processamento de linguagem natural do Claude para resumir documentos jurídicos com eficiência, extraindo informações-chave e agilizando a pesquisa jurídica. Com o Claude, você pode simplificar a revisão de contratos, a preparação para litígios e o trabalho regulatório, economizando tempo e garantindo precisão em seus processos jurídicos.

Visite o cookbook de sumarização para ver um exemplo de implementação de sumarização jurídica usando o Claude.

Antes de construir com o Claude

Aqui estão alguns indicadores-chave de que você deve empregar um "large language model" (modelo de linguagem grande), ou LLM, como o Claude para resumir documentos jurídicos:

Determine os detalhes que você quer que a sumarização extraia

Não existe um único resumo correto para um determinado documento. Sem uma orientação clara, pode ser difícil para o Claude determinar quais detalhes incluir. Para obter resultados ideais, identifique as informações específicas que você deseja incluir no resumo.

Por exemplo, ao resumir um contrato de sublocação, você pode querer extrair os seguintes pontos-chave:

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)",
]

Estabeleça critérios de sucesso

Avaliar a qualidade de resumos é uma tarefa notoriamente desafiadora. Diferentemente de muitas outras tarefas de processamento de linguagem natural, a avaliação de resumos frequentemente carece de métricas objetivas e bem definidas. O processo pode ser altamente subjetivo, com diferentes leitores valorizando diferentes aspectos de um resumo. Aqui estão critérios que você pode querer considerar ao avaliar o desempenho do Claude na sumarização jurídica.

Consulte o guia sobre como estabelecer critérios de sucesso para mais informações.


Selecione o modelo Claude certo

A precisão do modelo é extremamente importante ao resumir documentos jurídicos. O Claude Opus 5 é uma excelente escolha para casos de uso como este, em que alta precisão é necessária. Se o tamanho e a quantidade dos seus documentos forem grandes a ponto de os custos começarem a se tornar uma preocupação, você também pode tentar usar um modelo menor, como o Claude Haiku 4.5.

Para ajudar a estimar esses custos, a seguir está uma comparação do custo para resumir 1.000 contratos de sublocação usando os modelos Opus e Haiku:

  • Tamanho do conteúdo

    • Número de contratos: 1.000
    • Caracteres por contrato: 300.000
    • Total de caracteres: 300M
  • Tokens estimados

    • Tokens de entrada: 86M (assumindo 1 token a cada 3,5 caracteres)
    • Tokens de saída por resumo: 350
    • Total de tokens de saída: 350.000
  • Custo estimado do Claude Opus 5

    • Custo de tokens de entrada: 86 MTok * $5,00/MTok = $430,00 USD
    • Custo de tokens de saída: 0,35 MTok * $25,00/MTok = $8,75 USD
    • Custo total: $430,00 + $8,75 = $438,75 USD
  • Custo estimado do Claude Opus 4.8

    • Custo de tokens de entrada: 86 MTok * $5,00/MTok = $430,00 USD
    • Custo de tokens de saída: 0,35 MTok * $25,00/MTok = $8,75 USD
    • Custo total: $430,00 + $8,75 = $438,75 USD
  • Custo estimado do Claude Haiku 4.5

    • Custo de tokens de entrada: 86 MTok * $1,00/MTok = $86,00 USD
    • Custo de tokens de saída: 0,35 MTok * $5,00/MTok = $1,75 USD
    • Custo total: $86,00 + $1,75 = $87,75 USD

Transforme documentos em um formato que o Claude possa processar

Antes de começar a resumir documentos, você precisa preparar seus dados. Isso envolve extrair texto de PDFs, limpar o texto e garantir que ele esteja pronto para ser processado pelo Claude.

Aqui está uma demonstração desse processo em um PDF de exemplo:

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])

    # Remove números de página
    text = re.sub(r"\n\s*\d+\s*\n", "\n", text)

    # Remove espaços em branco extras
    text = re.sub(r"\s+", " ", text)

    return text


# Cria a URL completa a partir do repositório do GitHub
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")

# Baixa o arquivo PDF para a memória
response = requests.get(url)

# Carrega o PDF da memória
pdf_file = BytesIO(response.content)

document_text = get_llm_text(pdf_file)
print(document_text[:50000])

Neste exemplo, você primeiro baixa um PDF de um contrato de sublocação de exemplo usado no cookbook de sumarização. Esse contrato foi obtido a partir de um contrato de sublocação disponível publicamente no site sec.gov.

O exemplo usa a biblioteca pypdf para extrair o conteúdo do PDF e convertê-lo em texto. Os dados de texto são então limpos removendo números de página e espaços em branco extras.

Construa um prompt robusto

O Claude pode se adaptar a vários estilos de sumarização. Você pode alterar os detalhes do prompt para orientar o Claude a ser mais ou menos prolixo, incluir mais ou menos terminologia técnica ou fornecer um resumo de nível mais alto ou mais baixo do contexto em questão.

Aqui está um exemplo de como criar um prompt que garante que os resumos gerados sigam uma estrutura consistente ao analisar contratos de sublocação:

Python
# Inicializa o cliente da Anthropic
client = anthropic.Anthropic()


def summarize_document(
    text, details_to_extract, model="claude-opus-5-5", max_tokens=1000
):
    # Formata os detalhes a extrair para inseri-los no contexto do prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Solicita ao modelo que resuma o contrato de sublocação
    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)

Este código implementa uma função summarize_document que usa o Claude para resumir o conteúdo de um contrato de sublocação. A função aceita uma string de texto e uma lista de detalhes a extrair como entradas. Neste exemplo, o código chama a função com as variáveis document_text e details_to_extract que foram definidas nos trechos de código anteriores.

Dentro da função, um prompt é gerado para o Claude, incluindo o documento a ser resumido, os detalhes a extrair e instruções específicas para resumir o documento. O prompt instrui o Claude a responder com um resumo de cada detalhe a extrair aninhado dentro de cabeçalhos XML.

Como o código gera cada seção do resumo dentro de tags, cada seção pode ser facilmente extraída como uma etapa de pós-processamento. Essa abordagem permite resumos estruturados que podem ser adaptados ao seu caso de uso, de modo que cada resumo siga o mesmo padrão.

Avalie seu prompt

A criação de prompts frequentemente requer testes e otimização para estar pronta para produção. Para determinar a prontidão da sua solução, avalie a qualidade dos seus resumos usando um processo sistemático que combine métodos quantitativos e qualitativos. Criar uma avaliação empírica robusta com base nos critérios de sucesso definidos permite que você otimize seus prompts. Aqui estão algumas métricas que você pode querer incluir em sua avaliação empírica:

Implante seu prompt

Aqui estão algumas considerações adicionais a ter em mente ao implantar sua solução em produção.

  1. Garanta a ausência de responsabilidade legal: Entenda as implicações jurídicas de erros nos resumos, que podem levar a responsabilidade legal para sua organização ou seus clientes. Forneça avisos ou notas legais esclarecendo que os resumos são gerados por IA e devem ser revisados por profissionais do direito.

  2. Lide com diversos tipos de documentos: Este guia discute como extrair texto de PDFs. No mundo real, os documentos podem vir em uma variedade de formatos (como PDFs, documentos do Word e arquivos de texto). Garanta que seu pipeline de extração de dados possa converter todos os formatos de arquivo que você espera receber.

  3. Paralelize as chamadas de API ao Claude: Documentos longos com um grande número de tokens podem exigir até um minuto para que o Claude gere um resumo. Para grandes coleções de documentos, você pode querer enviar chamadas de API ao Claude em paralelo para que os resumos possam ser concluídos em um prazo razoável. Consulte os limites de taxa ("rate limits") da Anthropic para determinar a quantidade máxima de chamadas de API que podem ser realizadas em paralelo.


Melhore o desempenho

Em cenários complexos, pode ser útil considerar estratégias adicionais para melhorar o desempenho além das técnicas de engenharia de prompt padrão. Aqui estão algumas estratégias avançadas:

Realize meta-sumarização para resumir documentos longos

A sumarização jurídica frequentemente envolve lidar com documentos longos ou muitos documentos relacionados de uma só vez, de modo que você ultrapassa a "context window" (janela de contexto) do Claude. Você pode usar um método de divisão em partes (chunking) conhecido como meta-sumarização para lidar com esse caso de uso. Essa técnica envolve dividir documentos em partes menores e gerenciáveis e então processar cada parte separadamente. Você pode então combinar os resumos de cada parte para criar um meta-resumo do documento inteiro.

Aqui está um exemplo de como realizar a meta-sumarização:

Python
# Inicializa o cliente da 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-5", max_tokens=1000
):
    # Formata os detalhes a extrair para inseri-los no contexto do prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Itera sobre os chunks e resume cada um
    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)

A função summarize_long_document se baseia na função summarize_document anterior, dividindo o documento em partes menores e resumindo cada parte individualmente.

O código faz isso aplicando a função summarize_document a cada parte de 20.000 caracteres do documento original. Os resumos individuais são então combinados, e um resumo final é criado a partir desses resumos das partes.

Observe que a função summarize_long_document não é estritamente necessária para o PDF de exemplo, já que o documento inteiro cabe na janela de contexto do Claude. No entanto, ela se torna essencial para documentos que excedem a janela de contexto do Claude ou ao resumir vários documentos relacionados em conjunto. De qualquer forma, essa técnica de meta-sumarização frequentemente captura detalhes importantes adicionais no resumo final que foram perdidos na abordagem anterior de resumo único.

Use documentos indexados por resumo para explorar uma grande coleção de documentos

Pesquisar uma coleção de documentos com um LLM geralmente envolve "retrieval-augmented generation" (geração aumentada por recuperação), ou RAG. No entanto, em cenários que envolvem documentos grandes ou quando a recuperação precisa de informações é crucial, uma abordagem básica de RAG pode ser insuficiente. Documentos indexados por resumo são uma abordagem avançada de RAG que fornece uma maneira mais eficiente de classificar documentos para recuperação, usando menos contexto do que os métodos tradicionais de RAG. Nessa abordagem, você primeiro usa o Claude para gerar um resumo conciso de cada documento do seu corpus e, em seguida, usa o Claude para classificar a relevância de cada resumo em relação à consulta feita. Para mais detalhes sobre essa abordagem, incluindo um exemplo baseado em código, confira a seção de documentos indexados por resumo no cookbook de sumarização.

Faça fine-tuning do Claude para aprender com seu conjunto de dados

Outra técnica avançada para melhorar a capacidade do Claude de gerar resumos é o "fine-tuning" (ajuste fino). O fine-tuning envolve treinar o Claude em um conjunto de dados personalizado que se alinha especificamente às suas necessidades de sumarização jurídica, garantindo que o Claude se adapte ao seu caso de uso. Aqui está uma visão geral de como realizar o fine-tuning:

  1. Identifique erros: Comece coletando casos em que os resumos do Claude ficam aquém do esperado - isso pode incluir a omissão de detalhes jurídicos críticos, a má compreensão do contexto ou o uso de terminologia jurídica inadequada.

  2. Organize um conjunto de dados: Depois de identificar esses problemas, compile um conjunto de dados com esses exemplos problemáticos. Esse conjunto de dados deve incluir os documentos jurídicos originais junto com seus resumos corrigidos, garantindo que o Claude aprenda o comportamento desejado.

  3. Realize o fine-tuning: O fine-tuning envolve retreinar o modelo no seu conjunto de dados organizado para ajustar seus pesos e parâmetros. Esse retreinamento ajuda o Claude a se adaptar melhor aos requisitos específicos do seu domínio jurídico, melhorando sua capacidade de resumir documentos de acordo com seus padrões.

  4. Melhoria iterativa: O fine-tuning não é um processo único. À medida que o Claude continua a gerar resumos, você pode adicionar iterativamente novos exemplos em que ele teve desempenho inferior, refinando ainda mais suas capacidades. Com o tempo, esse ciclo contínuo de feedback resultará em um modelo altamente especializado para suas tarefas de sumarização jurídica.

Veja um exemplo baseado em código totalmente implementado de como usar o Claude para resumir contratos.

Explore a receita do cookbook de Citações para orientações sobre como garantir a precisão e a explicabilidade das informações.

Was this page helpful?