API経由のフィルターなしAIストーリー生成
プロットが暗転した瞬間にストーリー生成が止まるのは、優れた執筆ツールとは言えません。この記事では、コードを実行できるOpenAI互換エンドポイントの上に構築する方法を示します。

主要ポイント
- OpenAI SDKをベースURLに設定し、モデルID uncensoredを使用すれば、約20行でストーリーエンジンが完成します。
- ジャンル、トーン、ルールを設定するシステムプロンプトは、サンプリング設定よりも重要です。
- 100,000トークンのウィンドウにより、ストーリーバイブル全体と複数の章を1つのリクエストに保持できます。
- 1,200トークンの章の費用は約0.1セントであり、コストが制限になることはほとんどありません。
フィルターなしストーリー生成器の実際
フィルターなしAIストーリー生成器は、あなたに講義したり、悪役を友好的なキャラクターに置き換えたり、題材が暗いからといってシーンを拒否したりせずにフィクションを書くテキストモデルです。犯罪スリラー、戦争フィクション、ホラー、道徳的に曖昧な主人公、成人間の成熟したロマンスは、すべて、暗い素材をアラートではなく素材として扱うモデルを必要とします。
このサイトの裏側にあるサービスは、法的な成人向け用途に対してコンテンツ拒否なしで回答するように調整された1つのオープンウェイトモデルを提供します。これは独立したプロバイダで実行され、標準的なOpenAIスタイルのAPIを通じてアクセスできます。メッセージのリストを送信し、文章を受け取ります。学ぶべきWebエディターも、入力すべきテンプレートもなく、これがポイントです:ストーリーツールの動作をあなたが決定し、モデルがテキストを提供します。
1つのルールは固定されています。未成年者を含む性的コンテンツは常に禁止されており、どのプロンプトでもこれが変更されることはありません。それ以外の法的な成人向けフィクションはすべてあなたのものとして書けます。これがホストされたキャラクタープラットフォームと比較してどうなるかの一般的な概要を知りたい場合は、NoFilter AI対Character AIのページを参照してください。
Pythonで20行のコードで最初のストーリーを作成
APIはOpenAIの形式に従っているため、公式のopenaiパッケージは変更なしで動作します。ベースURLとキーのみを置き換えます。pip install openaiでインストールし、次にこれを実行します。
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)
モデルIDはuncensoredです。キーはAPIキーページから取得します。まだサインアップしていない場合、新規ユーザーはワンクリックで$0.50のトライアルクレジットを受け取ることができ、7日間有効なので、この最初のスクリプトは無料です。
同じ呼び出しはcurlからも機能し、コードにラップする前にプロンプトをテストするのに便利です。
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."}
]
}'実用的なフィクションを生み出すプロンプト構造
ストーリーモデルからの最も残念な出力は、モデルではなく曖昧な指示に起因します。プロンプトの3つの部分が重い作業を行います。
システムメッセージはトピックではなく著者を設定する
ここに文体のルールを配置します:視点、時制、文のリズム、避けるべきこと。「すべてが何を意味するかについての考察でシーンが終わらないでください」のような1行は、多くの言語モデルが共有する癖を除去します。プロジェクト全体を通じてこのメッセージを安定して保ち、章が似たように聞こえるようにします。
ユーザーメッセージはビート(小節)を設定する
1シーンずつ提供します。キャラクター、場所、シーンの終わりに何が変わるか、そしてターゲット長を指定します。「700語で書け。マラが欠落した台帳について兄に詰め寄る。彼女は答えを得られない」は、「ストーリーを続けて」よりもはるかに優れています。
ストーリーバイブルを一緒に含める
キャラクターの事実、これまでのタイムライン、未解決のスレッドをまとめた短いブロックを保持し、すべてのリクエストに送信します。800トークンのバイブルはほぼコストがかからず、モデルが目の色を変えたり、キャラクターを蘇生したりするのを防ぎます。
- ドラフト作成には
temperatureを0.8〜1.0、編集には0.5〜0.7を使用します。 - 固定形式で生成する場合は、
stopシーケンスを使用します。例えば、「END SCENE」という行で停止するなど。 - モデルがペットフレーズを繰り返す場合は、
presence_penaltyとfrequency_penaltyを軽く使用します。これらは両方ともモデルに渡されます。 - 2つのプロンプトバージョンを同等の条件で比較したい場合は、
seedを使用します。
長編ストーリーの一貫性を維持する
コンテキストウィンドウは100,000トークンです(プロンプトと応答を合計)。これは、単一のリクエストで完全なストーリーバイブル、過去の数章、そして新しい章の出力を収めるのに十分な容量です。ほとんどの小説プロジェクトでは、長期間にわたりワークアラウンドを気にする必要がなくなります。
単純なループで直列化されたストーリーを処理します。メッセージのリストを維持し、モデルが書いた各章を追加し、次の指示を追加します。リストが制限に近づいたら、古い章を短い要約に置き換えます(この要約もモデルに書かせます)。
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."))
制限に達した場合は、静かに切り捨てないでください。ストーリーの冒頭を失ったモデルはプロットを維持しても、小さな事実を忘れることがあります。システムメッセージの後に挿入される500〜800トークンの書面による要約は、小さなコストでそれらの事実を維持します。
失敗または拒否されたリクエストは請求されないため、エラー後の再試行で請求が倍増することはありません。完全なパラメータリストはAPIドキュメントにあります。
ストリーミングとインタラクティブフィクション
テキストアドベンチャーやライブ執筆アシスタントの場合、到着した瞬間に画面に単語を表示したいでしょう。stream: trueを設定し、サーバー送信イベントを読み取ります。使用量はストリームの最後に到着します。
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 ?? "");
}
2つの実用的な制限があります。フルキーは8つの同時リクエストと1分あたり300リクエストを許可し、トライアルキーは2と60を許可します。ストリーミングリクエストはストリームが終了するまで同時実行スロットを保持するため、Webページ上の遅いリーダーは予想よりも長くスロットをブロックする可能性があります。制限を超えた場合、エラーコードrate_limitedまたはconcurrency付きのHTTP 429を受信します。一時的な過負荷の場合も、Retry-After: 5付きの429を受け取り、再試行する前に5秒待つのが適切な対応です。
生成されたストーリーが平坦になる理由と修正法
拒否がなくても、モデルは退屈なフィクションを書くことがあります。一般的な原因は、知っていれば簡単に修復できます。
1つ目は要約の反射です。放置すると、モデルはイベントを整然とした要約に圧縮します。1つのシーンを求め、その長さを指定し、システムメッセージで要約を禁止してください。2つ目は単調さ:すべてのキャラクターが同じ丁寧な口調で話します。話す各キャラクターに2行の音声メモ(例:「簡潔で、文を完結させない」「フォーマルで、友人に対しても敬称を使う」)を与えてください。3つ目はステーク(利害関係)の欠如です。「彼らは計画について話す」というビートは つなぎの埋め草を生み出しますが、「彼女は夜明けまでに彼に同意させる必要があり、彼はそれを知っている」というビートは緊張を生み出します。
最後に、編集者として出力を読んでください。同じ文の形が4段落連続で始まる場合は、次のリクエストでモデルに伝え、書き直しを依頼してください。あなたはステアリングしており、到着したものをそのまま受け入れているわけではありません。最初の出力をラフドラフトとして扱う作家は、完成品を期待する人々よりもはるかに優れた章を得ます。
ストーリーのコスト
料金は、前払いクレジットからのサブスクリプションなしで、入力トークン1Mあたり$0.15、出力トークン1Mあたり$0.50です。クレジットは期限切れになりません。以下の数字は、これらの2つの価格から計算されています。
| 役割 | 入力トークン | 出力トークン | コスト |
|---|---|---|---|
| バイブルと以前のテキストを含む1章 | 3,000 | 1,200 | $0.00045 + $0.0006 = $0.00105 |
| そのような章100個 | 300,000 | 120,000 | $0.045 + $0.06 = $0.105 |
| インタラクティブセッション:50ターン、各20,000トークンのコンテキスト、1,000トークンの返信 | 1,000,000 | 50,000 | $0.15 + $0.025 = $0.175 |
| 入力でウィンドウを埋める1つのリクエスト | 100,000 | 0 | $0.015 |
100章でも費用は約10セントです。チャージは$20から始まり、$500まで任意の整数金額で可能で、$50以上で5%ボーナス、$100以上で10%ボーナス、$200以上で15%ボーナスが付与されます。支払いには暗号資産のみ使用し、TRC20上のUSDTまたはBase上のUSDCを使用します。現在の詳細は価格ページにあります。
コストがかかるのは、インタラクティブなストーリーの各ターンで非常に長い履歴を再送信する習慣です。過去の会話を要約すれば、入力トークンが大幅に削減されます。
実用的なアドバイスと制限
構築を始める際に時間を節約できるいくつかのポイントがあります。
- テキストのみ。 本サービスは画像、音声、動画の生成は行わず、埋め込みやファインチューニングも提供しません。表紙イラストや音声には別のツールを使用してください。
- JSONモードは構造化に役立ちます。 モデルにキャラクターシートやコードが解析できるシーンリストを返させたい場合は、
response_format: {"type":"json_object"}をリクエストしてください。 - プロンプトは学習に使用されません。 未発表の原稿がある場合、これは重要です。
- 段階的に編集する。 高いtemperatureで下書きを作成し、その後、より低いtemperatureで会話の強化や副詞の削除などの指示を付けて下書きを送り返します。
- 出力を確認する。 フィルタリングのないモデルはあなたの指示に従うため、あなたが求めるトーンが得られます。
このモデルはベンダー公式のAPIではなく汎用のオープンウェイトモデルであるため、製品化に組み込む前に独自のジャンルでテストしてください。試用クレジットと数章の実際のデータから始めてください。
その他のガイド
質問と回答
APIを通じてフィルターなしAIストーリージェネレーターを無料で試す方法はありますか?
新規ユーザーは、APIキーページでワンクリックで$0.50の無料トライアルクレジットを取得できます。お支払いは不要で、7日間有効、1人1回限りです。
1つのストーリーリクエストの最大長は?
コンテキストウィンドウは100,000トークンで、プロンプトと返信で共有されます。返信はプロンプトが空けた領域をすべて使用でき、max_tokensはオプションです。
OpenAIをサポートしているツールとそれを使って使えますか?
はい。カスタムベースURLとキーを設定できるクライアントであれば、モデルID「uncensored」を使用して利用できます。サポートされているメソッドは POST /v1/chat/completions と GET /v1/models です。
モデルが書かないコンテンツはありますか?
未成年者を含む性的コンテンツは常に禁止されています。それ以外の場合、モデルは法的な成人向け用途に対してコンテンツ拒否なしで回答するように調整されています。
あなたのストーリーを保存したり、学習に使用したりしますか?
プロンプトはトレーニングに使用されません。
キーはフォームを1つ埋めるだけで手に入ります
アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。