Skip to main content
Dokumentasi
Pusat Pembelajaran

Kuasai moderasi konten dengan panduan lengkap, tutorial, dan dokumentasi API

Tautan Cepat

Panduan Moderasi Konten AI

Discuse memeriksa teks dan gambar untuk sentimen/toksisitas, spam, bahasa yang tidak diinginkan, kata-kata kasar, tautan, dan gambar eksplisit, lalu mengembalikan hasil per kategori agar kode Anda dapat menyetujui, menandai, atau menolak konten secara otomatis. Anda mengirim konten ke satu endpoint, POST https://api.discuse.com/api/v2/check, dan membaca skor terstruktur yang dikembalikan. Panduan ini membahas cara kerja pemeriksaan, pola moderasi di sekitarnya, serta cara menghubungkan Discuse API ke pipeline Anda.

Apa itu moderasi konten AI?

Moderasi konten AI menggunakan model machine-learning untuk mendeteksi dan mengklasifikasikan konten yang berpotensi berbahaya secara otomatis. Jika peninjau manusia membaca satu item dalam satu waktu, model ini menilai konten saat konten tersebut masuk, sehingga kiriman dapat diperiksa sebelum dilihat pengguna lain.

Bagaimana cara kerjanya?

  1. Kirim konten: Kirim teks dan/atau URL media ke API moderasi.
  2. Jalankan pemeriksaan: API menjalankan pemeriksaan yang diaktifkan (sentimen, bahasa, spam, kata kasar, gambar, tautan, antivirus).
  3. Beri skor pada setiap kategori: Setiap pemeriksaan mengembalikan skor dan flag hit yang menunjukkan apakah skor tersebut melewati ambang batas yang Anda konfigurasikan.
  4. Ambil keputusan: Baca has_violations (serta skor per pemeriksaan) untuk menyetujui, menandai, atau menolak.

Dengan Discuse, permintaannya terlihat seperti ini:

const response = await fetch('https://api.discuse.com/api/v2/check', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': process.env.DISCUSE_API_KEY
  },
  body: JSON.stringify({
    content: { text: 'message to check', image_urls: ['https://...'] },
    settings: { check_sentiment: true, check_spam: true, check_images: true }
  })
});
const result = await response.json(); // { has_violations, results: { sentiment, spamfinder, images, ... }, usage }

Apa saja yang dicakup oleh setiap pemeriksaan Discuse?

Pemeriksaan (toggle settings) Cakupan Field hasil utama
check_sentiment Negativitas, toksisitas, kata-kata tidak pantas, ancaman, hinaan dalam teks sentiment.is_toxic, sentiment.toxicity, sentiment.score, sentiment.hit
check_spam Klasifikasi spam pada teks spamfinder.label, spamfinder.confidence, spamfinder.is_spam, spamfinder.hit
check_language Apakah teks sesuai dengan bahasa yang diharapkan language.language, language.confidence, language.hit
check_badwords Kecocokan dengan daftar kata kasar kustom badwords.hit, badwords.matched_words
check_images Konten gambar eksplisit pada URL gambar images.porn, images.sexual, images.neutral, images.hit
check_links Reputasi tautan links.status, links.hit
check_antivirus Malware pada URL dokumen/file antivirus.status, antivirus.hit

Setiap toggle berupa boolean. Ambang batas numerik yang mengubah skor menjadi hit dikonfigurasi per proyek di dasbor, bukan dikirim per permintaan — lihat panduan konfigurasi ambang batas.

Manfaat moderasi AI

Skala

AI memproses volume konten yang tidak dapat ditangani oleh tim manusia. Satu panggilan API mengembalikan hasil dalam hitungan milidetik, sehingga moderasi dapat mengimbangi laju kiriman alih-alih tertinggal dalam antrean peninjauan. Padukan pemeriksaan otomatis dengan antrean manusia untuk kasus-kasus yang berada di area abu-abu (dibahas di bawah).

Kecepatan

Pemeriksaan real-time memungkinkan Anda menyaring konten sebelum dipublikasikan:

// Pre-moderation: Check content before publishing
async function publishPost(content) {
  const moderation = await checkContent(content);

  if (moderation.has_violations) {
    return { published: false, reason: moderation.message };
  }

  // Content passes moderation
  return await saveAndPublish(content);
}

Konsistensi

AI menerapkan aturan yang sama secara seragam di seluruh konten, tanpa kelelahan dan tanpa perbedaan antarpeninjau. Keputusan dapat direproduksi: input yang sama dengan ambang batas proyek yang sama akan menghasilkan flag hit yang sama, sehingga penegakan aturan dapat diaudit.

Arsitektur moderasi

Alur pra-moderasi

User Submits → AI Check → Decision
                 ↓
    ┌───────────┼───────────┐
    ↓           ↓           ↓
  Allow      Review       Block
    ↓           ↓           ↓
 Publish   Human Queue   Reject

Alur pasca-moderasi

User Submits → Publish → AI Check → Action
                           ↓
              ┌────────────┼────────────┐
              ↓            ↓            ↓
            Safe       Borderline    Violation
              ↓            ↓            ↓
           Keep       Flag/Review    Remove

Pendekatan hybrid (direkomendasikan)

Respons Discuse menetapkan has_violations begitu pemeriksaan yang diaktifkan melewati ambang batas yang dikonfigurasi, dan menampilkan skor per kategori yang mendasarinya sehingga Anda dapat menambahkan rentang keyakinan Anda sendiri di atasnya:

async function moderateContent(content) {
  const result = await checkContent(content);

  // Build a confidence figure from the scores you care about.
  // e.g. the toxicity score and the spam classifier confidence.
  const confidence = Math.max(
    result.results?.sentiment?.toxicity ?? 0,
    result.results?.spamfinder?.confidence ?? 0,
    result.results?.images?.porn ?? 0
  );

  // High confidence: automate.
  if (confidence > 0.95) {
    return result.has_violations
      ? { action: 'auto_remove', reason: result.message }
      : { action: 'auto_approve' };
  }

  // Medium confidence: route to a human.
  if (confidence > 0.5) {
    await addToReviewQueue(content, result);
    return { action: 'pending_review' };
  }

  // Low confidence: approve, keep watching.
  return { action: 'approve_with_monitoring' };
}

Menerapkan moderasi AI

Langkah 1: Tentukan kebijakan Anda

Tentukan konten apa yang dapat diterima dan bagaimana tindakan untuk setiap kategori sebelum Anda memanggil API. Di Discuse, batas numerik untuk setiap kategori berada di pengaturan proyek Anda (dashboard), sehingga kebijakan aplikasi Anda memetakan hasil API ke sebuah tindakan, bukan menentukan ulang ambangnya:

const MODERATION_POLICY = {
  // What to do when a given Discuse check reports a hit.
  // Thresholds themselves are configured per project in the dashboard.
  actions: {
    sentiment: 'block',   // toxic / threatening text
    spam: 'block',
    badwords: 'flag',
    images: 'block',      // explicit imagery
    links: 'flag'
  }
};

Langkah 2: Integrasikan API

Kirimkan konten dan pemeriksaan yang ingin Anda aktifkan untuk permintaan ini. Setiap toggle check_* adalah boolean opsional yang menimpa default proyek untuk panggilan ini:

async function checkContent(content) {
  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({
      content: {
        text: content.text,
        image_urls: content.images
      },
      settings: {
        check_sentiment: true,
        check_spam: true,
        check_images: true
      }
    })
  });

  if (!response.ok) {
    throw new Error(`Discuse API returned ${response.status}`);
  }
  return response.json();
}

Langkah 3: Terapkan keputusan

Petakan setiap pemeriksaan yang melaporkan hit ke tindakan yang telah Anda tentukan:

function applyModerationDecision(result) {
  const r = result.results || {};

  if (r.sentiment?.hit) return { action: MODERATION_POLICY.actions.sentiment, category: 'sentiment' };
  if (r.spamfinder?.hit) return { action: MODERATION_POLICY.actions.spam, category: 'spam' };
  if (r.images?.hit)    return { action: MODERATION_POLICY.actions.images, category: 'images' };
  if (r.badwords?.hit)  return { action: MODERATION_POLICY.actions.badwords, category: 'badwords' };
  if (r.links?.hit)     return { action: MODERATION_POLICY.actions.links, category: 'links' };

  return { action: 'allow' };
}

Langkah 4: Tangani kasus-kasus khusus

async function handleModerationResult(content, result) {
  switch (result.action) {
    case 'block':
      await notifyUser(content.author, 'content_blocked', result);
      await logModeration(content, result);
      return false;

    case 'flag':
      await addToReviewQueue(content, result);
      await publishWithWarning(content);
      return true;

    case 'allow':
      await publish(content);
      return true;

    default:
      // Unknown action - fail safe by blocking
      await logError('unknown_moderation_action', result);
      return false;
  }
}

Praktik terbaik

Mulai secara konservatif, lalu sesuaikan seiring waktu

Mulailah dengan ambang batas proyek yang lebih ketat, lalu longgarkan setelah Anda mengukur positif palsu. Di Discuse, ambang batas ini merupakan pengaturan proyek, jadi penyesuaian dilakukan di dashboard (atau melalui API pembaruan pengaturan), bukan di setiap permintaan. Lihat panduan konfigurasi ambang batas untuk alur kerjanya.

Pertahankan antrean peninjauan manusia

AI sebaiknya melengkapi, bukan menggantikan, penilaian manusia untuk kasus-kasus tepi:

async function processReviewQueue() {
  const items = await getReviewQueue();

  for (const item of items) {
    // Present to human reviewer with AI context
    const reviewUI = {
      content: item.content,
      ai_scores: item.moderation_result,
      similar_decisions: await getSimilarPreviousDecisions(item)
    };

    // Human makes final decision
    const decision = await presentToReviewer(reviewUI);

    // Log for model improvement
    await logHumanDecision(item, decision);
  }
}

Pantau dan tingkatkan

Lacak metrik utama untuk meningkatkan sistem moderasi Anda:

const METRICS = {
  // Accuracy metrics
  false_positive_rate: 'Content incorrectly blocked',
  false_negative_rate: 'Harmful content missed',

  // Operational metrics
  average_response_time: 'API latency',
  review_queue_depth: 'Human review backlog',

  // User impact
  appeal_rate: 'Users appealing decisions',
  appeal_success_rate: 'Appeals overturned'
};

Tangani banding dengan baik

Saat pengguna mengajukan banding, arahkan item tersebut ke peninjau manusia alih-alih memutuskannya ulang secara otomatis. Berikan skor Discuse asli dan riwayat pengguna kepada peninjau sebagai konteks:

async function handleAppeal(contentId, userId) {
  const original = await getContentWithModeration(contentId);

  await addToReviewQueue(contentId, {
    type: 'appeal',
    original_decision: original.moderation, // Discuse `results` saved at decision time
    author_history: await getAuthorHistory(userId)
  });

  return { status: 'pending', message: 'Under review' };
}

API itu sendiri tidak memiliki parameter "context" atau "author history" per permintaan — konteks adalah sesuatu yang Anda terapkan di sisi Anda saat memilih ambang batas dan mengarahkan untuk peninjauan.

Kesalahan umum

Terlalu bergantung pada AI

Mengotomatiskan setiap keputusan berarti mengotomatiskan setiap kesalahan. Tetap libatkan manusia untuk:

  • Keputusan kontekstual yang kompleks
  • Konten berisiko tinggi (hukum, keselamatan)
  • Banding dan kasus khusus

Mengabaikan konteks

Kata-kata yang sama bisa berbahaya atau dapat diterima, tergantung konteksnya:

"I'm going to kill it at this interview!" // Positive
"I'm going to kill you"                    // Threat

Discuse menilai setiap pesan secara terpisah; Discuse tidak memiliki parameter "konteks" pada tingkat permintaan. Terapkan konteks di sisi Anda: pilih ambang batas proyek yang lebih ketat atau lebih longgar untuk tiap area (postingan publik vs. pesan langsung), dan arahkan hit yang berada di batas abu-abu ke peninjauan manusia.

Sekali atur lalu ditinggal

Moderasi konten memerlukan penyetelan berkelanjutan:

  • Pantau tingkat positif palsu/negatif palsu
  • Perbarui ambang batas berdasarkan data
  • Tinjau pola konten baru
  • Latih ulang atau perbarui model

Penegakan yang tidak konsisten

Terapkan kebijakan berdasarkan aturan, bukan berdasarkan siapa yang mempostingnya. Tentukan ambang batas dari tingkat kepercayaan yang terdokumentasi, bukan dari pengecualian ad hoc:

// Avoid: per-person exceptions
if (user.isInfluencer) { /* lenient */ }

// Prefer: thresholds keyed to a documented trust level,
// configured the same way for everyone in that level.
const action = MODERATION_POLICY.actions[category];

Langkah berikutnya

Ditulis oleh Tim Discuse · Terakhir diperbarui June 2026

Artikel Terkait

Mengonfigurasi Ambang Deteksi

Seimbangkan positif palsu dan negatif palsu untuk kasus penggunaan Anda

Menskalakan Moderasi Konten

Pola arsitektur untuk moderasi konten bervolume tinggi