Visite o cookbook de sumarização para ver um exemplo de implementação de sumarização jurídica usando o Claude.
Aqui estão alguns indicadores-chave de que você deve empregar um LLM como o Claude para resumir documentos jurídicos:
Não existe um único resumo correto para qualquer documento. Sem direcionamento claro, pode ser difícil para o Claude determinar quais detalhes incluir. Para alcançar resultados ideais, identifique as informações específicas que você quer incluir no resumo.
Por exemplo, ao resumir um contrato de sublocação, você pode querer extrair os seguintes pontos principais:
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)",
]Avaliar a qualidade de resumos é uma tarefa notoriamente desafiadora. Ao contrário de muitas outras tarefas de processamento de linguagem natural, a avaliação de resumos frequentemente carece de métricas claras e objetivas. O processo pode ser altamente subjetivo, com diferentes leitores valorizando diferentes aspectos de um resumo. Aqui estão critérios que você pode considerar ao avaliar o desempenho do Claude na sumarização jurídica.
Consulte o guia sobre estabelecer critérios de sucesso para mais informações.
A precisão do modelo é extremamente importante ao resumir documentos jurídicos. O Claude Opus 4.8 é uma excelente escolha para casos de uso como este, onde alta precisão é necessária. Se o tamanho e a quantidade de 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, segue uma comparação do custo para resumir 1.000 contratos de sublocação usando tanto o Opus quanto o Haiku:
Tamanho do conteúdo
Tokens estimados
Custo estimado do Claude Opus 4.8
Custo estimado do Claude Haiku 4.5
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])
# Remover números de página
text = re.sub(r"\n\s*\d+\s*\n", "\n", text)
# Remover espaços em branco extras
text = re.sub(r"\s+", " ", text)
return text
# Criar a URL completa a partir do repositório do GitHub
url = "https://raw.githubusercontent.com/anthropics/anthropic-cookbook/main/skills/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")
# Baixar o arquivo PDF para a memória
response = requests.get(url)
# Carregar 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 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.
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 detalhado, 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:
# Inicialize o cliente da Anthropic
client = anthropic.Anthropic()
def summarize_document(
text, details_to_extract, model="claude-opus-4-8", max_tokens=1000
):
# Formate os detalhes a serem extraídos para inserção no contexto do prompt
details_to_extract_str = "\n".join(details_to_extract)
# Solicite 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 response.content[0].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 para seu caso de uso, de modo que cada resumo siga o mesmo padrão.
O prompting frequentemente requer testes e otimização para estar pronto para produção. Para determinar a prontidão de sua solução, avalie a qualidade de seus resumos usando um processo sistemático que combine métodos quantitativos e qualitativos. Criar uma avaliação empírica robusta com base em seus 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:
Aqui estão algumas considerações adicionais a ter em mente ao implantar sua solução em produção.
Garanta 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 clientes. Forneça avisos legais ou notificações esclarecendo que os resumos são gerados por IA e devem ser revisados por profissionais jurídicos.
Lide com diversos tipos de documentos: Este guia discute como extrair texto de PDFs. No mundo real, documentos podem vir em uma variedade de formatos (PDFs, documentos Word, arquivos de texto, etc.). Garanta que seu pipeline de extração de dados possa converter todos os formatos de arquivo que você espera receber.
Paralelize chamadas de API ao Claude: Documentos longos com um grande número de tokens podem exigir até um minuto para o Claude gerar 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 da Anthropic para determinar a quantidade máxima de chamadas de API que podem ser executadas em paralelo.
Em cenários complexos, pode ser útil considerar estratégias adicionais para melhorar o desempenho além das técnicas padrão de engenharia de prompt. Aqui estão algumas estratégias avançadas:
A sumarização jurídica frequentemente envolve lidar com documentos longos ou muitos documentos relacionados de uma vez, de modo que você ultrapassa a "context window" (janela de contexto) do Claude. Você pode usar um método de fragmentação conhecido como meta-sumarização para lidar com esse caso de uso. Essa técnica envolve dividir documentos em fragmentos menores e gerenciáveis e então processar cada fragmento separadamente. Você pode então combinar os resumos de cada fragmento para criar um meta-resumo do documento inteiro.
Aqui está um exemplo de como realizar meta-sumarização:
# Inicialize 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-4-8", max_tokens=1000
):
# Formate os detalhes a serem extraídos para inserção no contexto do prompt
details_to_extract_str = "\n".join(details_to_extract)
# Itere sobre os chunks e resuma 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 response.content[0].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 fragmentos menores e resumindo cada fragmento individualmente.
O código faz isso aplicando a função summarize_document a cada fragmento de 20.000 caracteres dentro do documento original. Os resumos individuais são então combinados, e um resumo final é criado a partir desses resumos de fragmentos.
Observe que a função summarize_long_document não é estritamente necessária para o PDF de exemplo, pois 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 múltiplos documentos relacionados juntos. 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.
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 envolvendo documentos grandes ou quando a recuperação precisa de informações é crucial, uma abordagem RAG básica pode ser insuficiente. Documentos indexados por resumo é uma abordagem RAG avançada que fornece uma maneira mais eficiente de classificar documentos para recuperação, usando menos contexto do que métodos RAG tradicionais. Nessa abordagem, você primeiro usa o Claude para gerar um resumo conciso para cada documento em seu corpus, e então usa o Claude para classificar a relevância de cada resumo para a consulta sendo 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.
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 com 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 fine-tuning:
Identifique erros: Comece coletando instâncias onde os resumos do Claude ficam aquém do esperado - isso pode incluir omissão de detalhes jurídicos críticos, má interpretação do contexto ou uso de terminologia jurídica inadequada.
Organize um conjunto de dados: Depois de identificar esses problemas, compile um conjunto de dados desses 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.
Realize o fine-tuning: O fine-tuning envolve retreinar o modelo em seu conjunto de dados organizado para ajustar seus pesos e parâmetros. Esse retreinamento ajuda o Claude a entender melhor os requisitos específicos do seu domínio jurídico, melhorando sua capacidade de resumir documentos de acordo com seus padrões.
Melhoria iterativa: O fine-tuning não é um processo único. À medida que o Claude continua a gerar resumos, você pode adicionar iterativamente novos exemplos onde ele teve desempenho insatisfatório, 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 totalmente implementado baseado em código de como usar o Claude para resumir contratos.
Explore a receita do cookbook de Citações para orientação sobre como garantir precisão e explicabilidade das informações.
Was this page helpful?