PT ▾
Obter chave de API

Gerador de histórias sem filtro via API

Um gerador de histórias que para no meio da cena porque a trama escureceu é uma ferramenta de escrita ruim. Este artigo mostra como construir um em cima de um endpoint compatível com OpenAI, com código que você pode executar hoje.

Atualizado

Livro aberto com páginas virando fitas brilhantes que fluem para um terminal, representando geração de histórias via API

Pontos principais

  • Aponte qualquer SDK OpenAI para a base URL, use o ID do modelo uncensored, e você terá um motor de histórias em cerca de vinte linhas.
  • Um prompt do sistema que define gênero, tom e regras importa mais do que qualquer configuração de amostragem.
  • A janela de 100.000 tokens permite manter uma bíblia de história inteira e vários capítulos em uma única requisição.
  • Um capítulo de 1.200 tokens custa cerca de um décimo de centavo, então o custo raramente é o limite.

O que é um gerador de histórias sem filtro

Um gerador de histórias sem filtro é um modelo de texto que escreve ficção sem parar para dar lição de moral, trocar seu vilão por um simpático ou recusar uma cena porque o assunto é sombrio. Thrillers criminosos, ficção de guerra, horror, protagonistas moralmente ambíguos e romance maduro entre adultos precisam de um modelo que trate material sombrio como material, não como um alerta.

O serviço por trás deste site oferece um único modelo de pesos abertos, ajustado para responder sem recusas de conteúdo para uso adulto lícito. Ele é executado por um provedor independente e é acessado por meio de uma API no estilo OpenAI. Você envia uma lista de mensagens e recebe texto de volta. Não há editor web para aprender nem modelo para preencher, que é o ponto: você decide como a ferramenta de história funciona, e o modelo fornece o texto.

Uma regra é fixa. Conteúdo sexual envolvendo menores nunca é permitido, e nenhum prompt muda isso. Todo o resto em ficção adulta lícita é seu para escrever. Se você quer o panorama geral de como isso se compara com uma plataforma de personagens hospedada, a página em NoFilter AI versus Character AI cobre isso.

Sua primeira história em vinte linhas de Python

Como a API segue o formato OpenAI, o pacote oficial openai funciona sem alterações. Você só precisa substituir a base URL e a chave. Instale com pip install openai, então execute isto.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.nofilterai.cc/v1",
    api_key="YOUR_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    temperature=0.9,
    messages=[
        {"role": "system", "content": (
            "You are a fiction author. Write in third person, past tense. "
            "Use concrete detail and subtext. Never summarise the scene, "
            "never moralise, never address the reader."
        )},
        {"role": "user", "content": (
            "Genre: noir crime. Setting: a flooded harbour town. "
            "Write the opening 600 words. A smuggler finds a body in his net."
        )},
    ],
)
print(resp.choices[0].message.content)

O ID do modelo é uncensored. A chave vem da página da chave de API. Se você ainda não se cadastrou, novos usuários podem obter $0,50 de crédito de teste lá com um clique, válido por 7 dias, então este primeiro script não custa nada.

A mesma chamada funciona via curl, o que é útil para testar um prompt antes de envolvê-lo em código.

curl https://api.nofilterai.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Write a 200 word horror scene set in a lighthouse."}
    ]
  }'

Estrutura de prompt que produz ficção utilizável

A maioria das saídas decepcionantes de um modelo de história vem de instruções vagas, não do modelo. Três partes do prompt fazem o trabalho pesado.

A mensagem do sistema define o autor, não o tópico

Coloque regras de voz aqui: ponto de vista, tempo verbal, ritmo das frases, o que evitar. Uma linha como "não termine cenas com uma reflexão sobre o que tudo significa" remove um hábito que muitos modelos de linguagem compartilham. Mantenha esta mensagem estável durante todo o projeto para que os capítulos soem iguais.

A mensagem do usuário define o ritmo

Dê uma cena por vez. Nomeie os personagens, o local, o que muda no final da cena e um tamanho alvo. "Escreva 700 palavras. Mara confronta o irmão sobre o livro-caixa desaparecido. Ela não recebe uma resposta" é muito melhor do que "continue a história".

Uma bíblia de história acompanha

Mantenha um bloco curto com fatos dos personagens, a linha do tempo até agora e fios da trama, e envie com cada requisição. Uma bíblia de 800 tokens custa quase nada e impede o modelo de mudar a cor dos olhos ou ressuscitar um personagem.

  • Use temperature por volta de 0,8 a 1,0 para rascunho e 0,5 a 0,7 para revisões.
  • Use sequências stop se você gerar em um formato fixo, por exemplo, parando em uma linha que diz "FIM DA CENA".
  • Use presence_penalty e frequency_penalty levemente se o modelo repetir frases recorrentes. Ambos são passados para o modelo.
  • Use seed quando quiser comparar duas versões de prompt em mesmas condições.

Mantendo uma história longa consistente

A janela de contexto tem 100.000 tokens, contando o prompt e a resposta juntos. Isso é espaço para uma bíblia de história completa, os vários capítulos anteriores e um novo capítulo de saída em uma única requisição. Para a maioria dos projetos de ficção, você pode parar de se preocupar com truques de memória por um bom tempo.

Um loop simples lida com uma história serializada. Mantenha uma lista contínua de mensagens, anexe cada capítulo que o modelo escreve e adicione sua próxima instrução. Quando a lista se aproximar do limite, substitua os capítulos mais antigos por um resumo curto que você também pede ao modelo para escrever.

from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

bible = "Mara Voss, 34, ferry pilot. Brother Teo owes money. Setting: Harbor Nine, rain every night."
history = [{"role": "system", "content": "Fiction author. Third person, past tense. No moralising.\nBible: " + bible}]

def write(beat):
    history.append({"role": "user", "content": beat})
    r = client.chat.completions.create(model="uncensored", messages=history, temperature=0.85)
    text = r.choices[0].message.content
    history.append({"role": "assistant", "content": text})
    return text

print(write("Chapter 1, 700 words: Mara finds Teo's boat adrift."))
print(write("Chapter 2, 700 words: she searches the cabin and finds a second ledger."))

Quando atingir o limite, não corte silenciosamente. Um modelo que perde o início da história muitas vezes mantém o enredo, mas esquece pequenos fatos. Um resumo escrito de 500 a 800 tokens, inserido após a mensagem do sistema, mantém esses fatos vivos por um pequeno custo.

Requisições falhas ou recusadas não são cobradas, então uma nova tentativa após um erro nunca dobra sua conta. A lista completa de parâmetros está na documentação da API.

Streaming e ficção interativa

Para uma aventura de texto ou um assistente de escrita ao vivo, você quer palavras na tela conforme elas chegam. Defina stream: true e leia os eventos enviados pelo servidor. Os números de uso chegam ao final do streaming.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.nofilterai.cc/v1",
  apiKey: process.env.NOFILTER_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [
    { role: "system", content: "You are the narrator of a survival horror text adventure. Second person, present tense." },
    { role: "user", content: "I open the cellar door." },
  ],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Dois limites práticos se aplicam. Uma chave completa permite 8 requisições simultâneas e 300 requisições por minuto; uma chave de teste permite 2 e 60. Uma solicitação em streaming mantém sua vaga de concorrência até que o streaming termine, então um leitor lento em uma página web pode bloquear uma vaga por mais tempo do que você espera. Se você exceder um limite, receberá HTTP 429 com o código de erro rate_limited ou concurrency. Em sobrecarga breve, você também recebe um 429 com Retry-After: 5, e esperar cinco segundos antes de tentar novamente é a resposta correta.

Por que histórias geradas ficam planas, e as correções

Mesmo sem recusas, um modelo pode escrever ficção monótona. As causas comuns são fáceis de corrigir assim que você as conhece.

A primeira é o reflexo de resumo. Deixado sozinho, um modelo comprime eventos em um resumo organizado. Peça uma cena, nomeie seu comprimento e proíba resumos na mensagem do sistema. A segunda é a semelhança: todos os personagens falam no mesmo registro educado. Dê a cada personagem falante uma nota de estilo de duas linhas, como "cortado, nunca termina as frases" ou "formal, usa títulos até para amigos". A terceira é a falta de risco. Um passo como "eles falam sobre o plano" produz texto supérfluo, enquanto "ela precisa que ele concorde antes do amanhecer, e ele sabe disso" produz tensão.

Finalmente, leia a saída como um editor. Se a mesma forma de frase abrir quatro parágrafos seguidos, diga isso ao modelo na próxima solicitação e peça uma reescrita. Você está direcionando, não aceitando qualquer coisa que chegue. Escritores que tratam a primeira saída como um rascunho obtêm capítulos muito melhores do que aqueles que esperam um terminado.

Quanto custa uma história

O preço é $0,15 por 1M tokens de entrada e $0,50 por 1M tokens de saída, a partir de crédito pré-pago sem assinatura. O crédito nunca expira. Os números abaixo são calculados a partir desses dois preços.

FunçãoTokens de entradaTokens de saídaCusto
Um capítulo com bíblia e texto anterior3,0001,200$0.00045 + $0.0006 = $0.00105
100 capítulos assim300,000120,000$0.045 + $0.06 = $0.105
Sessão interativa: 50 turnos, contexto de 20.000 tokens cada, respostas de 1.000 tokens1,000,00050,000$0.15 + $0.025 = $0.175
Uma solicitação que preenche a janela com entrada100,0000$0.015

Mesmo cem capítulos custam cerca de dez centavos. Recarregamentos começam em $20 e vão até $500 em qualquer valor inteiro, com bônus de 5% a partir de $50, 10% a partir de $100 e 15% a partir de $200. O pagamento é apenas em cripto, usando USDT em TRC20 ou USDC em Base. Detalhes atuais estão na página de preços.

O hábito custoso é reenviar um histórico muito longo a cada turno de uma história interativa. Resuma os turnos antigos e seus tokens de prompt caem drasticamente.

Conselhos práticos e limites

Alguns pontos economizam tempo assim que você começa a construir.

  • Texto apenas. O serviço não gera imagens, áudio ou vídeo, e não oferece embeddings ou fine-tuning. Para arte de capa ou voz, use outra ferramenta.
  • O modo JSON ajuda com a estrutura. Solicite response_format: {"type":"json_object"} quando quiser que o modelo retorne uma ficha de personagem ou uma lista de cenas que seu código analisa.
  • Seus prompts não são usados para treinamento. Isso importa se o seu manuscrito ainda não foi publicado.
  • Edite em etapas. Rascunhe com uma temperatura alta, depois envie o rascunho de volta com uma instrução para apertar o diálogo ou cortar advérbios com uma temperatura mais baixa.
  • Verifique a saída. Um modelo sem recusas seguirá sua liderança, então o tom que você obtém é o tom que você pede.

O modelo é um modelo de pesos abertos geral, não a API oficial de um fornecedor, então teste-o no seu próprio gênero antes de construir um produto em torno dele. Comece com o crédito de teste e alguns capítulos reais.

Perguntas e respostas

Existe uma maneira gratuita de testar um gerador de histórias sem filtros via API?

Novos usuários podem reivindicar $0,50 de crédito de teste com um clique na página da chave de API após o sign-in. Não precisa de pagamento, é válido por 7 dias e é limitado a um por pessoa.

Qual é o tamanho máximo de uma solicitação de história?

A janela de contexto é de 100.000 tokens, compartilhada pelo prompt e pela resposta. A resposta pode usar tudo o que o prompt deixar livre, e max_tokens é opcional.

Posso usar com ferramentas que já suportam OpenAI?

Sim. Qualquer cliente que permita definir uma base URL e chave personalizados funciona, usando o ID do modelo uncensored. Os métodos suportados são POST /v1/chat/completions e GET /v1/models.

Existe algum conteúdo que o modelo não escreverá?

Conteúdo sexual envolvendo menores de idade nunca é permitido. Além disso, o modelo é ajustado para responder sem recusas de conteúdo para uso adulto lícito.

Você armazena ou treina com meus textos?

Os prompts não são usados para treinamento.

Sua chave está a um formulário de distância

Crie uma conta, copie a chave, altere a URL base. Essa é toda a configuração.