Kunjungi buku panduan ringkasan kami untuk melihat contoh implementasi ringkasan hukum menggunakan Claude.

Sebelum membangun dengan Claude

Tentukan apakah akan menggunakan Claude untuk ringkasan hukum

Berikut adalah beberapa indikator utama bahwa Anda sebaiknya menggunakan LLM seperti Claude untuk meringkas dokumen hukum:

Tentukan detail yang ingin Anda ekstrak dari ringkasan

Tidak ada ringkasan tunggal yang benar untuk dokumen apa pun. Tanpa arahan yang jelas, Claude mungkin kesulitan menentukan detail mana yang harus disertakan. Untuk mencapai hasil optimal, identifikasi informasi spesifik yang ingin Anda sertakan dalam ringkasan.

Misalnya, saat meringkas perjanjian sublease, Anda mungkin ingin mengekstrak poin-poin kunci berikut:

details_to_extract = [
    'Pihak yang terlibat (sublessor, sublessee, dan lessor asli)',
    'Detail properti (alamat, deskripsi, dan penggunaan yang diizinkan)', 
    'Jangka waktu dan sewa (tanggal mulai, tanggal berakhir, sewa bulanan, dan deposit keamanan)',
    'Tanggung jawab (utilitas, pemeliharaan, dan perbaikan)',
    'Persetujuan dan pemberitahuan (persetujuan pemilik, dan persyaratan pemberitahuan)',
    'Ketentuan khusus (furnitur, parkir, dan pembatasan penyewaan kembali)'
]

Tetapkan kriteria keberhasilan

Mengevaluasi kualitas ringkasan adalah tugas yang terkenal sulit. Tidak seperti banyak tugas pemrosesan bahasa alami lainnya, evaluasi ringkasan sering kali tidak memiliki metrik objektif yang jelas. Prosesnya bisa sangat subjektif, dengan pembaca yang berbeda menghargai aspek yang berbeda dari sebuah ringkasan. Berikut adalah kriteria yang mungkin ingin Anda pertimbangkan saat menilai seberapa baik Claude melakukan ringkasan hukum.

Lihat panduan kami tentang menetapkan kriteria keberhasilan untuk informasi lebih lanjut.


Cara meringkas dokumen hukum menggunakan Claude

Pilih model Claude yang tepat

Akurasi model sangat penting saat meringkas dokumen hukum. Claude Sonnet 3.5 adalah pilihan yang sangat baik untuk kasus penggunaan seperti ini di mana akurasi tinggi diperlukan. Jika ukuran dan jumlah dokumen Anda besar sehingga biaya mulai menjadi perhatian, Anda juga dapat mencoba menggunakan model yang lebih kecil seperti Claude Haiku 3.

Untuk membantu memperkirakan biaya ini, di bawah ini adalah perbandingan biaya untuk meringkas 1.000 perjanjian sublease menggunakan Sonnet dan Haiku:

  • Ukuran konten

    • Jumlah perjanjian: 1.000
    • Karakter per perjanjian: 300.000
    • Total karakter: 300M
  • Perkiraan token

    • Token input: 86M (dengan asumsi 1 token per 3,5 karakter)
    • Token output per ringkasan: 350
    • Total token output: 350.000
  • Perkiraan biaya Claude Sonnet 4

    • Biaya token input: 86 MTok * $3,00/MTok = $258
    • Biaya token output: 0,35 MTok * $15,00/MTok = $5,25
    • Total biaya: $258,00 + $5,25 = $263,25
  • Perkiraan biaya Claude Haiku 3

    • Biaya token input: 86 MTok * $0,25/MTok = $21,50
    • Biaya token output: 0,35 MTok * $1,25/MTok = $0,44
    • Total biaya: $21,50 + $0,44 = $21,96
Biaya aktual mungkin berbeda dari perkiraan ini. Perkiraan ini didasarkan pada contoh yang disorot di bagian prompting.

Transformasikan dokumen ke format yang dapat diproses Claude

Sebelum Anda mulai meringkas dokumen, Anda perlu menyiapkan data Anda. Ini melibatkan ekstraksi teks dari PDF, membersihkan teks, dan memastikan teks siap untuk diproses oleh Claude.

Berikut adalah demonstrasi proses ini pada sampel 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])

    # Hapus spasi berlebih
    text = re.sub(r'\s+', ' ', text) 

    # Hapus nomor halaman
    text = re.sub(r'\n\s*\d+\s*\n', '\n', text) 

    return text


# Buat URL lengkap dari repositori GitHub
url = "https://raw.githubusercontent.com/anthropics/anthropic-cookbook/main/skills/summarization/data/Sample Sublease Agreement.pdf"
url = url.replace(" ", "%20")

# Unduh file PDF ke dalam memori
response = requests.get(url)

# Muat PDF dari memori
pdf_file = BytesIO(response.content)

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

Dalam contoh ini, pertama-tama kita mengunduh pdf dari sampel perjanjian sublease yang digunakan dalam buku panduan ringkasan. Perjanjian ini bersumber dari perjanjian sublease yang tersedia untuk umum dari situs web sec.gov.

Kami menggunakan pustaka pypdf untuk mengekstrak isi pdf dan mengubahnya menjadi teks. Data teks kemudian dibersihkan dengan menghapus spasi berlebih dan nomor halaman.

Bangun prompt yang kuat

Claude dapat beradaptasi dengan berbagai gaya peringkasan. Anda dapat mengubah detail prompt untuk mengarahkan Claude agar lebih atau kurang bertele-tele, menyertakan lebih banyak atau lebih sedikit terminologi teknis, atau memberikan ringkasan konteks pada tingkat yang lebih tinggi atau lebih rendah.

Berikut adalah contoh cara membuat prompt yang memastikan ringkasan yang dihasilkan mengikuti struktur yang konsisten saat menganalisis perjanjian sublease:

import anthropic

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

def summarize_document(text, details_to_extract, model="claude-opus-4-20250514", max_tokens=1000):

    # Format detail yang akan diekstrak untuk ditempatkan dalam konteks prompt
    details_to_extract_str = '\n'.join(details_to_extract)
    
    # Prompt model untuk meringkas perjanjian sublease
    prompt = f"""Ringkas perjanjian sublease berikut. Fokus pada aspek-aspek kunci ini:

    {details_to_extract_str}

    Berikan ringkasan dalam poin-poin yang disarangkan dalam header XML untuk setiap bagian. Contohnya:

    <pihak yang terlibat>
    - Sublessor: [Nama]
    // Tambahkan lebih banyak detail sesuai kebutuhan
    </pihak yang terlibat>
    
    Jika ada informasi yang tidak dinyatakan secara eksplisit dalam dokumen, catat sebagai "Tidak ditentukan". Jangan memberikan pendahuluan.

    Teks perjanjian sublease:
    {text}
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="Anda adalah analis hukum yang mengkhususkan diri dalam hukum real estat, dikenal karena ringkasan perjanjian sublease yang sangat akurat dan detail.",
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "Berikut adalah ringkasan perjanjian sublease: <summary>"}
        ],
        stop_sequences=["</summary>"]
    )

    return response.content[0].text

sublease_summary = summarize_document(document_text, details_to_extract)
print(sublease_summary)

Kode ini mengimplementasikan fungsi summarize_document yang menggunakan Claude untuk meringkas isi perjanjian sublease. Fungsi ini menerima string teks dan daftar detail yang akan diekstrak sebagai input. Dalam contoh ini, kita memanggil fungsi dengan variabel document_text dan details_to_extract yang didefinisikan dalam cuplikan kode sebelumnya.

Di dalam fungsi, prompt dibuat untuk Claude, termasuk dokumen yang akan diringkas, detail yang akan diekstrak, dan instruksi khusus untuk meringkas dokumen. Prompt menginstruksikan Claude untuk merespons dengan ringkasan setiap detail yang akan diekstrak yang disarangkan dalam header XML.

Karena kita memutuskan untuk mengeluarkan setiap bagian ringkasan dalam tag, setiap bagian dapat dengan mudah diuraikan sebagai langkah pasca-pemrosesan. Pendekatan ini memungkinkan ringkasan terstruktur yang dapat disesuaikan dengan kasus penggunaan Anda, sehingga setiap ringkasan mengikuti pola yang sama.

Evaluasi prompt Anda

Prompting sering memerlukan pengujian dan optimasi agar siap untuk produksi. Untuk menentukan kesiapan solusi Anda, evaluasi kualitas ringkasan Anda menggunakan proses sistematis yang menggabungkan metode kuantitatif dan kualitatif. Membuat evaluasi empiris yang kuat berdasarkan kriteria keberhasilan yang telah Anda tetapkan akan memungkinkan Anda untuk mengoptimalkan prompt Anda. Berikut adalah beberapa metrik yang mungkin ingin Anda sertakan dalam evaluasi empiris Anda:

Terapkan prompt Anda

Berikut adalah beberapa pertimbangan tambahan yang perlu diingat saat Anda menerapkan solusi Anda ke produksi.

  1. Pastikan tidak ada kewajiban hukum: Pahami implikasi hukum dari kesalahan dalam ringkasan, yang dapat menyebabkan kewajiban hukum bagi organisasi atau klien Anda. Berikan disclaimer atau pemberitahuan hukum yang menjelaskan bahwa ringkasan dihasilkan oleh AI dan harus ditinjau oleh profesional hukum.

  2. Tangani berbagai jenis dokumen: Dalam panduan ini, kami telah membahas cara mengekstrak teks dari PDF. Dalam dunia nyata, dokumen mungkin datang dalam berbagai format (PDF, dokumen Word, file teks, dll.). Pastikan pipeline ekstraksi data Anda dapat mengkonversi semua format file yang Anda harapkan untuk diterima.

  3. Paralelkan panggilan API ke Claude: Dokumen panjang dengan jumlah token yang besar mungkin memerlukan waktu hingga satu menit agar Claude menghasilkan ringkasan. Untuk koleksi dokumen besar, Anda mungkin ingin mengirim panggilan API ke Claude secara paralel sehingga ringkasan dapat diselesaikan dalam waktu yang wajar. Lihat batas rate Anthropic untuk menentukan jumlah maksimum panggilan API yang dapat dilakukan secara paralel.


Tingkatkan performa

Dalam skenario kompleks, mungkin membantu untuk mempertimbangkan strategi tambahan untuk meningkatkan performa di luar teknik rekayasa prompt standar. Berikut adalah beberapa strategi lanjutan:

Lakukan meta-ringkasan untuk meringkas dokumen panjang

Ringkasan hukum sering melibatkan penanganan dokumen panjang atau banyak dokumen terkait sekaligus, sehingga Anda melampaui jendela konteks Claude. Anda dapat menggunakan metode chunking yang dikenal sebagai meta-ringkasan untuk menangani kasus penggunaan ini. Teknik ini melibatkan pemecahan dokumen menjadi potongan-potongan kecil yang dapat dikelola dan kemudian memproses setiap potongan secara terpisah. Anda kemudian dapat menggabungkan ringkasan dari setiap potongan untuk membuat meta-ringkasan dari seluruh dokumen.

Berikut adalah contoh cara melakukan meta-ringkasan:

import anthropic

# Inisialisasi klien 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-20250514", max_tokens=1000):

    # Format detail yang akan diekstrak untuk ditempatkan dalam konteks prompt
    details_to_extract_str = '\n'.join(details_to_extract)

    # Iterasi melalui potongan dan ringkas masing-masing
    chunk_summaries = [summarize_document(chunk, details_to_extract, model=model, max_tokens=max_tokens) for chunk in chunk_text(text)]
    
    final_summary_prompt = f"""
    
    Anda sedang melihat ringkasan potongan dari beberapa dokumen yang semuanya terkait. 
    Gabungkan ringkasan berikut dari dokumen dari berbagai sumber yang dapat dipercaya menjadi ringkasan keseluruhan yang koheren:

    <chunked_summaries>
    {"".join(chunk_summaries)}
    </chunked_summaries>

    Fokus pada aspek-aspek kunci ini:
    {details_to_extract_str})

    Berikan ringkasan dalam poin-poin yang disarangkan dalam header XML untuk setiap bagian. Contohnya:

    <pihak yang terlibat>
    - Sublessor: [Nama]
    // Tambah lebih banyak detail sesuai kebutuhan
    </pihak yang terlibat>
    
    Jika ada informasi yang tidak dinyatakan secara eksplisit dalam dokumen, catat sebagai "Tidak ditentukan". Jangan memberikan pendahuluan.
    """

    response = client.messages.create(
        model=model,
        max_tokens=max_tokens,
        system="Anda adalah ahli hukum yang meringkas catatan pada satu dokumen.",
        messages=[
            {"role": "user",  "content": final_summary_prompt},
            {"role": "assistant", "content": "Berikut adalah ringkasan perjanjian sublease: <summary>"}

        ],
        stop_sequences=["</summary>"]
    )
    
    return response.content[0].text

long_summary = summarize_long_document(document_text, details_to_extract)
print(long_summary)

Fungsi summarize_long_document dibangun berdasarkan fungsi summarize_document sebelumnya dengan membagi dokumen menjadi potongan-potongan kecil dan meringkas setiap potongan secara individual.

Kode ini mencapai hal tersebut dengan menerapkan fungsi summarize_document ke setiap potongan 20.000 karakter dalam dokumen asli. Ringkasan individual kemudian digabungkan, dan ringkasan akhir dibuat dari ringkasan potongan ini.

Perhatikan bahwa fungsi summarize_long_document tidak benar-benar diperlukan untuk contoh pdf kami, karena seluruh dokumen muat dalam jendela konteks Claude. Namun, ini menjadi penting untuk dokumen yang melebihi jendela konteks Claude atau saat meringkas beberapa dokumen terkait bersama-sama. Terlepas dari itu, teknik meta-ringkasan ini sering menangkap detail penting tambahan dalam ringkasan akhir yang terlewatkan dalam pendekatan ringkasan tunggal sebelumnya.

Gunakan dokumen terindeks ringkasan untuk menjelajahi koleksi dokumen besar

Mencari koleksi dokumen dengan LLM biasanya melibatkan retrieval-augmented generation (RAG). Namun, dalam skenario yang melibatkan dokumen besar atau ketika pengambilan informasi yang tepat sangat penting, pendekatan RAG dasar mungkin tidak cukup. Dokumen terindeks ringkasan adalah pendekatan RAG lanjutan yang menyediakan cara yang lebih efisien untuk mengurutkan dokumen untuk pengambilan, menggunakan konteks yang lebih sedikit daripada metode RAG tradisional. Dalam pendekatan ini, Anda pertama-tama menggunakan Claude untuk menghasilkan ringkasan singkat untuk setiap dokumen dalam korpus Anda, dan kemudian menggunakan Clade untuk mengurutkan relevansi setiap ringkasan terhadap kueri yang ditanyakan. Untuk detail lebih lanjut tentang pendekatan ini, termasuk contoh berbasis kode, periksa bagian dokumen terindeks ringkasan dalam buku panduan ringkasan.

Fine-tune Claude untuk belajar dari dataset Anda

Teknik lanjutan lainnya untuk meningkatkan kemampuan Claude dalam menghasilkan ringkasan adalah fine-tuning. Fine-tuning melibatkan pelatihan Claude pada dataset kustom yang secara khusus selaras dengan kebutuhan ringkasan hukum Anda, memastikan bahwa Claude beradaptasi dengan kasus penggunaan Anda. Berikut adalah gambaran umum tentang cara melakukan fine-tuning:

  1. Identifikasi kesalahan: Mulailah dengan mengumpulkan contoh di mana ringkasan Claude kurang memadai - ini bisa termasuk kehilangan detail hukum penting, salah memahami konteks, atau menggunakan terminologi hukum yang tidak tepat.

  2. Kurasi dataset: Setelah Anda mengidentifikasi masalah-masalah ini, kompilasi dataset dari contoh-contoh bermasalah ini. Dataset ini harus mencakup dokumen hukum asli bersama dengan ringkasan yang telah Anda koreksi, memastikan bahwa Claude mempelajari perilaku yang diinginkan.

  3. Lakukan fine-tuning: Fine-tuning melibatkan pelatihan ulang model pada dataset yang telah Anda kurasi untuk menyesuaikan bobot dan parameternya. Pelatihan ulang ini membantu Claude lebih memahami persyaratan spesifik dari domain hukum Anda, meningkatkan kemampuannya untuk meringkas dokumen sesuai dengan standar Anda.

  4. Peningkatan iteratif: Fine-tuning bukanlah proses satu kali. Saat Claude terus menghasilkan ringkasan, Anda dapat secara iteratif menambahkan contoh baru di mana kinerjanya kurang baik, lebih menyempurnakan kemampuannya. Seiring waktu, loop umpan balik berkelanjutan ini akan menghasilkan model yang sangat terspesialisasi untuk tugas ringkasan hukum Anda.

Fine-tuning saat ini hanya tersedia melalui Amazon Bedrock. Detail tambahan tersedia di blog peluncuran AWS.