O que as pessoas querem dizer com uma API de texto sem censura
Se você pesquisou por uma API de IA NSFW, provavelmente quer uma coisa: um modelo que você pode chamar do seu próprio código e que não interrompe a história no meio com uma recusa. Em espanhol e português, a abreviação é "IA" (inteligencia artificial, inteligência artificial), por isso consultas como "ia nsfw" são comuns. A necessidade é a mesma em todos os idiomas: ficção, jogos de interpretação e aplicativos de companhia para adultos, construídos sobre um modelo que segue o prompt do sistema que você escreveu.
Modelos hospedados mainstream são ajustados para recusar uma ampla gama de solicitações. Isso é razoável para um assistente geral, mas quebra um aplicativo de história. O modelo aqui é um único modelo de pesos abertos, executado por um provedor independente e ajustado para responder sem recusas de conteúdo para uso adulto lícito. Não é a API oficial de nenhum grande fornecedor, nem é um roteador que encaminha sua chamada para o modelo de outra pessoa.
Você fala com ele do jeito que fala com a OpenAI: JSON sobre HTTPS, uma chave bearer, um array messages. Nada no seu cliente precisa mudar, exceto duas strings.
O que você está chamando realmente
Mantenha os fatos em um só lugar antes de escrever o código.
- URL base:
https://api.nsfwia.com/v1 - Model id:
uncensored - Auth:
Authorization: Bearer YOUR_KEY - Endpoints:
POST /v1/chat/completions,POST /v1/responseseGET /v1/models - Janela de contexto: 100.000 tokens, prompt e completion juntos
- Recursos: streaming via SSE, chamada de ferramentas, modo JSON e passagem direta para temperature, top_p, stop, seed e as penalidades
É apenas texto. Não há geração de imagem, áudio ou vídeo, nem embeddings ou fine-tuning. Se seu produto precisa disso, associe esta API a outros serviços para esses recursos.
Envie sua primeira requisição
Crie uma conta, abra a página da chave de API e copie sua chave. Novos usuários podem obter $0,50 de crédito de teste lá com um clique, válido por 7 dias. Depois execute isto:
curl https://api.nsfwia.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a novelist writing for adult readers. Stay in character."},
{"role": "user", "content": "Open a noir story set in a rainy port city."}
],
"temperature": 0.9
}'
A mesma chamada com o SDK oficial do Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwia.com/v1",
api_key="YOUR_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a novelist writing for adult readers."},
{"role": "user", "content": "Open a noir story set in a rainy port city."},
],
temperature=0.9,
)
print(resp.choices[0].message.content)
Se a chamada retornar texto, você concluiu a configuração. Um 401 significa que a chave está errada ou tem um espaço extra. Um 404 geralmente significa que falta a URL base /v1.
Streaming e system prompts
Apps de história e bate-papo parecem lentos sem streaming. Defina stream: true e leia os eventos enviados pelo servidor conforme chegam. As cifras de uso vêm no final do stream.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.nsfwia.com/v1",
apiKey: process.env.NSFW_API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [
{ role: "system", content: "You are the narrator of an adult interactive fiction game." },
{ role: "user", content: "Describe the tavern the player just entered." },
],
});
for await (const part of stream) {
process.stdout.write(part.choices[0]?.delta?.content ?? "");
}
Como o modelo não empurra de volta o gênero, o system prompt torna-se o principal controle que você tem. Declare o cenário, o tom, o ponto de vista e o comprimento que você deseja. Coloque regras rígidas lá também, como "sem conteúdo envolvendo menores de idade" ou "mantenha-se dentro da história". Um system prompt claro faz mais pela qualidade da saída do que qualquer configuração de amostragem.
Saída estruturada e ferramentas
Apps muitas vezes precisam de dados, não de prosa: uma ficha de personagem, um inventário, uma lista de escolhas para o jogador. Adicione response_format: {"type": "json_object"} e diga no prompt quais chaves você espera, e a resposta será um objeto JSON que você pode analisar. Para lógica de jogo, passe tools com definições de função. Quando o modelo responder com tool_calls, execute a função no seu código e envie o resultado de volta com role: "tool". Ambos os recursos funcionam durante o streaming, então um narrador pode descrever uma cena e chamar uma função de rolagem de dados na mesma vez.
Mantenha cada mudança pequena ao ajustar a saída. Altere uma configuração por vez, como reduzir temperature para uma prosa mais estável ou adicionar uma penalidade de presença se o modelo repetir-se, depois compare resultados no mesmo prompt com um seed fixo.
Escrevendo prompts em espanhol ou português
Nada impede que você envie o system prompt e as turns do usuário em espanhol ou português. Alguns desenvolvedores mantêm o system prompt em inglês e permitem que o usuário escreva em seu próprio idioma, o que mantém as instruções estáveis enquanto a história permanece local. Outros escrevem tudo no idioma do usuário. Teste ambos nas suas cenas de amostra e compare, porque não publicamos benchmarks de idioma e a escolha certa depende do seu conteúdo.
Os artigos deste site estão em inglês, mas a API em si não se importa com qual idioma o JSON contém. Nosso artigo mitos versus fatos cobre mal-entendidos comuns sobre modelos uncensored, incluindo o que "uncensored" faz e não faz.
Limites e custo
| Item | Valor |
|---|---|
| Preço de entrada | $0,15 por 1M de tokens |
| Preço de saída | $0,50 por 1M de tokens |
| Chave completa | 8 requisições simultâneas, 300 requisições por minuto |
| Chave de teste | 2 requisições simultâneas, 60 requisições por minuto |
| Corpo da requisição máximo | 8 MB |
Uma rodada típica de roleplay com 2.000 tokens de entrada e 500 tokens de saída custa $0,0003 para entrada mais $0,00025 para saída, totalizando $0,00055. O crédito de teste de $0,50 cobre portanto cerca de 900 rodadas. Requisições falhas ou recusadas não são cobradas, e o crédito pré-pago nunca expira. Recargas variam de $20 a $500 em cripto (USDT na TRC20 ou USDC na Base), com um bônus de 5% a partir de $50, 10% a partir de $100 e 15% a partir de $200. Detalhes completos estão na página de preços.
Se você ultrapassar um limite, receberá HTTP 429. O código de erro rate_limited significa muitas requisições por minuto, e concurrency significa muitas ao mesmo tempo. Uma solicitação de streaming mantém sua vaga até o fim do streaming, então feche os streams que você não está mais lendo.
Regras que permanecem em vigor
O serviço é destinado apenas a uso adulto e lícito. Conteúdo envolvendo menores é um limite rígido e nunca é aceitável, independentemente do enquadramento. Os prompts não são usados para treinamento. Mantenha suas verificações de idade, telas de consentimento e obrigações legais locais no seu próprio produto, porque a API oferece a você um modelo de texto capaz e nada mais. A referência completa da solicitação está na documentação.
