AI İçerik Moderasyonu Rehberi
Discuse; metinleri ve görselleri duygu/toksisite, spam, istenmeyen dil, kötü sözler, bağlantılar ve açık içerikli görseller açısından kontrol eder, ardından kodunuzun içeriği otomatik olarak onaylayabilmesi, işaretleyebilmesi veya reddedebilmesi için kategori bazında sonuç döndürür. İçeriği tek bir uç noktaya, POST https://api.discuse.com/api/v2/check, gönderir ve yapılandırılmış puanları geri okursunuz. Bu rehber, kontrollerin nasıl çalıştığını, bunların etrafındaki moderasyon kalıplarını ve Discuse API’yi iş akışınıza nasıl bağlayacağınızı ele alır.
AI içerik moderasyonu nedir?
AI içerik moderasyonu, potansiyel olarak zararlı içerikleri otomatik olarak tespit etmek ve sınıflandırmak için makine öğrenimi modellerini kullanır. Bir insan inceleyici her seferinde tek bir öğeyi okurken, bu modeller içerik gelir gelmez puanlama yapar; böylece gönderiler diğer kullanıcılara ulaşmadan önce kontrol edilebilir.
Nasıl çalışır?
- İçerik gönderin: Metin ve/veya medya URL’lerini moderasyon API’sine gönderin.
- Kontrolleri çalıştırın: API, etkinleştirilmiş kontrolleri çalıştırır (duygu analizi, dil, spam, kötü kelimeler, görseller, bağlantılar, antivirüs).
- Her kategoriyi puanlayın: Her kontrol, yapılandırdığınız eşiğin aşılıp aşılmadığını gösteren puanlar ve bir
hitbayrağı döndürür. - Karar verin: Onaylamak, işaretlemek veya reddetmek için
has_violationsdeğerini (ve kontrol bazındaki puanları) okuyun.
Discuse ile istek şu şekilde görünür:
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 }
Her Discuse kontrolü neleri kapsar?
Kontrol (settings anahtarı) |
Neleri kapsar | Temel sonuç alanları |
|---|---|---|
check_sentiment |
Metindeki olumsuzluk, toksiklik, küfür, tehditler, hakaretler | sentiment.is_toxic, sentiment.toxicity, sentiment.score, sentiment.hit |
check_spam |
Metnin spam olarak sınıflandırılması | spamfinder.label, spamfinder.confidence, spamfinder.is_spam, spamfinder.hit |
check_language |
Metnin beklenen dille eşleşip eşleşmediği | language.language, language.confidence, language.hit |
check_badwords |
Özel kötü kelime listesi eşleşmeleri | badwords.hit, badwords.matched_words |
check_images |
Görsel URL’lerindeki müstehcen görüntüler | images.porn, images.sexual, images.neutral, images.hit |
check_links |
Bağlantı itibarı | links.status, links.hit |
check_antivirus |
Belge/dosya URL’lerindeki kötü amaçlı yazılım | antivirus.status, antivirus.hit |
Her anahtar bir boolean değeridir. Bir puanı hit değerine dönüştüren sayısal eşikler, istek bazında gönderilmez; kontrol panelinde proje bazında yapılandırılır — bkz. eşik yapılandırma kılavuzu.
AI moderasyonunun faydaları
Ölçek
AI, insan ekiplerinin başa çıkamayacağı hacimdeki içerikleri işler. Tek bir API çağrısı milisaniyeler içinde sonuç döndürür; böylece moderasyon, inceleme kuyruğunun gerisinde kalmak yerine gönderim hızına ayak uydurur. Sınırda kalan durumlar için otomatik kontrolleri insan inceleme kuyruğuyla birlikte kullanın (aşağıda ele alınıyor).
Hız
Gerçek zamanlı kontroller, içeriği yayımlanmadan önce taramanızı sağlar:
// 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);
}
Tutarlılık
AI, aynı kuralları tüm içeriklere yorulmadan ve inceleyiciler arasında değişkenlik olmadan, tutarlı şekilde uygular. Kararlar yeniden üretilebilir: aynı proje eşikleriyle aynı girdi, aynı hit işaretlerini üretir; bu da yaptırımların denetlenebilir olmasını sağlar.
Moderasyon mimarisi
Ön moderasyon akışı
User Submits → AI Check → Decision
↓
┌───────────┼───────────┐
↓ ↓ ↓
Allow Review Block
↓ ↓ ↓
Publish Human Queue Reject
Son moderasyon akışı
User Submits → Publish → AI Check → Action
↓
┌────────────┼────────────┐
↓ ↓ ↓
Safe Borderline Violation
↓ ↓ ↓
Keep Flag/Review Remove
Hibrit yaklaşım (önerilir)
Discuse yanıtı, etkinleştirilmiş herhangi bir kontrol yapılandırılmış eşiğini aştığında has_violations değerini ayarlar ve bunun altında yatan kategori bazlı puanları sunar; böylece bunun üzerine kendi güven aralığınızı ekleyebilirsiniz:
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' };
}
AI moderasyonunu uygulama
1. Adım: Politikanızı tanımlayın
API'yi çağırmadan önce hangi içeriklerin kabul edilebilir olduğuna ve her kategori için nasıl işlem yapılacağına karar verin. Discuse’ta her kategoriye ait sayısal eşik değeri proje ayarlarınızda (kontrol panelinde) bulunur; bu nedenle uygulama politikanız, eşiği yeniden belirlemek yerine bir API sonucunu bir eyleme eşler:
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'
}
};
2. Adım: API’yi entegre edin
Bu istek için içeriği ve etkinleştirmek istediğiniz kontrolleri gönderin. Her check_* anahtarı, bu çağrı için proje varsayılanını geçersiz kılan isteğe bağlı bir boolean değeridir:
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();
}
3. Adım: Kararları uygulayın
hit bildiren her kontrolü tanımladığınız eylemle eşleyin:
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' };
}
4. Adım: Sınır durumları ele alın
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;
}
}
En iyi uygulamalar
Temkinli başlayın, zamanla ayarlayın
Daha katı proje eşikleriyle başlayın ve hatalı pozitifleri ölçtükçe bunları gevşetin. Discuse içinde bu eşikler proje ayarlarıdır; bu nedenle ayarlama her istekte değil, kontrol panelinde (veya ayar güncelleme API üzerinden) yapılır. İş akışı için eşik yapılandırma kılavuzuna bakın.
İnsan inceleme kuyruğunu koruyun
AI, sınır durumlarda insan yargısının yerine geçmemeli, onu desteklemelidir:
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);
}
}
İzleyin ve iyileştirin
Moderasyon sisteminizi iyileştirmek için temel metrikleri takip edin:
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'
};
İtirazları doğru şekilde yönetin
Bir kullanıcı itiraz ettiğinde, öğeyi otomatik olarak yeniden karara bağlamak yerine bir insan inceleyiciye yönlendirin. İnceleyiciye bağlam olarak orijinal Discuse puanlarını ve kullanıcının geçmişini verin:
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’nin kendisinde istek başına "context" veya "author history" parametresi yoktur — bağlam, eşikleri seçerken ve inceleme yönlendirmesi yaparken sizin tarafınızda uyguladığınız bir şeydir.
Yaygın tuzaklar
AI’a aşırı güvenmek
Her kararı otomatikleştirmek, her hatayı da otomatikleştirmek demektir. Şunlar için mutlaka insan denetimini sürecin içinde tutun:
- Karmaşık bağlamsal kararlar
- Yüksek riskli içerikler (hukuk, güvenlik)
- İtirazlar ve uç vakalar
Bağlamı göz ardı etmek
Aynı kelimeler, bağlama göre zararlı da olabilir, kabul edilebilir de:
"I'm going to kill it at this interview!" // Positive
"I'm going to kill you" // Threat
Discuse her mesajı tek başına puanlar; istek düzeyinde bir "context" parametresi yoktur. Bağlamı kendi tarafınızda uygulayın: yüzeye göre (herkese açık gönderi veya doğrudan mesaj) daha sıkı ya da daha esnek proje eşikleri seçin ve sınırda kalan hitleri insan incelemesine yönlendirin.
Kurup unutmak
İçerik moderasyonu sürekli ayar gerektirir:
- Yanlış pozitif/negatif oranlarını izleyin
- Eşikleri verilere göre güncelleyin
- Yeni içerik kalıplarını gözden geçirin
- Modelleri yeniden eğitin veya güncelleyin
Tutarsız yaptırım
Politikayı, paylaşımı kimin yaptığına göre değil, kurala göre uygulayın. Eşikleri geçici istisnalardan değil, belgelenmiş bir güven düzeyinden hareketle belirleyin:
// 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];
Sonraki adımlar
- Eşik Değerlerini Yapılandırma - Moderasyonunuzu ince ayarlayın
- İçerik Moderasyonunu Ölçeklendirme - Yüksek hacimleri yönetin
- Metin Analizi - Metin moderasyonunu derinlemesine inceleyin
- Görsel NSFW Tespiti - Görsel içerik koruması