راهنمای مدیریت محتوای AI
Discuse متن و تصویر را از نظر احساسات/سمیت، هرزنامه، زبان نامطلوب، واژههای نامناسب، لینکها و تصاویر صریح بررسی میکند و سپس برای هر دسته نتیجهای جداگانه برمیگرداند تا کد شما بتواند محتوا را بهصورت خودکار تأیید، علامتگذاری یا رد کند. شما محتوا را به یک endpoint، POST https://api.discuse.com/api/v2/check، ارسال میکنید و امتیازهای ساختاریافته را دریافت میکنید. این راهنما توضیح میدهد بررسیها چگونه کار میکنند، الگوهای مدیریت محتوا پیرامون آنها چیست، و چطور Discuse API را به فرایند کاری خود متصل کنید.
تعدیل محتوای AI چیست؟
تعدیل محتوای AI از مدلهای یادگیری ماشین برای شناسایی و دستهبندی خودکار محتوای بالقوه آسیبزا استفاده میکند. در حالی که بازبین انسانی هر مورد را جداگانه میخواند، این مدلها محتوا را بهمحض دریافت امتیازدهی میکنند؛ بنابراین ارسالها میتوانند پیش از آنکه به دست کاربران دیگر برسند بررسی شوند.
چگونه کار میکند؟
- ارسال محتوا: متن و/یا URLهای رسانه را به API تعدیل ارسال کنید.
- اجرای بررسیها: API بررسیهای فعالشده را اجرا میکند (احساسات، زبان، هرزنامه، کلمات نامناسب، تصاویر، لینکها، آنتیویروس).
- امتیازدهی به هر دسته: هر بررسی امتیازها و یک پرچم
hitبرمیگرداند که نشان میدهد آیا از آستانهای که پیکربندی کردهاید عبور کرده است یا نه. - تصمیمگیری: برای تأیید، علامتگذاری یا رد کردن،
has_violations(و امتیازهای مربوط به هر بررسی) را بخوانید.
با Discuse، درخواست به این شکل است:
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 }
هر بررسی Discuse چه مواردی را پوشش میدهد؟
بررسی (کلید settings) |
موارد تحت پوشش | فیلدهای کلیدی نتیجه |
|---|---|---|
check_sentiment |
منفیبودن، سمیبودن، ناسزاگویی، تهدیدها و توهینها در متن | sentiment.is_toxic, sentiment.toxicity, sentiment.score, sentiment.hit |
check_spam |
دستهبندی متن بهعنوان هرزنامه | spamfinder.label, spamfinder.confidence, spamfinder.is_spam, spamfinder.hit |
check_language |
اینکه آیا متن با زبان مورد انتظار مطابقت دارد یا نه | language.language, language.confidence, language.hit |
check_badwords |
تطبیق با فهرست سفارشی کلمات نامناسب | badwords.hit, badwords.matched_words |
check_images |
تصاویر صریح در URLهای تصویر | images.porn, images.sexual, images.neutral, images.hit |
check_links |
اعتبار لینک | links.status, links.hit |
check_antivirus |
بدافزار در URLهای سند/فایل | antivirus.status, antivirus.hit |
هر کلید یک مقدار بولی است. آستانههای عددی که یک امتیاز را به hit تبدیل میکنند، برای هر پروژه در داشبورد پیکربندی میشوند و در هر درخواست ارسال نمیشوند — به راهنمای پیکربندی آستانه مراجعه کنید.
مزایای نظارت AI
مقیاسپذیری
AI حجمهایی از محتوا را پردازش میکند که از توان تیمهای انسانی خارج است. یک فراخوانی API نتیجه را در چند میلیثانیه برمیگرداند، بنابراین نظارت همگام با ارسالها پیش میرود و پشت صف بررسی عقب نمیماند. بررسیهای خودکار را برای موارد مرزی با یک صف انسانی ترکیب کنید (در ادامه توضیح داده شده است).
سرعت
بررسیهای بلادرنگ به شما امکان میدهند محتوا را پیش از انتشار غربال کنید:
// 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);
}
یکپارچگی
AI قوانین یکسانی را بهطور یکنواخت روی همه محتواها اعمال میکند؛ بدون خستگی و بدون تفاوت میان بررسیکنندگان. تصمیمها قابل بازتولیدند: ورودی یکسان با آستانههای یکسان پروژه، همان پرچمهای hit را ایجاد میکند و این موضوع اجرای قوانین را قابل ممیزی میسازد.
معماری نظارت
جریان پیشانظارت
User Submits → AI Check → Decision
↓
┌───────────┼───────────┐
↓ ↓ ↓
Allow Review Block
↓ ↓ ↓
Publish Human Queue Reject
جریان پسنظارت
User Submits → Publish → AI Check → Action
↓
┌────────────┼────────────┐
↓ ↓ ↓
Safe Borderline Violation
↓ ↓ ↓
Keep Flag/Review Remove
رویکرد ترکیبی (توصیهشده)
پاسخ Discuse زمانی has_violations را تنظیم میکند که هر بررسی فعالشدهای از آستانهٔ پیکربندیشدهٔ خود عبور کند، و امتیازهای زیربنایی هر دسته را نیز در اختیارتان میگذارد تا بتوانید بازهٔ اطمینان خودتان را روی آن اضافه کنید:
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
گام ۱: سیاست خود را تعریف کنید
پیش از فراخوانی API تصمیم بگیرید چه محتوایی قابلقبول است و برای هر دسته باید چه اقدامی انجام شود. در Discuse، حدّ عددی هر دسته در تنظیمات پروژه شما (داشبورد) قرار دارد؛ بنابراین سیاست برنامه شما نتیجه API را به یک اقدام نگاشت میکند، نه اینکه دوباره آستانه را تعیین کند:
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'
}
};
گام ۲: API را یکپارچه کنید
محتوا و بررسیهایی را که میخواهید برای این درخواست فعال باشند ارسال کنید. هر سوییچ check_* یک مقدار بولی اختیاری است که مقدار پیشفرض پروژه را برای همین فراخوانی بازنویسی میکند:
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();
}
گام ۳: تصمیمها را اعمال کنید
هر بررسیای را که یک hit گزارش میکند، به اقدامی که تعریف کردهاید نگاشت کنید:
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' };
}
گام ۴: موارد خاص را مدیریت کنید
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;
}
}
بهترین روشها
محافظهکارانه شروع کنید و بهمرور تنظیم کنید
کار را با آستانههای سختگیرانهتر برای پروژه شروع کنید و همزمان با اندازهگیری موارد مثبتِ کاذب، آنها را ملایمتر کنید. در Discuse این آستانهها جزو تنظیمات پروژه هستند؛ بنابراین تنظیم و بهینهسازی آنها در داشبورد انجام میشود (یا از طریق settings update API)، نه در هر درخواست جداگانه. برای آشنایی با روند کار، راهنمای پیکربندی آستانهها را ببینید.
صف بازبینی انسانی داشته باشید
AI باید قضاوت انسانی را در موارد مرزی تقویت کند، نه اینکه جایگزین آن شود:
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);
}
}
پایش کنید و بهبود دهید
برای بهبود سیستم نظارت محتوای خود، شاخصهای کلیدی را دنبال کنید:
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'
};
به اعتراضها با دقت رسیدگی کنید
وقتی کاربری اعتراض میکند، بهجای تصمیمگیری دوباره بهصورت خودکار، آن مورد را به بازبین انسانی ارجاع دهید. امتیازهای اولیه Discuse و سابقه کاربر را بهعنوان زمینه در اختیار بازبین قرار دهید:
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 هیچ پارامتر «context» یا «author history» برای هر درخواست ندارد — زمینه چیزی است که شما در سمت خودتان، هنگام انتخاب آستانهها و مسیریابی برای بازبینی، اعمال میکنید.
دامهای رایج
اتکای بیشازحد به AI
خودکارسازی همهٔ تصمیمها یعنی خودکارسازی همهٔ اشتباهها. برای موارد زیر حتماً انسان را در چرخه نگه دارید:
- تصمیمهای پیچیده و وابسته به زمینه
- محتوای حساس و پرریسک (حقوقی، ایمنی)
- اعتراضها و موارد مرزی
نادیده گرفتن زمینه
یک عبارت واحد بسته به زمینه میتواند آسیبزا یا قابلقبول باشد:
"I'm going to kill it at this interview!" // Positive
"I'm going to kill you" // Threat
Discuse هر پیام را بهتنهایی امتیازدهی میکند؛ هیچ پارامتر «زمینه» در سطح درخواست ندارد. زمینه را در سمت خودتان اعمال کنید: برای هر سطح، آستانههای سختگیرانهتر یا آسانگیرانهتر پروژه را انتخاب کنید (پست عمومی در برابر پیام مستقیم)، و hitهای مرزی را برای بازبینی انسانی ارجاع دهید.
تنظیم کن و فراموش کن
مدیریت و پالایش محتوا نیازمند تنظیم و بهینهسازی مداوم است:
- نرخهای مثبت کاذب/منفی کاذب را پایش کنید
- آستانهها را بر اساس دادهها بهروزرسانی کنید
- الگوهای جدید محتوا را بازبینی کنید
- مدلها را دوباره آموزش دهید یا بهروزرسانی کنید
اجرای ناهماهنگ
سیاست را بر اساس قاعده اعمال کنید، نه بر اساس اینکه چه کسی آن را منتشر کرده است. آستانهها را بهجای استثناهای موردی، بر پایهٔ سطح اعتمادی مستند تعیین کنید:
// 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];
گامهای بعدی
- پیکربندی آستانهها - تعدیل محتوای خود را دقیقتر تنظیم کنید
- مقیاسپذیر کردن تعدیل محتوا - حجمهای بالا را مدیریت کنید
- تحلیل متن - نگاهی عمیق به تعدیل متن
- تشخیص NSFW در تصویر - محافظت از محتوای تصویری