繁中 ▾
取得 API 金鑰

無審查 AI 故事生成器 API

因劇情轉暗而在場景中斷的故事生成器是劣質的寫作工具。本文展示如何基於 OpenAI 相容端點建構此工具,並提供你可立即執行的程式碼。

更新於

一本打開的書,頁面轉化為發光絲帶流入終端機,象徵 API 故事生成

重點摘要

  • 將任何 OpenAI SDK 指向 Base URL,使用模型 ID uncensored,約二十行程式碼即可擁有故事引擎。
  • 設定類型、語氣與規則的系統提示詞,比任何採樣設定都重要。
  • 100,000 token 的上下文視窗讓你能在單一請求中保留完整的故事設定集與數個章節。
  • 1,200 token 的章節成本約為千分之一美分,因此成本很少是限制因素。

無審查故事生成器究竟是什麼

無審查 AI 故事生成器是一種文本模型,它會持續撰寫小說,不會中途對你說教、將反派替換為友善角色,或因為題材嚴肅而拒絕生成場景。犯罪驚悚、戰爭小說、恐怖故事、道德灰色地帶的主角以及成人之間的成熟浪漫故事,都需要一種將黑暗素材視為素材而非警報的模型。

此網站後端的服務提供單一開放權重模型,針對不拒絕內容進行調整以回答,適用於合法成人用途。它由獨立供應商運行,透過標準 OpenAI 風格 API 存取。你傳送訊息列表,取得文本回覆。沒有需要學習的網頁編輯器,也沒有需要填寫的範本,重點在於:你決定故事工具如何運作,模型提供文本。

有一條規則固定不變。涉及未成年人的性內容絕對禁止,且任何提示詞都無法改變這一點。合法成人小說的其他內容均由你撰寫。如果你想了解這與託管式角色平台的一般比較,NoFilter AI 與 Character AI 比較頁面涵蓋了相關內容。

二十行 Python 寫出你的第一個故事

由於 API 遵循 OpenAI 格式,官方 openai 套件可直接使用。你只需替換 base 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."}
    ]
  }'

產生可用小說的提示詞結構

故事模型最令人失望的輸出通常來自模糊的指示,而非模型本身。提示詞的三個部分承擔主要工作。

系統訊息設定作者,而非主題

在此輸入規則:視角、時態、句子節奏、避免的內容。例如「不要在場景結尾反思整體意義」可移除許多語言模型共有的習慣。將此訊息在整個專案中保持一致,讓各章節聽起來風格一致。

使用者訊息設定節奏

一次給出一個場景。命名角色、地點、場景結束時的變化以及目標長度。「寫 700 字。瑪拉就那本遺失的帳本與她的兄弟對質。她沒有得到回答」遠比「繼續故事」來得好。

故事聖經隨附

保留一個包含角色事實、目前時間線與未解懸念的短區塊,並隨每個請求發送。800 token 的故事設定集成本幾乎可以忽略,並防止模型改變眼睛顏色或讓角色復活。

  • 草稿時使用 temperature 約 0.8 至 1.0,編輯時使用 0.5 至 0.7。
  • 如果以固定格式生成,使用 stop 序列,例如在讀作「END SCENE」的行處停止。
  • 如果模型重複特定短語,輕度使用 presence_penalty 與 frequency_penalty。兩者均傳遞至模型。
  • 當你想公平比較兩個提示詞版本時,使用 seed。

保持長篇故事的一致性

上下文視窗為 100,000 token,包含提示詞與回覆的總和。這足以容納完整的故事設定集、之前的幾個章節以及單一請求中的新章節輸出。對於大多數小說專案,你可以長時間不再擔心記憶機制。

簡單迴圈處理序列化故事。保持訊息的運行列表,追加模型撰寫的每個章節,並添加你的下一個指示。當列表接近限制時,用你要求模型撰寫的短摘要替換最舊的章節。

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 token 的文字摘要,能以小成本保留這些事實。

失敗或拒絕的請求不會收費,因此錯誤後的重試不會使帳單加倍。完整參數列表位於 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 ?? "");
}

適用兩個實際限制。完整金鑰允許 8 個並行請求和每分鐘 300 個請求;試用金鑰允許 2 個和 60 個。串流請求會佔用其並行槽位直到串流結束,因此網頁上的慢速讀取器可能比預期更久佔用槽位。如果超過限制,你會收到 HTTP 429 與錯誤代碼 rate_limited 或 concurrency。短暫超載時也會收到帶有 Retry-After: 5 的 429,在重試前等待五秒是正確的回應。

生成故事為何會變得平淡,以及如何修正

即使沒有拒絕,模型也可能寫出平淡的小說。一旦你知道原因,常見的成因很容易修復。

第一個是摘要慣性。若放任不管,模型會將事件壓縮成整齊的摘要。要求單一場景、指定長度,並在系統訊息中禁止摘要。第二個是雷同:每個角色都以同樣禮貌的語調說話。為每個說話的角色提供兩行的語氣備註,例如「簡短,從不說完句子」或「正式,即使對朋友也使用稱謂」。第三個是缺乏懸念。像「他們討論計畫」這樣的節奏會產生廢話,而「她在黎明前需要他同意,而他知道這一點」則能產生張力。

最後,以編輯的身分檢視輸出。如果相同的句子形式連續作為四個段落的開頭,在下一個請求中告知模型並要求重寫。你在引導,而非接受任何到達的內容。將第一次輸出視為草稿的作家,會獲得比期望直接獲得成品更好的章節。

故事的成本

定價為每 1M 輸入 token $0.15,每 1M 輸出 token $0.50,從預付額度扣除,無訂閱。額度永不過期。以下數字基於這兩種價格推導得出。

工作輸入 token輸出 token成本
一章包含聖經與先前文本3,0001,200$0.00045 + $0.0006 = $0.00105
100 個此類章節300,000120,000$0.045 + $0.06 = $0.105
互動式會話:50 個回合,每個回合 20,000 token 上下文,1,000 token 回覆1,000,00050,000$0.15 + $0.025 = $0.175
一個填滿輸入上下文視窗的請求100,0000$0.015

即使一百個章節的成本也只約十美分。儲值從 20 美元起跳,最高可達 500 美元,以任意整數金額計算,50 美元起贈 5%,100 美元起贈 10%,200 美元起贈 15%。僅接受加密貨幣付款,使用 TRC20 上的 USDT 或 Base 上的 USDC。目前詳情請見 定價頁面。

昂貴的習慣是在互動式故事的每一輪都重新發送非常長的歷史記錄。對舊的輪次進行摘要,你的輸入 token 數量就會大幅下降。

實用建議與限制

一旦開始建置,以下幾點可節省時間。

  • 僅文字。 該服務不生成圖像、音訊或影片,也不提供嵌入或微調功能。如需封面插圖或語音,請使用其他工具。
  • JSON 模式有助於結構化。當你希望模型返回角色表單或場景列表供程式解析時,請要求response_format: {"type":"json_object"}。
  • 你的提示詞不會用於訓練。 如果你的手稿尚未出版,這很重要。
  • 分次編輯。 以較高的 temperature 撰寫草稿,然後以較低的 temperature 將草稿送回,並指示其精簡對話或刪減副詞。
  • 檢查輸出。 沒有拒絕機制的模型會順從你的引導,因此你得到的語氣就是你要求的語氣。

該模型為通用開放權重模型,並非供應商官方 API,因此在圍繞其建構產品前,請先在該類型上進行測試。從免費試用額度開始,並撰寫幾個真實章節。

問題與解答

是否有免費方式可透過 API 試用無審查 AI 故事生成器?

新用戶可在註冊後,於 API 金鑰頁面一鍵領取 $0.50 的試用額度。無需付款,有效期為 7 天,每人限領一次。

單一故事請求的長度上限為何?

上下文視窗為 100,000 個 token,由提示詞與回覆共用。回覆可使用提示詞剩餘的任何空間,且 max_tokens 為選填。

我能否將其與已支援 OpenAI 的工具搭配使用?

可以。任何允許你設定自訂 Base URL 和金鑰的客戶端均可運作,使用模型 ID uncensored。支援的方法為 POST /v1/chat/completions 與 GET /v1/models。

該模型是否有任何內容不會撰寫?

涉及未成年人的性內容絕對禁止。除此之外,該模型經過調整,在合法成人用途下不會拒絕內容。

你會儲存或將我的故事用於訓練嗎?

提示詞不會用於訓練。

只差一張表單,即可取得金鑰

建立帳號、複製金鑰、更改 Base URL。這就是整個設定過程。