Claude Platform Docs
Mejores prácticasCasos de uso

Resumen de documentos legales

Esta guía explica cómo aprovechar las capacidades avanzadas de procesamiento de lenguaje natural de Claude para resumir documentos legales de manera eficiente, extrayendo información clave y agilizando la investigación jurídica. Con Claude, puedes optimizar la revisión de contratos, la preparación de litigios y el trabajo regulatorio, ahorrando tiempo y garantizando la precisión en tus procesos legales.

Visita el cookbook de resumen para ver un ejemplo de implementación de resumen de documentos legales usando Claude.

Antes de construir con Claude

Estos son algunos indicadores clave de que deberías emplear un "large language model" (modelo de lenguaje grande), o LLM, como Claude para resumir documentos legales:

Determina los detalles que quieres que el resumen extraiga

No existe un único resumen correcto para un documento dado. Sin una dirección clara, puede ser difícil para Claude determinar qué detalles incluir. Para lograr resultados óptimos, identifica la información específica que quieres incluir en el resumen.

Por ejemplo, al resumir un contrato de subarrendamiento, podrías querer extraer los siguientes puntos clave:

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

Establece criterios de éxito

Evaluar la calidad de los resúmenes es una tarea notoriamente difícil. A diferencia de muchas otras tareas de procesamiento de lenguaje natural, la evaluación de resúmenes a menudo carece de métricas objetivas y claras. El proceso puede ser altamente subjetivo, ya que distintos lectores valoran distintos aspectos de un resumen. Estos son algunos criterios que podrías considerar al evaluar qué tan bien Claude realiza el resumen de documentos legales.

Consulta la guía sobre cómo establecer criterios de éxito para obtener más información.


Selecciona el modelo de Claude adecuado

La precisión del modelo es extremadamente importante al resumir documentos legales. Claude Opus 5 es una excelente opción para casos de uso como este, donde se requiere alta precisión. Si el tamaño y la cantidad de tus documentos son tan grandes que los costos empiezan a ser una preocupación, también puedes probar un modelo más pequeño como Claude Haiku 4.5.

Para ayudar a estimar estos costos, a continuación se presenta una comparación del costo de resumir 1,000 contratos de subarrendamiento usando los modelos Opus y Haiku:

  • Tamaño del contenido

    • Número de contratos: 1,000
    • Caracteres por contrato: 300,000
    • Total de caracteres: 300M
  • Tokens estimados

    • Tokens de entrada: 86M (suponiendo 1 token por cada 3.5 caracteres)
    • Tokens de salida por resumen: 350
    • Total de tokens de salida: 350,000
  • Costo estimado de Claude Opus 5

    • Costo de tokens de entrada: 86 MTok * $5.00/MTok = $430.00 USD
    • Costo de tokens de salida: 0.35 MTok * $25.00/MTok = $8.75 USD
    • Costo total: $430.00 + $8.75 = $438.75 USD
  • Costo estimado de Claude Opus 4.8

    • Costo de tokens de entrada: 86 MTok * $5.00/MTok = $430.00 USD
    • Costo de tokens de salida: 0.35 MTok * $25.00/MTok = $8.75 USD
    • Costo total: $430.00 + $8.75 = $438.75 USD
  • Costo estimado de Claude Haiku 4.5

    • Costo de tokens de entrada: 86 MTok * $1.00/MTok = $86.00 USD
    • Costo de tokens de salida: 0.35 MTok * $5.00/MTok = $1.75 USD
    • Costo total: $86.00 + $1.75 = $87.75 USD

Transforma los documentos a un formato que Claude pueda procesar

Antes de comenzar a resumir documentos, necesitas preparar tus datos. Esto implica extraer el texto de los PDF, limpiar el texto y asegurarte de que esté listo para ser procesado por Claude.

Aquí tienes una demostración de este proceso con un PDF de ejemplo:

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

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

    # Eliminar los espacios en blanco adicionales
    text = re.sub(r"\s+", " ", text)

    return text


# Crear la URL completa a partir del repositorio de GitHub
url = "https://raw.githubusercontent.com/anthropics/claude-cookbooks/main/capabilities/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")

# Descargar el archivo PDF en memoria
response = requests.get(url)

# Cargar el PDF desde la memoria
pdf_file = BytesIO(response.content)

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

En este ejemplo, primero descargas un PDF de un contrato de subarrendamiento de ejemplo utilizado en el cookbook de resumen. Este contrato se obtuvo de un contrato de subarrendamiento disponible públicamente en el sitio web sec.gov.

El ejemplo usa la biblioteca pypdf para extraer el contenido del PDF y convertirlo a texto. Luego, los datos de texto se limpian eliminando los números de página y los espacios en blanco adicionales.

Construye un prompt sólido

Claude puede adaptarse a diversos estilos de resumen. Puedes cambiar los detalles del prompt para guiar a Claude a ser más o menos detallado, incluir más o menos terminología técnica, o proporcionar un resumen de mayor o menor nivel del contexto en cuestión.

Aquí tienes un ejemplo de cómo crear un prompt que garantice que los resúmenes generados sigan una estructura consistente al analizar contratos de subarrendamiento:

Python
# Inicializa el cliente de Anthropic
client = anthropic.Anthropic()


def summarize_document(
    text, details_to_extract, model="claude-opus-5-5", max_tokens=1000
):
    # Formatea los detalles a extraer para colocarlos en el contexto del prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Pide al modelo que resuma el contrato de subarrendamiento
    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 una función summarize_document que usa Claude para resumir el contenido de un contrato de subarrendamiento. La función acepta como entradas una cadena de texto y una lista de detalles a extraer. En este ejemplo, el código llama a la función con las variables document_text y details_to_extract que se definieron en los fragmentos de código anteriores.

Dentro de la función, se genera un prompt para Claude que incluye el documento a resumir, los detalles a extraer e instrucciones específicas para resumir el documento. El prompt le indica a Claude que responda con un resumen de cada detalle a extraer anidado dentro de encabezados XML.

Dado que el código genera cada sección del resumen dentro de etiquetas, cada sección puede analizarse fácilmente como un paso de posprocesamiento. Este enfoque permite resúmenes estructurados que pueden adaptarse a tu caso de uso, de modo que cada resumen siga el mismo patrón.

Evalúa tu prompt

El prompting a menudo requiere pruebas y optimización para estar listo para producción. Para determinar si tu solución está lista, evalúa la calidad de tus resúmenes mediante un proceso sistemático que combine métodos cuantitativos y cualitativos. Crear una evaluación empírica sólida basada en tus criterios de éxito definidos te permite optimizar tus prompts. Estas son algunas métricas que podrías incluir en tu evaluación empírica:

Despliega tu prompt

Estas son algunas consideraciones adicionales que debes tener en cuenta al desplegar tu solución a producción.

  1. Asegúrate de no incurrir en responsabilidad legal: Comprende las implicaciones legales de los errores en los resúmenes, que podrían generar responsabilidad legal para tu organización o tus clientes. Proporciona avisos o notas legales que aclaren que los resúmenes son generados por IA y deben ser revisados por profesionales del derecho.

  2. Maneja diversos tipos de documentos: Esta guía explica cómo extraer texto de archivos PDF. En el mundo real, los documentos pueden venir en una variedad de formatos (como PDF, documentos de Word y archivos de texto). Asegúrate de que tu pipeline de extracción de datos pueda convertir todos los formatos de archivo que esperas recibir.

  3. Paraleliza las llamadas a la API de Claude: Los documentos largos con una gran cantidad de tokens pueden requerir hasta un minuto para que Claude genere un resumen. Para grandes colecciones de documentos, podrías querer enviar llamadas a la API de Claude en paralelo para que los resúmenes se completen en un plazo razonable. Consulta los límites de velocidad de Anthropic para determinar la cantidad máxima de llamadas a la API que se pueden realizar en paralelo.


Mejora el rendimiento

En escenarios complejos, puede ser útil considerar estrategias adicionales para mejorar el rendimiento más allá de las técnicas de ingeniería de prompts estándar. Estas son algunas estrategias avanzadas:

Realiza meta-resúmenes para resumir documentos largos

El resumen de documentos legales a menudo implica manejar documentos largos o muchos documentos relacionados a la vez, de modo que se supera la "context window" (ventana de contexto) de Claude. Puedes usar un método de fragmentación conocido como meta-resumen para manejar este caso de uso. Esta técnica implica dividir los documentos en fragmentos más pequeños y manejables, y luego procesar cada fragmento por separado. Después puedes combinar los resúmenes de cada fragmento para crear un meta-resumen de todo el documento.

Aquí tienes un ejemplo de cómo realizar un meta-resumen:

Python
# Inicializa el cliente de 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
):
    # Formatea los detalles a extraer para colocarlos en el contexto del prompt
    details_to_extract_str = "\n".join(details_to_extract)

    # Itera sobre los fragmentos y resume cada uno
    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)

La función summarize_long_document se basa en la función anterior summarize_document, dividiendo el documento en fragmentos más pequeños y resumiendo cada fragmento individualmente.

El código logra esto aplicando la función summarize_document a cada fragmento de 20,000 caracteres del documento original. Luego se combinan los resúmenes individuales y se crea un resumen final a partir de estos resúmenes de fragmentos.

Ten en cuenta que la función summarize_long_document no es estrictamente necesaria para el PDF de ejemplo, ya que el documento completo cabe dentro de la ventana de contexto de Claude. Sin embargo, se vuelve esencial para documentos que exceden la ventana de contexto de Claude o al resumir varios documentos relacionados juntos. En cualquier caso, esta técnica de meta-resumen a menudo captura en el resumen final detalles importantes adicionales que se omitieron en el enfoque anterior de resumen único.

Usa documentos indexados por resumen para explorar una gran colección de documentos

Buscar en una colección de documentos con un LLM generalmente implica "retrieval-augmented generation" (generación aumentada por recuperación), o RAG. Sin embargo, en escenarios que involucran documentos grandes o cuando la recuperación precisa de información es crucial, un enfoque RAG básico puede ser insuficiente. Los documentos indexados por resumen son un enfoque RAG avanzado que proporciona una forma más eficiente de clasificar documentos para su recuperación, usando menos contexto que los métodos RAG tradicionales. En este enfoque, primero usas Claude para generar un resumen conciso de cada documento de tu corpus, y luego usas Claude para clasificar la relevancia de cada resumen respecto a la consulta realizada. Para obtener más detalles sobre este enfoque, incluido un ejemplo basado en código, consulta la sección de documentos indexados por resumen en el cookbook de resumen.

Haz fine-tuning de Claude para que aprenda de tu conjunto de datos

Otra técnica avanzada para mejorar la capacidad de Claude de generar resúmenes es el "fine-tuning" (ajuste fino). El fine-tuning implica entrenar a Claude con un conjunto de datos personalizado que se alinee específicamente con tus necesidades de resumen de documentos legales, garantizando que Claude se adapte a tu caso de uso. Aquí tienes una descripción general de cómo realizar el fine-tuning:

  1. Identifica errores: Comienza recopilando casos en los que los resúmenes de Claude no cumplan las expectativas; esto podría incluir la omisión de detalles legales críticos, la mala interpretación del contexto o el uso de terminología jurídica inapropiada.

  2. Prepara un conjunto de datos: Una vez que hayas identificado estos problemas, compila un conjunto de datos con estos ejemplos problemáticos. Este conjunto de datos debe incluir los documentos legales originales junto con tus resúmenes corregidos, garantizando que Claude aprenda el comportamiento deseado.

  3. Realiza el fine-tuning: El fine-tuning implica volver a entrenar el modelo con tu conjunto de datos preparado para ajustar sus pesos y parámetros. Este reentrenamiento ayuda a Claude a adaptarse mejor a los requisitos específicos de tu dominio legal, mejorando su capacidad para resumir documentos según tus estándares.

  4. Mejora iterativa: El fine-tuning no es un proceso de una sola vez. A medida que Claude continúa generando resúmenes, puedes agregar iterativamente nuevos ejemplos en los que haya tenido un rendimiento inferior, refinando aún más sus capacidades. Con el tiempo, este ciclo de retroalimentación continua dará como resultado un modelo altamente especializado para tus tareas de resumen de documentos legales.

Consulta un ejemplo basado en código completamente implementado sobre cómo usar Claude para resumir contratos.

Explora la receta del cookbook de citas para obtener orientación sobre cómo garantizar la precisión y la explicabilidad de la información.

Was this page helpful?