Yetişkin Sohbet Botu Ürününü Sorumlu Şekilde Yönetmek: Geliştirici Kontrol Listesi
Bir yetişkin sohbet botu gerçek bir üründür ve gerçek ürünler sorumluluklar taşır. API, yasal yetişkin içeriği reddetmeyen bir model sağlar; bu, yaş kontrollerinin, ev kurallarının, şikayetlerin ve istismar kontrollerinin modelde değil, uygulamanızda olması gerektiği anlamına gelir. Bu kontrol listesi, her katmanı çalışan kodlarla ele alır, böylece güvenle lansman yapabilirsiniz.
Güncelleme:
Temel noktalar
- Platform yalnızca yetişkinler içindir; yaşınızı kapıda doğrulayın ve kontrolü sunucu tarafında tutun.
- Kendi içerik politikanızı ve bir raporlama yolunu yazın, çünkü modelin açıklığı kurallarınızı yerine getirmez.
- Reşit olmayanlarla ilgili cinsel içerik her zaman 403 ile engellenir; bunun için açık ve sakin bir UX tasarlayın.
- Kullanım başına limit uygulayın ve API anahtarını sunucunuzda tutun; tek bir anahtar tüm trafiğiniz tarafından paylaşılır.
Sorumluluklar kimde
Yığını iki katman olarak düşünün. API, 18 yaş ve üzeri kullanıcılar için yasal yetişkin içeriği, kurgu ve tartışmalı konuları reddetmeden sunar. Modelin etrafındaki her şey, ona erişebilen kişiler, kabul ettikleri kurallar ve bir şeyler ters gittiğinde neler olduğu size aittir. Bu ayrım özgürleştiricidir, ancak ancak kendi kısmınızı ciddiye alırsanız.
Duvarınızda bulundurmak için kısa bir sorumluluk tablosu burada.
| Endişe | Platform | Uygulamanız |
|---|---|---|
| Reşit olmayanlarla ilgili cinsel içerik | Her zaman engellenir (403) | Açıklayın, sahneyi sonlandırın, çözüm yollarını önleyin |
| Kullanıcılarınızın yaşı | Şartlara göre yalnızca yetişkinler | Girişte erişimi kontrol edin ve doğrulayın |
| Kanun ötesindeki ev kuralları | Uygulanmadı | Yazın, yayınlayın ve uygulayın |
| Kullanıcı başına istismar | Anahtar başına dakikada 300 istek | Kullanıcı başına ve günlük limitler |
| Gizli anahtar | Düzenler | Sunucunuzda tutun |
Bu bir mühendislik rehberidir, hukuki tavsiye değildir; kurallar yere göre değişir, bu nedenle kullanıcılarınızın yaşadığı yerdeki gereksinimleri kontrol edin.
Gerçekten kapı açan yaş doğrulaması
«18 yaşındayım» butonu içeren bir banner en az düzeydir ve azmi yüksek bir reşit olmayan bunu tıklayabilir. Yine de önemlidir, çünkü onaylı bir beyanı kaydeder ve politikanızı dürüst tutar. Anahtar, bunu nerede uyguladığınızdadır. Kontrol yalnızca tarayıcıdaki sohbeti gizlerse, herkes uç noktanıza doğrudan çağrı yapabilir. İmzalı bir belirteç oluşturulana kadar sunucunun konuşmayı reddetmesini sağlayın.
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();
}Her sohbet rotasının önüne requireAdult ekleyin. Piyasanız veya risk seviyeniz üçüncü taraf yaş doğrulaması gibi daha güçlü doğrulama gerektiriyorsa ekleyin ve belirteci yeniden istem yapmanızı sağlayacak kadar kısa ömürlü tutun. Pazarlamada öğrencileri veya okulları hedef almayın ve erişim kısıtlamasını önizlemeler ve örnek konuşmalar dahil olmak üzere herhangi bir yetişkin içerik gösterilmeden önce yerleştirin.
Kendi içerik politikanızı yazmak
Model yasal yetişkin materyali reddetmez, bu nedenle ürününüzün neye izin vereceğine siz karar verirsiniz. Tek sayfalık bir politika yeterlidir. Hoş karşılananları, yasal olsa bile topluluğunuzda sınırlı olanları (örneğin gerçek insanlara taciz veya doxxing), kullanıcıların sorunları nasıl bildirebileceğini ve yaptığınız eylemleri (uyarılar, geçici susturmalar, yasaklar) kapsayın.
- Kullanıcıların kayıt olduğu yerde yayınlayın, anlaşılır bir dilde.
- Sistem isteminizde yansıtın. "Tüm karakterler yetişkindir; sahne rızasız hale geldiğinde veya gerçek, adlandırılmış kişilerle ilgili olduğunda sonlandırın" gibi bir satır, botu kurallarınızla hizalı tutar.
- Uygulamayı sıkıcı kılın. Eşik değerlerini önceden belirleyin, böylece moderatörler yerine göre davranmaz.
- Politikayı gözden geçirin ürününüz geliştiğinde her çeyrek.
Kullanıcıların bulabileceği bir raporlama yolu
Her mesaja küçük bir rapor kontrolü verin ve oturum açma zahmeti olmadan çalışmasını sağlayın. Birisi bir yanıtı rapor ettiğinde, harekete geçmek için ihtiyacınız olan minimum veriyi yakalayın: kullanıcı kimliği, mesaj kimliği, kısa bir neden ve zaman damgası. Moderatörlerinizin izlediği bir kuyruğa yönlendirin.
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 });
});Sözlerinizi dar tutun. Kullanıcılara bir raporun tam olarak ne tetikleyeceğini söyleyin ve yalnızca kendi politikanızın ve geçerli kuralların gerektirdiği kadar veri saklayın. Raporları ne kadar süreyle sakladığınızı gözden geçirin ve bir programa göre silin. Her raporu, tek satırlık bir teşekkür bile olsa, raporu gönderen kişiye kabul edin, çünkü kullanıcılar hiçbir şey olmuyormuş gibi görünürse rapor vermeyi bırakır. Moderatörlerinizin öğeleri ne kadar hızlı kapattığını izleyin ve gerçekten karşılayabileceğiniz bir hedef belirleyin.
403 reşit olmayanlar engeli için tasarım
Reşit olmayanlarla ilgili cinsel içerik her zaman engellenir, kurgu ve rol yapmada da, API 403 yanıtı ve content_blocked kodu döndürür. Tekrar denemeyin ve kullanıcı adına yeniden ifade etmeye çalışmayın. Bunun yerine, bunun açık bir tasarıma layık bir ürün anı olduğunu düşünün.
- Sunucuda çevirin arayüzünüzün bildiği bir duruma, böylece ham kaynak metan ekranı asla görmez.
- Ne olduğunu söyleyin tek bir sakin cümlede ve kuralı adlandırın.
- Sahneyi sonlandırın veya sıfırlayın. "Yine de devam et" seçeneği, amaca aykırıdır.
- Olayı loglayın kullanıcı kimliği ile, böylece tekrarlayan denemeler kendi yaptırım mekanizmanızı tetikleyebilir.
- Niyeti tahmin etmeyin. Bazı engeller belirsiz ifadelerden kaynaklanır; nötr mesaj her iki durumu da karşılar.
// 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;
}
Kullanıcı başına suistimal ve hız kontrolleri
Tek API anahtarınız toplamda dakikada 300 istek için izin verir; bu, tüm kullanıcılar arasında paylaşılır. Bir otomasyonlu hesap herkesi aç bırakabilir, bu nedenle adil kullanım limitlerini bu tavanın çok altında kendiniz uygulayın. Örnek, her kullanıcıyı dakikada 12 mesaja ve son akış parçasındaki usage değerinden ölçülen günlük token bütçesine kısıtlar.
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);
}Üretim ortamında sayaçları işlem belleği yerine paylaşılan bir depoda saklayın; böylece limitler yeniden başlatmalardan sonra da geçerliliğini korur ve birden fazla sunucu arasında çalışır. En kötü durumu sınırlamak için her istekte max_tokens ekleyin ve kendi bakiyenizde 402 durum koduna dikkat edin. Gerçek trafik başlamadan önce bu kontrolleri test etmenin güzel bir yolu, 7 gün için $0.50 ücretsiz deneme kredisi almaktır.
Anahtarı sunucuda tutun
Anahtarı ön uç paketlerinde, mobil uygulamalarda veya genel depolarda dağıtmayın. Onu bir ortam değişkeni olarak veya bir gizli yönetici içinde saklayın; yalnızca arka ucunuzda yükleyin ve günlükler ile hata raporlarından hariç tutun. Sızma şüphesi varsa hesabınızdan anahtarı yeniden oluşturun; eski anahtar hemen geçersiz olur, bu nedenle bir dağıtım hazırlayın. Hesap başına bir anahtar olduğunu unutmayın; bu da temiz bir proxy katmanının değerini daha da artırır. web sohbet öğreticisi bu deseni uçtan uca gösterir ve dokümantasyon, sarmalayıcınızın eşlemesi gereken hata kodlarını listeler.
Yayından önce kontrol listesi
Kapıları açmadan bir gün önce bu listeyi gözden geçirin. Her madde dakikalar sürer ve kullanıcılar geldikten sonra düzeltmek zahmetli olan bir sorun sınıfını önler.
- Kapıyı kırmaya çalışın. Sohbet rotanıza curl ile ve çerez olmadan çağrı yapın. Yanıt 403 ile
age_requiredolmalı, model yanıtı asla verilmemelidir. - Her durumu tetikleyin. Üst uç noktasını sırasıyla 402, 403, 429 ve 503 döndürecek şekilde taklit edin ve her birinin doğru banner'ı gösterdiğini ve ham hata metrinin sızmadığını doğrulayın.
- Kendi politikalarınızı sesli okuyun. Bir moderatör bir dakikada bir durumu bu politika ile çözemiyorsa, ifadeyi netleştirin.
- Raporlama düğmesini bir telefon ekranından test edin. Ulaşılması zor bir kontrol, raporlama yolu olarak sayılmaz.
- Deponuzda anahtarı arayın. Ön uç klasörlerinde, derleme çıktılarında, örnek yapılandırmalarda ve commit geçmişinde arayın. Herhangi bir genel yerde bulursanız anahtarı yeniden oluşturun.
- Uyarıları ayarlayın. Bir 402 durumunda, tek bir kullanıcıdan gelen 403 engellerinde bir artışta ve günlük token kullanımında bir sıçramada kendinize sayfa atın.
- Duraklatma anahtarını hazırlayın. Sohbeti zarifçe kapatan tek bir bayrak, bir olay sırasında paha biçilemezdir.
Güvenlik asla bitmez ve liste de öyledir; bir olay size yeni bir şey öğrettiğinde her seferinde öğeler ekleyin ve bunları ekibinize katılan herkesle paylaşın. Kendi arayüzünüzde görüntü yükleme, grup odaları veya genel karakter paylaşımı gibi özellikler eklediğinizde listeyi gözden geçirin, çünkü her biri istismar için yeni yollar açar. Karakterlerin kendilerini şekillendirmek için persona tasarım rehberi'ni okuyun ve ekibiniz büyüdükçe entegrasyon notlarınızın dokümantasyon kısmını elinizin altında tutun.
Sorular ve cevaplar
Yaş doğrulaması için bir onay kutusu yeterli mi?
Bu bir minimumdur ve bir beyanı kaydeder, ancak aşmak kolaydır. Bunu sunucuda uygulayın ve riskiniz veya yerel kurallarınız gerektirdiğinde daha güçlü doğrulama ekleyin.
403 content_blocked durumunda uygulamam ne yapmalı?
Yeniden denemeyin. Bunu sakin bir uygulama içi mesaja çevirin, sahneyi sonlandırın veya sıfırlayın ve olayı kendi denetiminiz için günlüğe kaydedin.
Kullanıcıların API anahtarımın kapasitesini adil şekilde paylaşmasına izin verebilir miyim?
Evet, sunucunuzda kullanıcı başına hız ve günlük token limitleri ekleyerek. Anahtarın kendisi toplamda dakikada 300 istekle sınırlıdır.
Model ev kurallarımı uyguluyor mu?
Hayır. Yasal yetişkin içeriği reddetmez, bu yüzden bu işi politikanız, sistem isteminiz ve denetim akışınız yapmalıdır.
Anahtarınız tek bir formun uzağında
Bir hesap oluşturun, anahtarı kopyalayın, temel URL'yi değiştirin. Kurulumun tamamı budur.