Kunjungi buku panduan moderasi konten kami untuk melihat contoh implementasi moderasi konten menggunakan Claude.

Panduan ini berfokus pada moderasi konten yang dibuat pengguna dalam aplikasi Anda. Jika Anda mencari panduan tentang moderasi interaksi dengan Claude, silakan merujuk ke panduan perlindungan kami.

Sebelum membangun dengan Claude

Putuskan apakah akan menggunakan Claude untuk moderasi konten

Berikut adalah beberapa indikator utama bahwa Anda sebaiknya menggunakan LLM seperti Claude daripada pendekatan ML tradisional atau berbasis aturan untuk moderasi konten:

Anthropic telah melatih semua model Claude untuk jujur, membantu dan tidak berbahaya. Ini dapat mengakibatkan Claude memoderasi konten yang dianggap sangat berbahaya (sesuai dengan Kebijakan Penggunaan yang Dapat Diterima kami), terlepas dari prompt yang digunakan. Misalnya, situs web dewasa yang ingin mengizinkan pengguna memposting konten seksual eksplisit mungkin mendapati bahwa Claude masih menandai konten eksplisit sebagai memerlukan moderasi, bahkan jika mereka menentukan dalam prompt mereka untuk tidak memoderasi konten seksual eksplisit. Kami menyarankan untuk meninjau AUP kami sebelum membangun solusi moderasi.

Buat contoh konten untuk dimoderasi

Sebelum mengembangkan solusi moderasi konten, pertama-tama buat contoh konten yang harus ditandai dan konten yang tidak perlu ditandai. Pastikan Anda menyertakan kasus-kasus batas dan skenario yang menantang yang mungkin sulit ditangani secara efektif oleh sistem moderasi konten. Setelah itu, tinjau contoh Anda untuk membuat daftar kategori moderasi yang terdefinisi dengan baik. Misalnya, contoh yang dibuat oleh platform media sosial mungkin mencakup hal berikut:

allowed_user_comments = [
    'Film ini bagus sekali, saya sangat menikmatinya. Pemeran utamanya benar-benar membunuh perannya!',
    'Saya benci hari Senin.',
    'Ini waktu yang tepat untuk berinvestasi emas!'
]

disallowed_user_comments = [
    'Hapus postingan ini sekarang atau kamu lebih baik bersembunyi. Aku akan mengejarmu dan keluargamu.',
    'Jauhi ponsel 5G!! Mereka menggunakan 5G untuk mengendalikanmu.',
    'Selamat! Anda telah memenangkan kartu hadiah senilai $1.000. Klik di sini untuk mengklaim hadiah Anda!'
]

# Contoh komentar pengguna untuk menguji moderasi konten
user_comments = allowed_user_comments + disallowed_user_comments

# Daftar kategori yang dianggap tidak aman untuk moderasi konten
unsafe_categories = [
    'Eksploitasi Anak',
    'Teori Konspirasi',
    'Kebencian',
    'Senjata Tidak Pandang Bulu', 
    'Kekayaan Intelektual',
    'Kejahatan Non-Kekerasan', 
    'Privasi',
    'Menyakiti Diri Sendiri',
    'Kejahatan Seksual',
    'Konten Seksual',
    'Saran Khusus',
    'Kejahatan Kekerasan'
]

Memoderasi contoh-contoh ini secara efektif membutuhkan pemahaman bahasa yang bernuansa. Dalam komentar, Film ini bagus sekali, saya sangat menikmatinya. Pemeran utamanya benar-benar membunuh perannya!, sistem moderasi konten perlu mengenali bahwa “membunuh perannya” adalah metafora, bukan indikasi kekerasan yang sebenarnya. Sebaliknya, meskipun tidak ada penyebutan kekerasan secara eksplisit, komentar Hapus postingan ini sekarang atau kamu lebih baik bersembunyi. Aku akan mengejarmu dan keluargamu. harus ditandai oleh sistem moderasi konten.

Daftar unsafe_categories dapat disesuaikan dengan kebutuhan spesifik Anda. Misalnya, jika Anda ingin mencegah anak di bawah umur membuat konten di situs web Anda, Anda dapat menambahkan “Posting di Bawah Umur” ke daftar.


Cara memoderasi konten menggunakan Claude

Pilih model Claude yang tepat

Saat memilih model, penting untuk mempertimbangkan ukuran data Anda. Jika biaya menjadi perhatian, model yang lebih kecil seperti Claude 3 Haiku adalah pilihan yang sangat baik karena hemat biaya. Berikut adalah perkiraan biaya untuk memoderasi teks untuk platform media sosial yang menerima satu miliar posting per bulan:

  • Ukuran konten

    • Posting per bulan: 1 miliar
    • Karakter per posting: 100
    • Total karakter: 100 miliar
  • Perkiraan token

    • Token input: 28,6 miliar (dengan asumsi 1 token per 3,5 karakter)
    • Persentase pesan yang ditandai: 3%
    • Token output per pesan yang ditandai: 50
    • Total token output: 1,5 miliar
  • Perkiraan biaya Claude 3 Haiku

    • Biaya token input: 2.860 MTok * 0,25/MTok=0,25/MTok = 715
    • Biaya token output: 1.500 MTok * 1,25/MTok=1,25/MTok = 1.875
    • Biaya bulanan: 715+715 + 1.875 = $2.590
  • Perkiraan biaya Claude 3.5 Sonnet

    • Biaya token input: 2.860 MTok * 3,00/MTok=3,00/MTok = 8.580
    • Biaya token output: 1.500 MTok * 15,00/MTok=15,00/MTok = 22.500
    • Biaya bulanan: 8.580+8.580 + 22.500 = $31.080
Biaya sebenarnya mungkin berbeda dari perkiraan ini. Perkiraan ini didasarkan pada prompt yang disorot dalam bagian tentang pemrosesan batch. Token output dapat dikurangi lebih jauh dengan menghapus bidang explanation dari respons.

Bangun prompt yang kuat

Untuk menggunakan Claude untuk moderasi konten, Claude harus memahami persyaratan moderasi aplikasi Anda. Mari kita mulai dengan menulis prompt yang memungkinkan Anda menentukan kebutuhan moderasi Anda:

import anthropic
import json

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

def moderate_message(message, unsafe_categories):
    # Mengubah daftar kategori tidak aman menjadi string, dengan setiap kategori di baris baru
    unsafe_category_str = '\n'.join(unsafe_categories)
    
    # Menyusun prompt untuk Claude, termasuk pesan dan kategori tidak aman
    assessment_prompt = f"""
    Tentukan apakah pesan berikut memerlukan moderasi, 
    berdasarkan kategori tidak aman yang diuraikan di bawah ini.
    
    Pesan:
    <message>{message}</message>

    Kategori Tidak Aman:
    <categories>
    {unsafe_category_str}
    </categories>

    Tanggapi HANYA dengan objek JSON, menggunakan format di bawah ini:
    {{
    "violation": <Bidang Boolean yang menunjukkan apakah pesan harus dimoderasi>,
    "categories": [Daftar kategori yang dilanggar, dipisahkan koma],
    "explanation": [Opsional. Hanya sertakan jika ada pelanggaran.]
    }}"""

    # Kirim permintaan ke Claude untuk moderasi konten
    response = client.messages.create(
        model="claude-3-haiku-20240307",  # Menggunakan model Haiku untuk biaya lebih rendah
        max_tokens=200,
        temperature=0,   # Gunakan temperature 0 untuk konsistensi yang lebih tinggi
        messages=[
            {"role": "user", "content": assessment_prompt}
        ]
    )
    
    # Parse respons JSON dari Claude
    assessment = json.loads(response.content[0].text)
    
    # Ekstrak status pelanggaran dari penilaian
    contains_violation = assessment['violation']
    
    # Jika ada pelanggaran, dapatkan kategori dan penjelasan; jika tidak, gunakan default kosong
    violated_categories = assessment.get('categories', []) if contains_violation else []
    explanation = assessment.get('explanation') if contains_violation else None
    
    return contains_violation, violated_categories, explanation

# Proses setiap komentar dan cetak hasilnya
for comment in user_comments:
    print(f"\nKomentar: {comment}")
    violation, violated_categories, explanation = moderate_message(comment, unsafe_categories)
    
    if violation:
        print(f"Kategori yang Dilanggar: {', '.join(violated_categories)}")
        print(f"Penjelasan: {explanation}")
    else:
        print("Tidak ada masalah terdeteksi.")

Dalam contoh ini, fungsi moderate_message berisi prompt penilaian yang mencakup kategori konten tidak aman dan pesan yang ingin kita evaluasi. Prompt meminta Claude untuk menilai apakah pesan tersebut harus dimoderasi, berdasarkan kategori tidak aman yang telah kita tentukan.

Penilaian model kemudian diuraikan untuk menentukan apakah ada pelanggaran. Jika ada pelanggaran, Claude juga mengembalikan daftar kategori yang dilanggar, serta penjelasan mengapa pesan tersebut tidak aman.

Evaluasi prompt Anda

Moderasi konten adalah masalah klasifikasi. Dengan demikian, Anda dapat menggunakan teknik yang sama yang diuraikan dalam buku panduan klasifikasi kami untuk menentukan akurasi sistem moderasi konten Anda.

Satu pertimbangan tambahan adalah bahwa alih-alih memperlakukan moderasi konten sebagai masalah klasifikasi biner, Anda dapat membuat beberapa kategori untuk mewakili berbagai tingkat risiko. Membuat beberapa tingkat risiko memungkinkan Anda menyesuaikan agresivitas moderasi Anda. Misalnya, Anda mungkin ingin memblokir secara otomatis kueri pengguna yang dianggap berisiko tinggi, sementara pengguna dengan banyak kueri berisiko sedang ditandai untuk ditinjau manusia.

import anthropic
import json

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

def assess_risk_level(message, unsafe_categories):
    # Mengubah daftar kategori tidak aman menjadi string, dengan setiap kategori di baris baru
    unsafe_category_str = '\n'.join(unsafe_categories)
    
    # Menyusun prompt untuk Claude, termasuk pesan, kategori tidak aman, dan definisi tingkat risiko
    assessment_prompt = f"""
    Nilai tingkat risiko pesan berikut memerlukan moderasi, 
    berdasarkan kategori tidak aman yang tercantum di bawah ini.
    
Pesan:
<message>{message}</message>

Kategori Tidak Aman:
<categories>
{unsafe_category_str}
</categories>

Tetapkan tingkat risiko berdasarkan keyakinan Anda bahwa pesan pengguna harus dimoderasi 
berdasarkan kategori tidak aman yang ditentukan:

0 - Tidak ada risiko
1 - Risiko rendah
2 - Risiko sedang
3 - Risiko tinggi

Tanggapi HANYA dengan objek JSON, menggunakan format di bawah ini:
{{
  "risk_level": <Bidang numerik yang menunjukkan tingkat risiko>,
  "categories": [Daftar kategori yang dilanggar, dipisahkan koma],
  "explanation": <Opsional. Hanya sertakan jika tingkat risiko lebih besar dari 0>
}}"""

    # Kirim permintaan ke Claude untuk penilaian risiko
    response = client.messages.create(
        model="claude-3-haiku-20240307",  # Menggunakan model Haiku untuk biaya lebih rendah
        max_tokens=200,
        temperature=0,   # Gunakan temperature 0 untuk konsistensi yang lebih tinggi
        messages=[
            {"role": "user", "content": assessment_prompt}
        ]
    )
    
    # Parse respons JSON dari Claude
    assessment = json.loads(response.content[0].text)
    
    # Ekstrak tingkat risiko, kategori yang dilanggar, dan penjelasan dari penilaian
    risk_level = assessment["risk_level"]
    violated_categories = assessment["categories"]
    explanation = assessment.get("explanation")
    
    return risk_level, violated_categories, explanation

# Proses setiap komentar dan cetak hasilnya
for comment in user_comments:
    print(f"\nKomentar: {comment}")
    risk_level, violated_categories, explanation = assess_risk_level(comment, unsafe_categories)
    
    print(f"Tingkat Risiko: {risk_level}")
    if violated_categories:
        print(f"Kategori yang Dilanggar: {', '.join(violated_categories)}")
    if explanation:
        print(f"Penjelasan: {explanation}")

Kode ini mengimplementasikan fungsi assess_risk_level yang menggunakan Claude untuk mengevaluasi tingkat risiko sebuah pesan. Fungsi ini menerima pesan dan daftar kategori tidak aman sebagai input.

Di dalam fungsi, prompt dibuat untuk Claude, termasuk pesan yang akan dinilai, kategori tidak aman, dan instruksi spesifik untuk mengevaluasi tingkat risiko. Prompt menginstruksikan Claude untuk merespons dengan objek JSON yang mencakup tingkat risiko, kategori yang dilanggar, dan penjelasan opsional.

Pendekatan ini memungkinkan moderasi konten yang fleksibel dengan menetapkan tingkat risiko. Ini dapat diintegrasikan dengan mulus ke dalam sistem yang lebih besar untuk mengotomatisasi penyaringan konten atau menandai komentar untuk ditinjau manusia berdasarkan tingkat risiko yang dinilai. Misalnya, saat menjalankan kode ini, komentar Hapus postingan ini sekarang atau kamu lebih baik bersembunyi. Aku akan mengejarmu dan keluargamu. diidentifikasi sebagai berisiko tinggi karena ancaman berbahayanya. Sebaliknya, komentar Jauhi ponsel 5G!! Mereka menggunakan 5G untuk mengendalikanmu. dikategorikan sebagai berisiko sedang.

Terapkan prompt Anda

Setelah Anda yakin dengan kualitas solusi Anda, saatnya menerapkannya ke produksi. Berikut adalah beberapa praktik terbaik yang harus diikuti saat menggunakan moderasi konten dalam produksi:

  1. Berikan umpan balik yang jelas kepada pengguna: Ketika input pengguna diblokir atau respons ditandai karena moderasi konten, berikan umpan balik yang informatif dan konstruktif untuk membantu pengguna memahami mengapa pesan mereka ditandai dan bagaimana mereka dapat mengungkapkannya kembali dengan tepat. Dalam contoh pengkodean di atas, ini dilakukan melalui tag explanation dalam respons Claude.

  2. Analisis konten yang dimoderasi: Pantau jenis konten yang ditandai oleh sistem moderasi Anda untuk mengidentifikasi tren dan area potensial untuk perbaikan.

  3. Evaluasi dan tingkatkan secara terus-menerus: Secara teratur nilai kinerja sistem moderasi konten Anda menggunakan metrik seperti pelacakan presisi dan recall. Gunakan data ini untuk menyempurnakan prompt moderasi, kata kunci, dan kriteria penilaian Anda secara iteratif.


Tingkatkan kinerja

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

Tentukan topik dan berikan contoh

Selain mencantumkan kategori tidak aman dalam prompt, perbaikan lebih lanjut dapat dilakukan dengan memberikan definisi dan frasa yang terkait dengan setiap kategori.

import anthropic
import json

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

# Kamus kategori yang dianggap tidak aman untuk moderasi konten, dengan definisinya
unsafe_category_definitions = {
    'Eksploitasi Anak': 'Konten yang menggambarkan ketelanjangan anak atau yang memungkinkan, mendorong, memaafkan, atau menggambarkan pelecehan seksual terhadap anak.',
    'Teori Konspirasi': """Konten yang mempromosikan atau mendukung teori yang tidak berdasar, salah, atau menyesatkan tentang peristiwa, situasi, atau individu, 
        yang dapat menimbulkan bahaya atau merusak kepercayaan publik terhadap institusi atau fakta.""",
    'Kebencian': """Konten yang mengandung kebencian terhadap orang berdasarkan karakteristik yang dilindungi mereka 
        (ras, warna kulit, etnis, asal kebangsaan, disabilitas, afiliasi agama, kasta, orientasi seksual, jenis kelamin, identitas gender dan penyakit serius), 
        atau konten yang melanggengkan stereotip negatif.""",
    'Senjata Tidak Pandang Bulu': 'Konten yang memungkinkan pembuatan senjata pemusnah massal.', 
    'Kekayaan Intelektual': 'Konten yang melanggar hak kekayaan intelektual pihak ketiga.',
    'Kejahatan Non-Kekerasan': 'Konten yang memungkinkan, mendorong, atau memaafkan tindakan kejahatan non-kekerasan.', 
    'Privasi': 'Konten yang berisi informasi sensitif, pribadi tentang individu pribadi.',
    'Menyakiti Diri Sendiri': 'Konten yang memungkinkan, mendorong, atau memaafkan tindakan menyakiti diri sendiri yang disengaja.',
    'Kejahatan Seksual': 'Konten yang memungkinkan, mendorong, atau memaafkan tindakan kejahatan seksual.',
    'Konten Seksual': 'Konten yang berisi deskripsi erotis atau penggambaran eksplisit tentang tindakan seksual.',
    'Saran Khusus': """Konten yang berisi saran keuangan, medis, atau hukum. 
        Saran keuangan termasuk panduan tentang investasi, saham, obligasi, atau perencanaan keuangan apa pun.""",
    'Kejahatan Kekerasan': 'Konten yang memungkinkan, mendorong, atau memaafkan tindakan kejahatan kekerasan.', 
}


def moderate_message_with_definitions(message, unsafe_category_definitions):
    # Format string kategori tidak aman, dengan setiap kategori dan definisinya di baris baru
    unsafe_category_str = '\n'.join(f'{category}: {definition}' 
        for category, definition in unsafe_category_definitions.items()
    )
    
    # Menyusun prompt untuk Claude, termasuk pesan dan kategori tidak aman
    assessment_prompt = f"""Tentukan apakah pesan berikut memerlukan moderasi, berdasarkan kategori tidak aman yang diuraikan di bawah ini.

Pesan:
<message>{message}</message>

Kategori Tidak Aman dan Definisinya:
<categories>
{unsafe_category_str}
</categories>

Penting untuk mengingat semua kategori tidak aman dan definisinya.

Tanggapi HANYA dengan objek JSON, menggunakan format di bawah ini:
{{
  "violation": <Bidang Boolean yang menunjukkan apakah pesan harus dimoderasi>,
  "categories": [Daftar kategori yang dilanggar, dipisahkan koma],
  "explanation": [Opsional. Hanya sertakan jika ada pelanggaran.]
}}"""

    # Kirim permintaan ke Claude untuk moderasi konten
    response = client.messages.create(
        model="claude-3-haiku-20240307",  # Menggunakan model Haiku untuk biaya lebih rendah
        max_tokens=200,
        temperature=0,   # Gunakan temperature 0 untuk konsistensi yang lebih tinggi
        messages=[
            {"role": "user", "content": assessment_prompt}
        ]
    )
    
    # Parse respons JSON dari Claude
    assessment = json.loads(response.content[0].text)
    
    # Ekstrak status pelanggaran dari penilaian
    contains_violation = assessment['violation']
    
    # Jika ada pelanggaran, dapatkan kategori dan penjelasan; jika tidak, gunakan default kosong
    violated_categories = assessment.get('categories', []) if contains_violation else []
    explanation = assessment.get('explanation') if contains_violation else None
    
    return contains_violation, violated_categories, explanation


# Proses setiap komentar dan cetak hasilnya
for comment in user_comments:
    print(f"\nKomentar: {comment}")
    violation, violated_categories, explanation = moderate_message_with_definitions(comment, unsafe_category_definitions)
    
    if violation:
        print(f"Kategori yang Dilanggar: {', '.join(violated_categories)}")
        print(f"Penjelasan: {explanation}")
    else:
        print("Tidak ada masalah terdeteksi.")

Fungsi moderate_message_with_definitions memperluas fungsi moderate_message sebelumnya dengan memungkinkan setiap kategori tidak aman dipasangkan dengan definisi terperinci. Ini terjadi dalam kode dengan mengganti daftar unsafe_categories dari fungsi asli dengan kamus unsafe_category_definitions. Kamus ini memetakan setiap kategori tidak aman ke definisi yang sesuai. Baik nama kategori maupun definisinya disertakan dalam prompt.

Perhatikan bahwa definisi untuk kategori Saran Khusus sekarang menentukan jenis saran keuangan yang harus dilarang. Akibatnya, komentar Ini waktu yang tepat untuk berinvestasi emas!, yang sebelumnya lolos penilaian moderate_message, sekarang memicu pelanggaran.

Pertimbangkan pemrosesan batch

Untuk mengurangi biaya dalam situasi di mana moderasi real-time tidak diperlukan, pertimbangkan untuk memoderasi pesan dalam batch. Sertakan beberapa pesan dalam konteks prompt, dan minta Claude untuk menilai pesan mana yang harus dimoderasi.

import anthropic
import json

# Inisialisasi klien Anthropic
client = anthropic.Anthropic()

def batch_moderate_messages(messages, unsafe_categories):
    # Mengubah daftar kategori tidak aman menjadi string, dengan setiap kategori di baris baru
    unsafe_category_str = '\n'.join(unsafe_categories)
    
    # Format string pesan, dengan setiap pesan dibungkus dalam tag seperti XML dan diberi ID
    messages_str = '\n'.join([f'<message id={idx}>{msg}</message>' for idx, msg in enumerate(messages)])
    
    # Menyusun prompt untuk Claude, termasuk pesan dan kategori tidak aman
    assessment_prompt = f"""Tentukan pesan mana yang harus dimoderasi, berdasarkan kategori tidak aman yang diuraikan di bawah ini.

Pesan:
<messages>
{messages_str}
</messages>

Kategori tidak aman dan definisinya:
<categories>
{unsafe_category_str}
</categories>

Tanggapi HANYA dengan objek JSON, menggunakan format di bawah ini:
{{
  "violations": [
    {{
      "id": <id pesan>,
      "categories": [daftar kategori yang dilanggar],
      "explanation": <Penjelasan mengapa ada pelanggaran>
    }},
    ...
  ]
}}

Catatan Penting:
- Ingat untuk menganalisis setiap pesan untuk pelanggaran.
- Pilih sejumlah pelanggaran yang masuk akal yang berlaku."""

    # Kirim permintaan ke Claude untuk moderasi konten
    response = client.messages.create(
        model="claude-3-haiku-20240307",  # Menggunakan model Haiku untuk biaya lebih rendah
        max_tokens=2048,  # Meningkatkan jumlah token maksimum untuk menangani batch
        temperature=0,    # Gunakan temperature 0 untuk konsistensi yang lebih tinggi
        messages=[
            {"role": "user", "content": assessment_prompt}
        ]
    )
    
    # Parse respons JSON dari Claude
    assessment = json.loads(response.content[0].text)
    return assessment


# Proses batch komentar dan dapatkan respons
response_obj = batch_moderate_messages(user_comments, unsafe_categories)

# Cetak hasil untuk setiap pelanggaran yang terdeteksi
for violation in response_obj['violations']:
    print(f"""Komentar: {user_comments[violation['id']]}
Kategori yang Dilanggar: {', '.join(violation['categories'])}
Penjelasan: {violation['explanation']}
""")

Dalam contoh ini, fungsi batch_moderate_messages menangani moderasi seluruh batch pesan dengan satu panggilan API Claude. Di dalam fungsi, prompt dibuat yang mencakup daftar pesan yang akan dievaluasi, kategori konten tidak aman yang ditentukan, dan deskripsinya. Prompt mengarahkan Claude untuk mengembalikan objek JSON yang mencantumkan semua pesan yang mengandung pelanggaran. Setiap pesan dalam respons diidentifikasi oleh id-nya, yang sesuai dengan posisi pesan dalam daftar input. Perlu diingat bahwa menemukan ukuran batch optimal untuk kebutuhan spesifik Anda mungkin memerlukan beberapa eksperimen. Meskipun ukuran batch yang lebih besar dapat menurunkan biaya, mereka mungkin juga menyebabkan sedikit penurunan kualitas. Selain itu, Anda mungkin perlu meningkatkan parameter max_tokens dalam panggilan API Claude untuk mengakomodasi respons yang lebih panjang. Untuk detail tentang jumlah token maksimum yang dapat dikeluarkan model pilihan Anda, lihat halaman perbandingan model.