AR ▾
Uncensored Chatbot APIوصول مباشر إلى API لنموذج LLM واحد بدون رقابةاحصل على مفتاح API

Uncensored Chatbot APIالسلامة

إدارة منتج روبوت محادثة للبالغين بمسؤولية: قائمة مراجعة للمطوّر

روبوت الدردشة للبالغين هو منتج حقيقي، والمنتجات الحقيقية تتحمل مسؤوليات. تمنحك API نموذجاً لا يرفض المحتوى البالغ القانوني، مما يعني أن تطبيقك هو المكان الذي توجد فيه فحوصات العمر، والقواعد المؤسسية، والإبلاغ، وضوابط إساءة الاستخدام، وليس النموذج. تستعرض هذه القائمة كل طبقة مع أكواد قابلة للتشغيل، لتمكينك من الإطلاق بثقة.

تم التحديث في

النقاط الرئيسية

  • المنصة مخصصة للبالغين فقط؛ تحقق من العمر عند مدخلك واحتفظ بالفحص على جانب الخادم.
  • اكتب سياسة محتوى خاصة بك ومساراً للإبلاغ، لأن انفتاح النموذج لا يحل محل قواعدها.
  • المحتوى الجنسي الذي يتضمن قُصّر يتم حظره دائماً برمز 403؛ صمّم واجهة مستخدم واضحة وهادئة لذلك.
  • حدّ الاستخدام لكل مستخدم واحتفظ بمفتاح API على خادمك؛ مفتاح واحد يشاركه جميع مستخدميك.

من المسؤول عن ماذا

فكر في البنية على طبقتين. تقدم الـ API محتوى بالغًا قانونيًا، ورواية، ومواضيع جدلية دون رفض، للمستخدمين الذين تبلغ أعمارهم 18 عامًا فأكثر. كل شيء حول النموذج، والأشخاص الذين يمكنهم الوصول إليه، والقواعد التي يوافقون عليها، وما يحدث عند حدوث خطأ، هو ملكك. هذا الفصل مُحرِّر، ولكن فقط إذا أخذت حصتك على محمل الجد.

إليك جدول مسؤوليات قصير لتثبيته على الحائط.

الاهتمامالمنصةتطبيقك
المحتوى الجنسي الذي يتضمن قُصّريتم حظره دائماً (403)اشرح الأمر، أنهِ المشهد، وامنع طرق الالتفاف
عمر مستخدميكللبالغين فقط بموجب الشروطحدد العمر وتحقق عند مدخلك
القواعد المؤسسية بما يتجاوز القانونغير مطبقةاكتبها، انشرها، ونفّذها
إساءة الاستخدام لكل مستخدم300 طلب في الدقيقة لكل مفتاححدود لكل مستخدم ويومياً
المفتاح السرييصدرهاحتفظ به على خادمك

هذا توجيه هندسي وليس نصيحة قانونية؛ تختلف القواعد حسب المكان، لذا تحقق من المتطلبات في المناطق التي يعيش فيها مستخدموك.

تحديد العمر الذي يحجب فعلاً

شريط إعلاني يحتوي على زر "أنا بالغ (18 عامًا)

import crypto from "node:crypto";

// Minimal 18+ gate: the user must confirm before the chat routes work.
// Replace the confirmation with a real verification step when your market requires it.
const SECRET = process.env.GATE_SECRET;   // random string kept on the server

function sign(value) {
  return crypto.createHmac("sha256", SECRET).update(value).digest("hex");
}

export function issueAdultCookie(res, userId) {
  const stamp = String(Date.now());
  const payload = `${userId}.${stamp}`;
  res.cookie("adult_ok", `${payload}.${sign(payload)}`, {
    httpOnly: true, sameSite: "strict", secure: true, maxAge: 30 * 24 * 3600 * 1000,
  });
}

export function requireAdult(req, res, next) {
  const raw = req.cookies?.adult_ok || "";
  const [userId, stamp, sig] = raw.split(".");
  if (!sig || sign(`${userId}.${stamp}`) !== sig) {
    return res.status(403).json({ state: "age_required" });
  }
  req.userId = userId;
  next();
}

أضف requireAdult أمام كل مسار دردشة. أضف تحققاً أقوى عندما يستدعي سوقك أو مستوى المخاطر ذلك، مثل فحص عمر من طرف ثالث، واجعل العلامة قصيرة الأمد بما يكفي لإرسال موجّه جديد. لا تستهدف الطلاب أو المدارس في تسويقك، وضع البوابة قبل عرض أي محتوى للكبار، بما في ذلك المعاينات ومقاطع المحادثات.

كتابة سياسة المحتوى الخاصة بك

النموذج لا يرفض المواد البالغة القانونية، لذا أنت تقرر ما يسمح به منتجك. سياسة من صفحة واحدة كافية. غطِ ما هو مرحب به، وما هو غير مسموح به في مجتمعك حتى لو كان قانونياً (على سبيل المثال، مضايقة الأشخاص الحقيقيين أو كشف الهوية)، وكيف يمكن للمستخدمين الإبلاغ عن المشاكل، وما الإجراءات التي تتخذها: تحذيرات، صمت مؤقت، حظر.

  1. انشرها حيث يسجل المستخدمون حساباتهم، بلغة واضحة.
  2. عكسها في موجّه النظام الخاص بك. سطر مثل "جميع الشخصيات بالغة؛ أنهِ أي مشهد يصبح غير موافق عليه أو يتضمن أشخاصًا حقيقيين ومسمين" يحافظ على توافق البوت مع قواعدك.
  3. اجعل التنفيذ مملاً. حدد العتبات مسبقاً حتى لا يبتكر المشرفون.
  4. راجع السياسة كل ربع سنة مع تطور منتجك.

مسار الإبلاغ الذي يمكن للمستخدمين العثور عليه

أضف لكل رسالة خيار تقرير صغير، واجعله يعمل دون تجاوز تسجيل الدخول. عندما يبلغ شخص عن رد، التقط الحد الأدنى اللازم لاتخاذ إجراء: معرف المستخدم، معرف الرسالة، سبب قصير وطابع زمني. وجهه إلى قائمة انتظار يراقبها المشرفون.

app.post("/api/report", requireAdult, express.json(), (req, res) => {
  const { messageId, reason } = req.body;
  // Store only what you need to act on: who, which message, why, when.
  queueForModerator({ userId: req.userId, messageId, reason: String(reason).slice(0, 500), at: Date.now() });
  res.json({ ok: true });
});

اجعل وعودك ضيقة. أخبر المستخدمين بالضبط ما الذي يفعّله التقرير، واحفظ فقط ما تتطلبه سياستك والقواعد المعمول بها. راجع المدة التي تحتفظ فيها بالتقارير، واحذفها حسب جدول زمني. أقر بكل تقرير للشخص الذي قدمه، حتى برسالة شكر من سطر واحد، لأن المستخدمين يتوقفون عن الإبلاغ عندما يبدو أن الأمر لا يحدث شيء. تتبع سرعة إغلاق المشرفين للعناصر، وحدد هدفاً يمكنك تحقيقه فعلياً.

التصميم لحظر القُصّر برمز 403

المحتوى الجنسي الذي يتضمن قُصّر يتم حظره دائماً، في الخيال والتمثيل أيضاً، وترد API برمز 403 والرمز content_blocked. لا تعيد المحاولة ولا تحاول إعادة الصياغة نيابة عن المستخدم. بدلاً من ذلك، تعامل معه كحدث منتج يستحق تصميماً واضحاً.

  • ترجمها على الخادم إلى حالة يعرفها واجهة المستخدم، بحيث لا يصل نص المصدر الخام إلى الشاشة.
  • قل ما حدث في جملة هادئة واحدة واذكر القاعدة.
  • إنهاء المشهد أو إعادة تعيينه. خيار "المتابعة على أي حال" يُفقد الغرض.
  • تسجيل الحدث باستخدام معرف المستخدم لتمكين تنفيذ إجراءاتك الخاصة عند محاولات التكرار.
  • لا تخمن النية. بعض الحواجز ناتجة عن صياغة غامضة؛ الرسالة المحايدة تعمل في الحالتين.
// server: translate upstream outcomes into states your UI understands
if (upstream.status === 403) {
  return res.status(403).json({
    state: "content_blocked",
    message: "That request breaks our rules, so we can't continue this scene.",
  });
}
if (upstream.status === 402) return res.status(503).json({ state: "paused" });
if (upstream.status === 503) return res.status(503).json({ state: "busy" });
// browser: show a calm, specific message for each state
const MESSAGES = {
  content_blocked: "This scene can't continue. Sexual content involving minors is never allowed. Start a new chat any time.",
  age_required: "Please confirm you are 18 or older to use the chat.",
  slow_down: "You're sending messages quickly. Give it a few seconds.",
  daily_limit: "You've reached today's message allowance. Come back tomorrow.",
  paused: "Chat is briefly unavailable. We're on it.",
  busy: "The service is busy. Try again in a moment.",
};

async function send(messages) {
  const res = await fetch("/api/chat", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ messages }),
  });
  if (!res.ok) {
    const info = await res.json().catch(() => ({}));
    showBanner(MESSAGES[info.state] || "Something went wrong.");
    if (info.state === "content_blocked") endCurrentScene();
    return null;
  }
  return res;
}

ضوابط سوء الاستخدام ومعدلات الطلبات لكل مستخدم

مفتاح الـ API الوحيد الخاص بك يسمح بـ 300 طلب في الدقيقة إجمالاً، يشاركه جميع المستخدمون. يمكن لحساب مُبرمج واحد أن يجوع الجميع الآخرين، لذا نفذ حدود الاستخدام العادل بنفسك، أقل بكثير من ذلك السقف. تحدد المثال كل مستخدم بـ 12 رسالة في الدقيقة وتعطي كل منها ميزانية رموز يومية تُقاس من رقم usage في شريحة البث المتدفق النهائية.

const WINDOW_MS = 60_000;
const PER_USER_PER_MIN = 12;       // your product rule, far below the key's 300
const DAILY_TOKEN_BUDGET = 60_000; // per user, tracked from the usage chunk

const hits = new Map();            // userId -> array of timestamps
const spent = new Map();           // userId -> tokens used today

export function userLimit(req, res, next) {
  const now = Date.now();
  const recent = (hits.get(req.userId) || []).filter((t) => now - t < WINDOW_MS);
  if (recent.length >= PER_USER_PER_MIN) {
    return res.status(429).json({ state: "slow_down" });
  }
  if ((spent.get(req.userId) || 0) >= DAILY_TOKEN_BUDGET) {
    return res.status(429).json({ state: "daily_limit" });
  }
  recent.push(now);
  hits.set(req.userId, recent);
  next();
}

export function recordUsage(userId, totalTokens) {
  spent.set(userId, (spent.get(userId) || 0) + totalTokens);
}

للإنتاج، احفظ العدادات في مخزن مشترك بدلاً من ذاكرة العملية حتى تبقى الحدود سارية بعد إعادة التشغيل وتعمل عبر خوادم متعددة. أضف حداً معتدلاً لـ max_tokens في كل طلب لتحديد الحالة الأسوأ، وراقب حالة 402 في رصيدك. تجربة مجانية بقيمة $0.50 لمدة 7 أيام هي طريقة جيدة لاختبار هذه الضوابط قبل وصول حركة المرور الفعلية.

احتفظ بالمفتاح على الخادم

لا ترسل المفتاح أبدًا في حزم الواجهة الأمامية، أو تطبيقات الهاتف المحمول، أو المستودعات العامة. احفظه كمتغير بيئة أو في مدير الأسرار، حمّله فقط في الواجهة الخلفية الخاصة بك واستثنيه من السجلات وتقارير الأخطاء. إذا اشتبهت في تعرضه، أعد توليده من حسابك؛ سيتوقف المفتاح القديم عن العمل على الفور، لذا جهز نشرًا جاهزًا. تذكر أن هناك مفتاحًا واحدًا لكل حساب، مما يجعل طبقة الوكيل النظيفة أكثر قيمة. يوضح دليل دردشة الويب النمط من البداية إلى النهاية، ويذكر الدليل أكواد الأخطاء التي يجب أن يربطها الغلاف الخاص بك.

قائمة التحقق قبل الإطلاق

راجع هذه القائمة قبل يوم واحد من فتح الأبواب. كل بند يستغرق دقائق ويمنع فئة من المشاكل التي يكون إصلاحها مؤلماً بعد وصول المستخدمين.

  1. حاول كسر البوابة. استدعِ مسار الدردشة الخاص بك باستخدام curl ودون كوكي. يجب أن يجيب بـ 403 مع age_required، وليس رد نموذج.
  2. فعّل كل حالة. قم بتضمين المصدر ليُرجع 402، 403، 429 و503 بالتتابع، وتأكد من أن كل منها يعرض الشعار الصحيح ولا يتسرب منه نص خطأ خام.
  3. اقرأ سياستك بصوت عالٍ. إذا لم يتمكن المشرف من حسم حالة منها في دقيقة، قم بتضييق الصياغة.
  4. اختبر زر الإبلاغ من شاشة الهاتف. التحكم الذي يصعب الوصول إليه لا يُحسب كطريق للإبلاغ.
  5. ابحث في مستودعك عن المفتاح. ابحث في مجلدات الواجهة الأمامية، وإخراج البناء، والإعدادات التجريبية وسجل التغييرات. أعد توليده إذا وجدته في أي مكان عام.
  6. اضبط التنبيهات. اتصل بنفسك عند حدوث 402، عند ارتفاع في حظر 403 من مستخدم واحد، وعند قفزة في استخدام الرموز اليومية.
  7. جهز مفتاح الإيقاف المؤقت. مفتاح واحد يعطل الدردشة بلطف لا يقدر بثمن أثناء الحادث.

الأمان ليس نهائيًا، والقائمة كذلك؛ أضف عناصر في كل مرة يعلمك فيها حادث شيئًا جديدًا، وشاركها مع أي شخص ينضم إلى فريقك التالي. راجع القائمة عندما تضيف ميزات مثل تحميل الصور في واجهة المستخدم الخاصة بك، أو غرف المجموعات أو مشاركة الشخصيات العامة، لأن كل واحدة تفتح مسارات جديدة لسوء الاستخدام. للمساعدة في تشكيل الشخصيات نفسها، اقرأ دليل تصميم الشخصيات، واحتفظ بأساسيات ملاحظات التكامل الخاصة بك في الدليل في متناول اليد مع نمو فريقك.

أسئلة وأجوبة

هل يكفي مربع الاختيار للتحقق من العمر؟

إنه الحد الأدنى ويسجل بياناً، لكنه سهل التجاوز. فرضه على الخادم وأضف تحققاً أقوى حيث يتطلب خطرك أو القوانين المحلية ذلك.

ماذا يجب أن يفعل تطبيقي عند حدوث خطأ 403 content_blocked؟

لا تعيد المحاولة. ترجمه إلى رسالة هادئة داخل التطبيق، أنهِ أو أعد تعيين المشهد، وسجّل الحدث لتنفيذ إجراءاتك الخاصة.

هل يمكنني السماح للمستخدمين بمشاركة سعة مفتاح API الخاص بي بعدالة؟

نعم، بإضافة حدود معدل ورموز يومية لكل مستخدم على خادمك. المفتاح نفسه محدود بـ 300 طلب في الدقيقة إجمالاً.

هل يفرض النموذج قواعد بيتي الخاصة بي؟

لا. إنه لا يرفض المحتوى البالغ القانوني، لذا يجب أن تقوم سياستك، وموجه النظام، وتدفق الرقابة بذلك.

مفتاحك على بُعد نموذج واحد

أنشئ حساباً، انسخ المفتاح، غيّر عنوان URL الأساسي. هذا هو الإعداد الكامل.

احصل على مفتاح APIاقرأ الدليل