FR ▾
Obtenir une clé API

Générateur d'histoires sans filtre IA via API

Un générateur d'histoires qui s'arrête en plein milieu d'une scène parce que l'intrigue s'assombrit est un outil d'écriture médiocre. Cet article montre comment en construire un sur un endpoint compatible OpenAI, avec du code que vous pouvez exécuter aujourd'hui.

Mis à jour le

Livre ouvert dont les pages se transforment en rubans lumineux s'écoulant dans un terminal, représentant la génération d'histoires via API

Points clés

  • Pointez n'importe quel SDK OpenAI vers l'URL de base, utilisez l'ID de modèle uncensored, et vous avez un moteur d'histoire en environ vingt lignes.
  • Un prompt système définissant le genre, le ton et les règles est plus important que tout paramètre de génération.
  • La fenêtre de 100 000 tokens vous permet de conserver une bible complète de l'histoire et plusieurs chapitres dans une seule requête.
  • Un chapitre de 1 200 tokens coûte environ un dixième de centime, donc le coût est rarement limitant.

Ce qu'est réellement un générateur d'histoires sans filtre

Un générateur d'histoires sans filtre IA est un modèle textuel qui écrit de la fiction sans vous faire la leçon, sans transformer votre méchant en personnage amical, ni refuser une scène parce que le sujet est sombre. Les thrillers criminels, la fiction de guerre, l'horreur, les protagonistes au moral ambigu et la romance mature entre adultes nécessitent tous un modèle qui traite le matériel sombre comme du matériel, et non comme une alerte.

Le service derrière ce site vous offre un seul modèle à poids ouverts, réglé pour répondre sans refus de contenu pour une utilisation adulte légale. Il s'exécute chez un fournisseur indépendant et est accessible via une API de style OpenAI standard. Vous envoyez une liste de messages, vous recevez du texte. Il n'y a pas d'éditeur web à apprendre ni de modèle à remplir, ce qui est l'intérêt : vous décidez comment fonctionne l'outil d'écriture, et le modèle fournit le texte.

Une règle est fixe. Le contenu sexuel impliquant des mineurs n'est jamais autorisé, et aucun prompt ne change cela. Tout le reste de la fiction adulte légale est à vous d'écrire. Si vous voulez une vue d'ensemble de la comparaison avec une plateforme de personnages hébergée, la page sur NoFilter AI versus Character AI couvre le sujet.

Votre première histoire en vingt lignes de Python

Comme l'API suit le format OpenAI, le package officiel openai fonctionne sans modification. Vous remplacez uniquement l'URL de base et la clé. Installez-le avec pip install openai, puis exécutez ceci.

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)

L'ID du modèle est uncensored. La clé provient de la page Clé API. Si vous ne vous êtes pas encore inscrit, les nouveaux utilisateurs peuvent obtenir 0,50 $ de crédit d'essai en un clic, valable 7 jours, donc ce premier script ne vous coûte rien.

Le même appel fonctionne depuis curl, ce qui est pratique pour tester un prompt avant de l'envelopper dans du code.

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."}
    ]
  }'

Structure du prompt pour produire de la fiction utilisable

La plupart des sorties décevantes d'un modèle d'histoire proviennent d'instructions vagues, et non du modèle. Trois parties du prompt font le gros du travail.

Le message système définit l'auteur, pas le sujet

Mettez-y les règles de voix : point de vue, temps, rythme des phrases, ce qu'il faut éviter. Une ligne telle que "ne pas terminer les scènes par une réflexion sur ce que tout cela signifie" supprime une habitude partagée par de nombreux modèles de langage. Gardez ce message stable tout au long d'un projet pour que les chapitres sonnent de manière similaire.

Le message utilisateur définit le rythme

Donnez une scène à la fois. Nommez les personnages, le lieu, ce qui change à la fin de la scène et une longueur cible. « Écrivez 700 mots. Mara confronte son frère au sujet du grand livre manquant. Elle n'obtient pas de réponse » est bien meilleur que « continue l'histoire ».

Une bible d'histoire voyage avec

Conservez un court bloc avec les faits sur les personnages, la chronologie jusqu'à présent et les fils narratifs en cours, et envoyez-le avec chaque requête. Une bible de 800 tokens coûte presque rien et empêche le modèle de changer la couleur des yeux ou de ressusciter un personnage.

  • Utilisez temperature autour de 0,8 à 1,0 pour la rédaction et de 0,5 à 0,7 pour les révisions.
  • Utilisez des séquences stop si vous générez dans un format fixe, par exemple en s'arrêtant à une ligne qui affiche « FIN SCÈNE ».
  • Utilisez presence_penalty et frequency_penalty avec modération si le modèle répète des phrases fétiches. Les deux sont transmis au modèle.
  • Utilisez seed lorsque vous souhaitez comparer deux versions de prompt à conditions égales.

Conserver la cohérence d'une longue histoire

La fenêtre de contexte est de 100 000 tokens, incluant le prompt et la réponse ensemble. Cela laisse de la place pour une bible complète de l'histoire, les chapitres précédents et un nouveau chapitre de sortie dans une seule requête. Pour la plupart des projets de fiction, vous pouvez cesser de vous soucier des astuces de mémoire pendant longtemps.

Une boucle simple gère une histoire sérialisée. Gardez une liste courante de messages, ajoutez chaque chapitre que le modèle écrit, et ajoutez votre prochaine instruction. Lorsque la liste approche de la limite, remplacez les chapitres les plus anciens par un court résumé que vous demandez également au modèle d'écrire.

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."))

Lorsque vous atteignez la limite, ne tronquez pas silencieusement. Un modèle qui perd le début de l'histoire conserve souvent l'intrigue mais oublie les petits faits. Un résumé écrit de 500 à 800 tokens, inséré après le message système, maintient ces faits vivants à un faible coût.

Les requêtes échouées ou refusées ne sont pas facturées, donc une nouvelle tentative après une erreur ne double jamais votre facture. La liste complète des paramètres est dans la documentation API.

Streaming et fiction interactive

Pour une aventure textuelle ou un assistant d'écriture en direct, vous voulez des mots à l'écran à mesure qu'ils arrivent. Définissez stream: true et lisez les événements envoyés par le serveur. Les chiffres d'utilisation arrivent à la fin du flux.

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

Deux limites pratiques s'appliquent. Une clé complète permet 8 requêtes simultanées et 300 requêtes par minute ; une clé d'essai permet 2 et 60. Une requête en streaming occupe son slot de concurrence jusqu'à la fin du flux, donc un lecteur lent sur une page web peut bloquer un slot plus longtemps que prévu. Si vous dépassez une limite, vous recevez HTTP 429 avec le code d'erreur rate_limited ou concurrency. En cas de surcharge brève, vous obtenez également un 429 avec Retry-After: 5, et attendre cinq secondes avant de réessayer est la bonne réponse.

Pourquoi les histoires générées s'essoufflent, et les correctifs

Même sans refus, un modèle peut écrire une fiction ennuyeuse. Les causes habituelles sont faciles à réparer une fois que vous les connaissez.

Le premier est le réflexe de résumé. Laissez seul, un modèle compresse les événements en un résumé ordonné. Demandez une seule scène, précisez sa longueur et interdisez les résumés dans le message système. Le deuxième est l'uniformité : chaque personnage parle dans le même registre poli. Donnez à chaque personnage parlant une note vocale de deux lignes, par exemple « sec, ne termine jamais ses phrases » ou « formel, utilise les titres même pour ses amis ». Le troisième manque d'enjeux. Une étape comme « ils parlent du plan » produit du remplissage, tandis que « elle a besoin qu'il accepte avant l'aube, et il le sait » produit de la tension.

Enfin, lisez la sortie en tant qu'éditeur. Si la même forme de phrase ouvre quatre paragraphes de suite, dites-le au modèle dans la prochaine demande et demandez une réécriture. Vous dirigez, vous n'acceptez pas n'importe quoi. Les écrivains qui traitent la première sortie comme une ébauche obtiennent des chapitres bien meilleurs que ceux qui s'attendent à une œuvre terminée.

Ce qu'une histoire coûte

La tarification est de 0,15 $ par 1M de tokens d'entrée et de 0,50 $ par 1M de tokens de sortie, prélevée sur le crédit prépayé sans abonnement. Le crédit n'expire jamais. Les chiffres ci-dessous sont calculés à partir de ces deux prix.

RôleTokens d'entréeTokens de sortieCoût
Un chapitre avec bible et texte antérieur3,0001,200$0.00045 + $0.0006 = $0.00105
100 chapitres de ce type300,000120,000$0.045 + $0.06 = $0.105
Session interactive : 50 tours, contexte de 20 000 tokens chacun, réponses de 1 000 tokens1,000,00050,000$0.15 + $0.025 = $0.175
Une requête qui remplit la fenêtre avec de l'entrée100,0000$0.015

Même cent chapitres coûtent environ dix centimes. Les recharges commencent à 20 $ et vont jusqu'à 500 $ dans n'importe quel montant entier, avec un bonus de 5 % à partir de 50 $, de 10 % à partir de 100 $ et de 15 % à partir de 200 $. Le paiement est uniquement en crypto, en utilisant USDT sur TRC20 ou USDC sur Base. Les détails actuels sont sur la page tarifaire.

La mauvaise habitude coûteuse est de renvoyer un historique très long à chaque tour d'une histoire interactive. Résumez les anciens tours et vos tokens d'entrée chutent fortement.

Conseils pratiques et limites

Quelques points vous font gagner du temps une fois que vous commencez à construire.

  • Texte uniquement. Le service ne génère pas d'images, d'audio ou de vidéo, et il n'offre ni embeddings ni fine-tuning. Pour la couverture ou la voix, utilisez un autre outil.
  • Le mode JSON aide à la structure. Demandez response_format: {"type":"json_object"} lorsque vous voulez que le modèle retourne une fiche de personnage ou une liste de scènes que votre code analyse.
  • Vos prompts ne sont pas utilisés pour l'apprentissage. Cela compte si votre manuscrit est inédit.
  • Modifiez par passes. Rédigez à une température élevée, puis renvoyez le brouillon avec une instruction pour resserrer le dialogue ou couper les adverbes à une température plus basse.
  • Vérifiez la sortie. Un modèle sans refus suivra votre direction, donc le ton que vous obtenez est le ton que vous demandez.

Le modèle est un modèle à poids ouverts généraliste, et non l'API officielle d'un fournisseur, donc testez-le sur votre propre genre avant de construire un produit autour de celui-ci. Commencez par le crédit d'essai et quelques chapitres réels.

Questions et réponses

Existe-t-il un moyen gratuit d'essayer un générateur d'histoires sans filtre IA via l'API ?

Les nouveaux utilisateurs peuvent réclamer 0,50 $ de crédit d'essai en un clic sur la page clé API après l'inscription. Il ne nécessite aucun paiement, est valable 7 jours et limité à un par personne.

Quelle peut être la longueur d'une seule demande d'histoire ?

La fenêtre de contexte est de 100 000 tokens, partagée entre le prompt et la réponse. La réponse peut utiliser tout ce que le prompt laisse libre, et max_tokens est optionnel.

Puis-je l'utiliser avec des outils qui prennent déjà en charge OpenAI ?

Oui. Tout client qui vous permet de définir une URL de base et une clé personnalisées fonctionne, en utilisant l'ID de modèle uncensored. Les méthodes prises en charge sont POST /v1/chat/completions et GET /v1/models.

Y a-t-il du contenu que le modèle n'écrira pas ?

Le contenu sexuel impliquant des mineurs n'est jamais autorisé. Au-delà de cela, le modèle est ajusté pour répondre sans refus de contenu pour une utilisation adulte légale.

Stockez-vous ou entraînez-vous sur mes histoires ?

Les prompts ne sont pas utilisés pour l'entraînement.

Votre clé est à un formulaire de vous

Créez un compte, copiez la clé, modifiez l'URL de base. C'est toute la configuration.