Kunjungi panduan peringkasan kami untuk melihat contoh implementasi peringkasan dokumen hukum menggunakan Claude.

Sebelum membangun dengan Claude

Tentukan apakah menggunakan Claude untuk peringkasan dokumen hukum

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

Tentukan detail yang ingin Anda ekstrak dari peringkasan

Tidak ada ringkasan tunggal yang benar untuk setiap dokumen. 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 sewa-menyewa, Anda mungkin ingin mengekstrak poin-poin kunci berikut:

details_to_extract = [
    'Pihak yang terlibat (pemberi sewa, penyewa, dan pemberi sewa asli)',
    'Detail properti (alamat, deskripsi, dan penggunaan yang diizinkan)', 
    'Jangka waktu dan sewa (tanggal mulai, tanggal berakhir, sewa bulanan, dan uang jaminan)',
    '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 menantang. 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 peringkasan 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 3.5 Sonnet adalah pilihan yang sangat baik untuk kasus penggunaan seperti ini di mana akurasi tinggi diperlukan. Jika ukuran dan kuantitas dokumen Anda besar sehingga biaya mulai menjadi perhatian, Anda juga dapat mencoba menggunakan model yang lebih kecil seperti Claude 3 Haiku.

Untuk membantu memperkirakan biaya ini, berikut adalah perbandingan biaya untuk meringkas 1.000 perjanjian sewa-menyewa menggunakan Sonnet dan Haiku:

  • Ukuran konten

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

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

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

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

Ubah dokumen menjadi 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 siap untuk diproses oleh Claude.

Berikut adalah demonstrasi proses ini pada contoh 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 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 contoh perjanjian sewa-menyewa yang digunakan dalam panduan peringkasan. Perjanjian ini bersumber dari perjanjian sewa-menyewa yang tersedia untuk umum dari situs web sec.gov.

Kita menggunakan library 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 sedikit terminologi teknis, atau memberikan ringkasan konteks pada tingkat yang lebih tinggi atau lebih rendah.

Berikut contoh cara membuat prompt yang memastikan ringkasan yang dihasilkan mengikuti struktur yang konsisten saat menganalisis perjanjian sewa-menyewa:

import anthropic

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

def summarize_document(text, details_to_extract, model="claude-3-5-sonnet-20241022", 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 sewa-menyewa
    prompt = f"""Ringkas perjanjian sewa-menyewa berikut. Fokus pada aspek-aspek kunci ini:

    {details_to_extract_str}

    Berikan ringkasan dalam poin-poin yang bersarang dalam header XML untuk setiap bagian. Contoh:

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

    Teks perjanjian sewa-menyewa:
    {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 yang sangat akurat dan detail tentang perjanjian sewa-menyewa.",
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "Berikut adalah ringkasan perjanjian sewa-menyewa: <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 sewa-menyewa. 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 telah didefinisikan dalam cuplikan kode sebelumnya.

Di dalam fungsi, prompt dibuat untuk Claude, termasuk dokumen yang akan diringkas, detail yang akan diekstrak, dan instruksi spesifik untuk meringkas dokumen. Prompt menginstruksikan Claude untuk merespons dengan ringkasan setiap detail yang akan diekstrak yang bersarang 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 pro

[Message truncated due to length. Let me know if you’d like me to continue translating the rest.]

Was this page helpful?