KO ▾

chatbotnsfw.com개발자를 위한 무검열 LLM API

개발자를 위한 NSFW Chatbot API: 구축 방법

개발자를 위한 NSFW 채팅봇 API는 합법적인 성인 콘텐츠를 거부하지 않는 모델로 구동되는 일반 채팅 엔드포인트입니다. 엔드포인트 구축은 쉽습니다. 페르소나, 메모리, 연령 확인 및 모더레이션은 당신이 구축해야 할 부분입니다.

마지막 업데이트

서버 랙 위의 게이트를 통과하는 빛나는 채팅 풍선이 있는 입체적 스테이지

요약

  1. API는 거절하는 모델을 성인 소설에 응답하는 모델로 대체합니다. 제품 관련 모든 것은 귀하가 관리합니다.
  2. 키는 서버에 보관하고, 기록은 직접 저장하며, 각 턴마다 잘린 컨텍스트 창을 다시 보내세요.
  3. 모든 채팅 호출 전에 성인에 대한 접근을 제한하고 미성년자가 관련된 콘텐츠에 대해 확실한 차단 상태를 유지하세요.
  4. 스트리밍, 429 상태 코드에 대한 재시도 및 사용자별 상한선은 8개의 동시 요청에서 작은 봇을 안정적으로 유지합니다.

API가 제공하는 것과 당신이 여전히 소유하는 것

이 서비스는 호스팅된 OpenAI 호환 텍스트 API입니다. OpenAI SDK를 https://api.chatbotnsfw.com/v1에 연결하고, 모델 ID uncensored를 사용하며 일반 채팅 메시지를 보내면 됩니다. 이 모델은 합법적인 성인 사용 시 콘텐츠 거부 없이 응답하도록 튜닝된 오픈 웨이트 모델입니다. 텍스트 전용이며 이미지, 오디오 또는 비디오는 제공되지 않습니다.

이것이 전체 계약입니다. API는 당신의 사용자가 누구인지, 나이가 몇인지, 플랫폼이 허용하는 바가 무엇인지 알지 못합니다. 또한 호출 간에 어떤 것도 기억하지 않습니다. 모델이 볼 전체 대화 내용을 요청에 포함해야 합니다.

우려 사항누가 처리합니까
콘텐츠 거부 없이 응답 생성API
페르소나, 어조 및 스토리 규칙시스템 프롬프트의 당신
대화 메모리데이터베이스의 당신
연령 확인 및 동의사용자
미성년자가 관련된 콘텐츠 차단당신과 API는 동일한 엄격한 한도를 가집니다.
신고, 정지, 이용약관사용자

채팅 API를 대상으로 빌드한 경험이 없다면 API 문서가 요청 형식을 다룹니다. 기존 NSFW LLM 통합 가이드이 통합 측면을 더 자세히 다룹니다. 이 기사는 그 주변의 제품에 관한 것입니다.

아키텍처: 키를 서버에 보관

프론트엔드는 API 키를 절대 보유해서는 안 됩니다. 브라우저나 앱과 API 사이에 작은 백엔드를 배치하세요. 백엔드는 사용자를 인증하고, 연령 확인을 수행하며, 이력을 로드하고, API를 호출하며, 응답을 저장합니다.

  1. 브라우저가 세션과 함께 사용자의 메시지를 백엔드로 전송합니다.
  2. 백엔드는 사용자가 성인으로 확인되었고 속도 제한 내에 있는지 확인합니다.
  3. 백엔드는 메시지 목록을 구성합니다: 시스템 프롬프트, 메모리, 최근 대화, 새 메시지.
  4. 백엔드는 POST /v1/chat/completions를 호출하고 토큰을 스트리밍으로 반환합니다.
  5. 백엔드는 스트리밍이 완료된 후 새 턴을 저장합니다.

전체 키는 8개의 동시 요청과 분당 300개의 요청을 허용합니다. 이는 취미용 봇에는 충분하고 작은 제품의 시작에는 적절합니다. 단, 백엔드가 한 사용자가 동시에 여러 스트림을 열지 않도록 해야 합니다. 스트리밍된 요청은 스트림이 끝날 때까지 동시 요청 슬롯을 유지하므로, 스트림을 열어둔 채 떠나는 사용자는 여전히 슬롯을 차지합니다.

페르소나를 계약서처럼 작성하세요

시스템 프롬프트가 제품의 대부분을 처리합니다. 좋은 프롬프트는 모델과의 짧은 계약처럼 읽혀야 하며, 형용사의 나열이 아니어야 합니다. 네 가지 사항을 다뤄야 합니다: 캐릭터의 정체, 말투, 이야기의 내용, 그리고 경계선입니다.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.chatbotnsfw.com/v1",
    api_key=os.environ["NSFW_API_KEY"],
)

PERSONA = """You play Mara, a 34-year-old ship's navigator in a slow-burn
space romance. All characters are adults.
Voice: dry, warm, short paragraphs, first person.
Story rules: keep continuity with the notes below; never speak for the user;
stay in character unless the user writes OOC: in brackets.
Hard limits: no sexual content involving anyone under 18, ever. If the user
steers there, refuse in character and change the scene."""

def reply(history, user_text):
    messages = [{"role": "system", "content": PERSONA}]
    messages += history[-24:]
    messages.append({"role": "user", "content": user_text})
    r = client.chat.completions.create(
        model="uncensored",
        messages=messages,
        temperature=0.9,
        top_p=0.95,
    )
    return r.choices[0].message.content

두 가지 세부 사항이 겉보기보다 중요합니다. 프롬프트에 모든 캐릭터가 성인임을 명확한 문구로 명시하세요. 그리고 스토리가 오류 메시지로 끝나기보다는 계속 진행되도록 캐릭터가 경계에 도달했을 때의 행동을 모델에 지시하세요. 더 생동감 있는 문체를 위해 temperature를 높이고, 캐릭터가 설정에서 벗어나면 낮추세요.

출시 전 페르소나를 테스트하세요

모든 편집 후 프롬프트에 동일한 20개의 사용자 메시지를 실행하세요. 어색한 경우를 포함합니다: 봇에게 캐릭터를 유지하지 말라고 요청하는 사용자, 장면 중간에 설정을 변경하는 사용자, 미성년자 규칙을 테스트하는 사용자 등입니다. 출력을 저장하고 읽어보세요. 프롬프트 수정은 한 사례를 수정하는 경우가 종종 다른 사례를 망가뜨립니다.

창 안에 맞는 메모리

컨텍스트 창은 100,000 토큰이며, 프롬프트와 응답을 합산한 것이므로 긴 스토리를 담을 수 있습니다. 더 길다고 항상 더 좋은 것은 아닙니다. 매 턴마다 입력 토큰에 대해 지불하며, 방대한 이력을 가진 모델은 초기 세부 정보를 잃을 수 있습니다.

실용적인 레이아웃에는 세 가지 계층이 있습니다. 시스템 프롬프트는 페르소나를 유지합니다. 짧은 메모 블록은 이름, 관계 상태, 스토리에서 약속된 내용 등 유지되어야 할 사실을 담습니다. 마지막 20~30 턴은 그대로 포함합니다. 이전 턴은 약 20번마다 저비용 호출로 메모 블록으로 요약됩니다.

위 코드는 이미 history[-24:]를 슬라이싱하여 마지막 24개 메시지를 유지합니다. 노트 블록이 있다면 두 번째 시스템 메시지로 추가하세요. 이렇게 하면 비용이 낮게 유지됩니다: 일반적인 턴에서는 몇 천 개의 입력 토큰이 전송되며, 이는 100만 입력 토큰당 $0.15 기준 1센트 미만입니다. 가격 책정 페이지에 숫자가 있으며, 연동에 대한 기사에는 요청 형태가 나와 있습니다.

성인 콘텐츠 제품은 첫 번째 채팅 호출 전에 연령 게이트가 필요합니다. API는 연령을 확인하지 않습니다. 이 책임은 당신에게 있으며, 올바른 방법은 운영 지역과 사용자 거주지에 따라 다릅니다.

  • 18세 이상입니다라고 표시된 체크박스는 고지일 뿐, 검증이 아닙니다. 일부 관할 구역에서는 더 많은 것이 필요합니다.
  • 계정에 대해 서버 측에 결과를 저장하고, 가입 시뿐만 아니라 모든 채팅 요청 시 확인하세요.
  • 가입 전에 랜딩 페이지와 이용약관에서 성인 전용 성격을 명확히 하세요.
  • 모든 페르소나, 프롬프트 및 사용자에게 표시되는 카드에서 캐릭터를 성인 상태로 유지하세요.

자신의 시장을 잘 아는 변호사에게 최소 기준이 무엇인지 문의하십시오. 이 문서에서는 알려드릴 수 없으며, API 제공업체도 이를 결정해 줄 수 없습니다.

당신에게 남는 모더레이션 책임

무검열 모델은 모델이 거부하는 내용을 변경합니다. 당신이 책임지는 바를 변경하지는 않습니다. 처음부터 다음 사항들을 계획하세요:

  • 미성년자에 대한 엄격한 차단. 미성년자가 관련된 성적 콘텐츠는 전면 금지됩니다. 명백한 시도에 대한 자체 입력 검사를 추가하고 트리거되면 세션을 종료하세요.
  • 신고. 사용자에게 대화를 신고할 수 있는 방법을 제공하고 신고 내용을 어떻게 처리할지 결정하세요.
  • 계정 조치. 사용자를 빠르게 정지할 수 있어야 합니다.
  • 데이터. 전사본을 얼마나 오래 보관할지 결정하고 개인정보 보호 페이지에 명시하세요. API 제공자는 학습을 위해 프롬프트를 사용하지 않지만 자체 데이터베이스는 귀하의 책임입니다.
  • 범위. 제품을 합법적인 성인 사용과 픽션으로 제한하세요. 이용약관에 명시하세요.

실패하거나 거부된 요청은 청구되지 않으며, 이는 자체 확인에 의해 차단된 요청도 API에 절대 도달하지 않으므로 비용이 발생하지 않음을 의미합니다.

사용자별 한도 및 비용 제어

제한 없는 오픈 채팅 박스는 한 사용자가 크레딧을 고갈시키도록 초대하는 것입니다. 모든 계정에 일일 토큰 한도를 설정하고 API 호출 전에 확인하세요. 응답은 각 턴이 얼마나 사용되었는지 알려주므로 한도 확인은 하나의 카운터 비용만 듭니다.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.chatbotnsfw.com/v1",
    api_key=os.environ["NSFW_API_KEY"],
)

DAILY_CAP = 400_000   # tokens per user per day
used_today = {}       # user_id -> tokens, keep this in your database

def guarded_reply(user_id, messages):
    if used_today.get(user_id, 0) >= DAILY_CAP:
        return "You have reached today's limit. Come back tomorrow."
    r = client.chat.completions.create(model="uncensored", messages=messages)
    used = r.usage.prompt_tokens + r.usage.completion_tokens
    used_today[user_id] = used_today.get(user_id, 0) + used
    return r.choices[0].message.content

400,000 토큰의 상한선은 추천 값이 아니라 조정해야 할 숫자입니다. 턴당 6,000 토큰의 프롬프트를 사용하면 하루에 약 65턴이 허용됩니다. 사용자의 가치를 산정하고 그에 따라 상한선을 설정하세요. 버그가 밤새 크레딧을 소모하지 않도록 자체 모니터링에서 X-Balance-USD 헤더를 확인하세요.

스테이징용 별도 작은 크레딧 잔액을 유지하세요. 테스트 트래픽과 실제 트래픽은 키를 공유해서는 안 됩니다. 모든 오류에서 재시도하는 테스트 루프는 1시간 동안 실제 사용자 1주일치의 비용보다 더 많이 소모할 수 있기 때문입니다.

스트리밍 및 429 처리

스트리밍 없이 채팅은 느리게 느껴집니다. stream: true를 설정하고 청크를 브라우저로 전달하세요. 스트리밍은 사용량 블록으로 끝나며, 이는 비용 추적용으로 로깅할 수 있습니다.

한도를 초과하면 API는 HTTP 429를 반환합니다. 오류 코드는 분당 요청의 경우 rate_limited이고, 동시에 너무 많은 요청의 경우 concurrency입니다. 일시적인 과부하도 Retry-After: 5와 함께 429를 반환합니다. 해당 헤더를 존중하세요.

import os, time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://api.chatbotnsfw.com/v1",
    api_key=os.environ["NSFW_API_KEY"],
    max_retries=0,
)

def stream_reply(messages):
    for attempt in range(4):
        try:
            stream = client.chat.completions.create(
                model="uncensored",
                messages=messages,
                stream=True,
            )
            for chunk in stream:
                if chunk.choices and chunk.choices[0].delta.content:
                    yield chunk.choices[0].delta.content
            return
        except RateLimitError:
            time.sleep(5)
    yield "The service is busy. Please try again in a moment."

사용자별 잠금 기능을 추가하여 하나의 계정이 동시에 하나의 스트림만 보유하게 하세요. 그러면 동시 요청 8개가 약 8명의 동시 채팅 사용자를 지원하며, 나머지 요청은 큐로 흡수됩니다.

시작하려면 API 키를 얻으세요. 신규 사용자는 키 페이지에서 한 번의 클릭으로 $0.50의 체험 크레딧을 청구할 수 있습니다. 체험 키는 동시 요청 2개와 분당 60개의 요청으로 제한되며, 이는 흐름 테스트에 충분합니다.

자주 묻는 질문

주요 AI 벤더에서 공식 NSFW 채팅봇 API를 제공합니까?

이 서비스는 어떤 모델 벤더의 공식 API도 아닙니다. 이 서비스는 독립적인 제공자가 운영하는 오픈 웨이트 모델 하나를 실행하며, 합법적인 성인 사용을 위해 콘텐츠 거부 없이 응답하도록 조정되었습니다.

API가 제 사용자가 성인인지 확인합니까?

아니요. 연령 확인, 동의 및 이용약관은 개발자인 귀하의 책임입니다. API는 미성년자가 관련된 성적 콘텐츠에 대해 엄격한 한도를 적용합니다.

이 API(또는 모델)가 내 채팅봇을 위해 이미지를 생성할 수 있습니까?

아니요. 텍스트 전용입니다. 이미지, 오디오 또는 비디오 생성, 임베딩, 파인튜닝이 없습니다.

긴 채팅에서 캐릭터의 일관성을 어떻게 유지합니까?

시스템 프롬프트에 페르소나를 유지하고, 주요 사실로 구성된 짧은 메모 블록을 추가하며, 마지막 20~30턴을 그대로 유지하세요. 이전 턴은 메모로 요약하세요.

어떻게 결제하나요?

암호화폐(TRC20의 USDT 또는 Base의 USDC)로 잔액을 $20에서 $500까지 충전하세요. 크레딧은 만료되지 않으며 구독제가 아닙니다.

지금 API 키 받기

가입하고 키를 가져온 후 베이스 URL을 업데이트하세요. 끝입니다.