ID ▾
Uncensored Chatbot APIAkses API langsung ke satu LLM tanpa sensorDapatkan kunci API

Uncensored Chatbot APIKeamanan

Menjalankan Produk Chatbot Dewasa Secara Bertanggung Jawab: Daftar Periksa Pembangun

Chatbot dewasa adalah produk nyata, dan produk nyata membawa tanggung jawab. API memberikan Anda model yang tidak menolak konten dewasa yang sah, yang berarti aplikasi Anda, bukan model, adalah tempat pemeriksaan usia, aturan rumah, pelaporan, dan kontrol penyalahgunaan berada. Daftar periksa ini menelusuri setiap lapisan dengan kode yang berfungsi, sehingga Anda dapat meluncurkan dengan percaya diri.

Diperbarui

Poin utama

  • Platform ini hanya untuk dewasa; verifikasi usia di pintu masuk Anda dan pertahankan pemeriksaan di sisi server.
  • Tulis kebijakan konten Anda sendiri dan jalur pelaporan, karena keterbukaan model tidak menggantikan aturan Anda.
  • Konten seksual yang melibatkan anak di bawah umur selalu diblokir dengan 403; rancang UX yang jelas dan tenang untuk hal ini.
  • Batasi penggunaan per pengguna dan simpan kunci API di server Anda; satu kunci dibagikan untuk semua lalu lintas Anda.

Siapa bertanggung jawab atas apa

Pikirkan tumpukan dalam dua lapisan. API melayani konten dewasa yang sah, fiksi, dan topik kontroversial tanpa penolakan, untuk pengguna berusia 18 tahun ke atas. Segala sesuatu di sekitar model, orang yang dapat mengaksesnya, aturan yang mereka setujui, dan apa yang terjadi ketika terjadi kesalahan, adalah milik Anda. Pemisahan ini membebaskan, tetapi hanya jika Anda mengambil bagian Anda dengan serius.

Berikut adalah tabel tanggung jawab singkat untuk disimpan di dinding.

PerhatianPlatformAplikasi Anda
Konten seksual yang melibatkan anak di bawah umurSelalu diblokir (403)Jelaskan, akhiri adegan, cegah jalan tikus
Usia pengguna AndaHanya untuk dewasa berdasarkan ketentuanPintu dan verifikasi di pintu masuk Anda
Aturan rumah di luar hukumTidak diterapkanTulis, terbitkan, dan tegakkan
Penyalahgunaan per pengguna300 permintaan per menit per kunciBatas per pengguna dan per hari
Kunci rahasiaKeluarkanSimpan di server Anda

Ini adalah panduan teknik, bukan nasihat hukum; aturan berbeda di setiap tempat, jadi periksa persyaratan di tempat pengguna Anda tinggal.

Pembatasan usia yang benar-benar membatasi

Banner dengan tombol "Saya berusia 18" adalah minimum, dan seorang remaja yang bertekad dapat mengkliknya. Itu masih penting, karena itu mencatat pernyataan afirmatif dan menjaga kebijakan Anda tetap jujur. Kuncinya adalah di mana Anda menegakkannya. Jika pemeriksaan hanya menyembunyikan chat di browser, siapa saja dapat memanggil endpoint Anda secara langsung. Buat server menolak untuk berbicara sampai ada penanda yang ditandatangani.

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();
}

Pasang requireAdult di depan setiap rute obrolan. Tambahkan verifikasi yang lebih kuat ketika pasar atau tingkat risiko Anda memerlukannya, seperti pemeriksaan usia pihak ketiga, dan biarkan penanda berumur pendek agar Anda dapat memberikan prompt ulang. Jangan menargetkan siswa atau sekolah dalam pemasaran Anda, dan letakkan gerbang sebelum konten dewasa ditampilkan, termasuk pratinjau dan percakapan contoh.

Menulis kebijakan konten Anda sendiri

Model tidak menolak materi dewasa yang sah, sehingga Anda memutuskan apa yang diizinkan produk Anda. Kebijakan satu halaman sudah cukup. Cakup apa yang diterima, apa yang tidak boleh di komunitas Anda meskipun sah (misalnya pelecehan terhadap orang nyata atau doxxing), bagaimana pengguna dapat melaporkan masalah, dan tindakan apa yang Anda ambil: peringatan, pembisuan sementara, pemblokiran.

  1. Terbitkan di tempat pengguna mendaftar, dengan bahasa yang jelas.
  2. Cerminkan dalam prompt sistem Anda. Kalimat seperti "Semua karakter adalah orang dewasa; akhiri adegan apa pun yang menjadi tidak disetujui atau melibatkan orang nyata yang bernama" menjaga bot tetap sesuai dengan aturan Anda.
  3. Jadikan penegakan membosankan. Tentukan ambang batas sebelumnya agar moderator tidak melakukan improvisasi.
  4. Tinjau kebijakan setiap kuartal seiring berkembangnya produk Anda.

Jalur pelaporan yang dapat ditemukan pengguna

Beri setiap pesan kontrol laporan kecil, dan buat berfungsi tanpa detour login. Ketika seseorang melaporkan balasan, tangkap minimum yang Anda butuhkan untuk bertindak: id pengguna, id pesan, alasan singkat, dan stempel waktu. Rutekan ke antrian yang diawasi moderator Anda.

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 });
});

Jaga janji Anda tetap sempit. Beritahu pengguna secara tepat apa yang memicu laporan, dan hanya simpan apa yang diperlukan oleh kebijakan Anda sendiri dan aturan yang berlaku. Tinjau berapa lama Anda menyimpan laporan, dan hapus sesuai jadwal. Akui setiap laporan kepada orang yang mengajukannya, bahkan dengan ucapan terima kasih satu baris, karena pengguna berhenti melaporkan ketika sepertinya tidak ada yang terjadi. Lacak seberapa cepat moderator Anda menutup item, dan tetapkan target yang benar-benar dapat Anda penuhi.

Merancang untuk blokir 403 anak di bawah umur

Konten seksual yang melibatkan anak di bawah umur selalu diblokir, baik dalam fiksi maupun peran, dan API menjawab dengan 403 dan kode content_blocked. Jangan coba lagi dan jangan mencoba mengubah kalimat atas nama pengguna. Sebaliknya, anggap ini sebagai momen produk yang memerlukan desain yang jelas.

  • Terjemahkan di server menjadi keadaan yang diketahui UI Anda, sehingga teks hulu mentah tidak pernah mencapai layar.
  • Sebutkan apa yang terjadi dalam satu kalimat tenang dan sebutkan aturannya.
  • Akhiri atau setel ulang adegan. Menawarkan "lanjutkan saja" menghilangkan tujuan.
  • Log peristiwa dengan id pengguna agar upaya berulang dapat memicu penegakan Anda sendiri.
  • Jangan menebak maksud. Beberapa pemblokiran berasal dari kata-kata yang ambigu; pesan netral berfungsi untuk kedua kasus.
// 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;
}

Kontrol penyalahgunaan dan laju per pengguna

Kunci API tunggal Anda mengizinkan 300 permintaan per menit secara total, dibagikan untuk semua pengguna. Satu akun skrip dapat membuat semua orang lain kelaparan sumber daya, jadi terapkan batas penggunaan wajar sendiri, jauh di bawah batas atas itu. Contoh membatasi setiap pengguna pada 12 pesan per menit dan memberikan anggaran token harian yang diukur dari angka usage di bagian aliran akhir.

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);
}

Untuk produksi, simpan penghitung di penyimpanan bersama alih-alih memori proses sehingga batas bertahan setelah restart dan bekerja di beberapa server. Tambahkan max_tokens yang moderat pada setiap permintaan untuk membatasi kasus terburuk, dan perhatikan 402 pada saldo Anda sendiri. Uji coba gratis $0,50 selama 7 hari adalah cara bagus untuk menguji kontrol ini sebelum lalu lintas nyata tiba.

Simpan kunci di server

Jangan kirim kunci di bundel front-end, aplikasi seluler, atau repositori publik. Simpan sebagai variabel lingkungan atau di manajer rahasia, muat hanya di backend Anda dan kecualikan dari log dan laporan kesalahan. Jika Anda mencurigai paparan, regenerasi dari akun Anda; kunci lama berhenti berfungsi segera, jadi siapkan deployment. Ingat ada satu kunci per akun, yang membuat lapisan proxy yang bersih bahkan lebih berharga. Tutorial chat web menunjukkan pola end to end, dan dokumen mencantumkan kode kesalahan yang harus dipetakan oleh wrapper Anda.

Daftar periksa pra-peluncuran

Jalankan daftar ini sehari sebelum Anda membuka pintu. Setiap item membutuhkan waktu beberapa menit dan mencegah kelas masalah yang menyakitkan untuk diperbaiki setelah pengguna tiba.

  1. Cobalah untuk menembus gerbang. Panggil rute chat Anda dengan curl dan tanpa cookie. Itu harus menjawab 403 dengan age_required, bukan balasan model.
  2. Picu setiap keadaan. Stub upstream untuk mengembalikan 402, 403, 429, dan 503 secara bergantian, dan konfirmasi setiap menampilkan banner yang benar dan tidak pernah membocorkan teks kesalahan mentah.
  3. Baca kebijakan Anda sendiri dengan keras. Jika moderator tidak dapat memutuskan kasus dari itu dalam satu menit, ketatkan kata-katanya.
  4. Uji tombol laporan dari layar ponsel. Kontrol yang sulit dijangkau tidak dihitung sebagai jalur pelaporan.
  5. Cari kunci di repositori Anda. Lihat di folder front-end, output build, konfigurasi contoh, dan riwayat commit. Regenerasi jika Anda menemukannya di mana saja secara publik.
  6. Setel peringatan. Hubungi diri Anda sendiri pada 402, lonjakan pemblokiran 403 dari satu pengguna, dan lonjakan penggunaan token harian.
  7. Siapkan tombol jeda. Satu flag yang mematikan chat dengan lancar sangat berharga selama insiden.

Keamanan tidak pernah selesai, dan begitu pula daftarnya; tambahkan item setiap kali insiden mengajarkan Anda sesuatu yang baru, dan bagikan dengan siapa pun yang bergabung dengan tim Anda berikutnya. Tinjau kembali daftar ketika Anda menambahkan fitur seperti unggahan gambar di UI Anda sendiri, ruang grup, atau berbagi karakter publik, karena masing-masing membuka jalur baru untuk penyalahgunaan. Untuk bantuan membentuk karakter itu sendiri, baca panduan desain persona , dan simpan dasar-dasar catatan integrasi Anda di dokumen agar mudah diakses saat tim Anda berkembang.

Tanya jawab

Apakah kotak centang cukup untuk verifikasi usia?

Ini adalah minimum dan mencatat pernyataan, tetapi mudah untuk dilewati. Terapkan di server dan tambahkan verifikasi yang lebih kuat di mana risiko atau aturan lokal Anda memerlukannya.

Apa yang harus dilakukan aplikasi saya pada 403 content_blocked?

Jangan coba lagi. Terjemahkan menjadi pesan dalam aplikasi yang tenang, akhiri atau setel ulang adegan, dan log peristiwa untuk penegakan Anda sendiri.

Dapatkah saya membiarkan pengguna berbagi kapasitas kunci API saya secara adil?

Ya, dengan menambahkan batas laju dan token harian per pengguna di server Anda. Kuncinya sendiri dibatasi hingga 300 permintaan per menit secara total.

Apakah model menegakkan aturan rumah saya?

Tidak. Itu tidak menolak konten dewasa yang sah, sehingga kebijakan, prompt sistem dan aliran moderasi Anda harus melakukan pekerjaan itu.

Kunci Anda hanya selangkah lagi dari satu formulir

Buat akun, salin kunci, ubah URL dasar. Itu saja pengaturannya.

Dapatkan kunci APIBaca dokumentasi