繁中 ▾
取得 API 金鑰

NsfwAiApi指南

最佳本地 LLM 用於角色扮演,還是託管 API?

用於角色扮演而言,最佳的本機 LLM 是你 GPU 能容納的最大無審查模型,且品質符合你的要求,而這個答案每隔幾個月就會改變。如果你更想跳過硬體(的麻煩),託管端點會讓你透過變更一個 URL 就能獲得相同的聊天工作流程。

更新

等距插圖,顯示本地 GPU 機箱與託管伺服器叢集透過對話氣泡連接

本地或託管:快速決策

如果您已經擁有強大的 GPU、希望完全離線,或喜歡調整模型,請選擇本地。如果您希望故事中擁有長上下文、使用筆記型電腦或手機,或希望花費幾分鐘而非幾個週末進行設定,請選擇託管。許多人兩者皆用:本地模型用於私密實驗,託管模型用於長篇劇況。

因素本地模型託管 API
計費模式硬體與電力,無每 token 費用從預付額度按 token 計費
模型大小受限於您的 GPU 記憶體由提供者執行的任何內容
上下文長度受限於記憶體,因為較長的上下文需要更多記憶體此處為 100,000 個 token
隱私權沒有任何東西會離開你的機器提示詞傳送至提供者;此處不會用於訓練
設定執行時間、權重、量化、更新Base URL 與金鑰
任何裝置皆可運作僅當您暴露自己的機器時是

實際決定最佳本地模型的要素

最佳本地 LLM 用於角色扮演的排名很快就會過時,且沒有單一名稱適合所有人。相反地,應根據實際會話中出現的要素來評估候選者。

  • 拒絕行為。 許多基礎模型與指令模型曾經過調整以拒絕特定主題。針對小說進行微調或標記為無審查的模型通常拒絕較少,但品質各異,因此請在您自己的場景中測試它們。
  • 保持角色。 注意模型是否開始敘述您角色的動作、每個回合重複相同的短語,或忘記房間裡有哪些人。
  • 散文品質。 連續閱讀十個回覆。某些模型適合單次回覆,但到第十個時會令人疲倦。
  • 上下文處理。 模型可能宣稱具有長視窗,但仍會遺失中間的細節。進行測試,讓對話早期的事實對後續產生影響。
  • 大小與量化。 壓縮至重度量化的較大模型可能比以較高精度執行的較小模型損失更多。請比較,不要假設。

您使用的執行環境的社群討論區與模型說明卡是獲取當前建議的正確去處。下載兩三個候選者,在每個候選者上運行相同的場景,並保留讓您想繼續故事的那一個。

當上下文空間不足時

角色扮演者遇到的瓶頸是記憶體,且出現在兩個地方。第一個是模型本身:較大的模型寫得更好,但需要更多的 GPU 記憶體。第二個是上下文。長篇故事中的每則訊息都會在新回合中再次傳送,承載它的快取也會隨長度增長,因此長期活動可能會擠壓僅能處理短對話的 GPU。

常見的變通方法是摘要舊的對話輪次、使用僅注入相關事實的設定書,以及降低上下文大小。它們有效,但也算是妥協。擁有 100,000 token 上下文視窗的託管端點可讓你將更多故事內容直接保留在視野中,這適合長期劇本、擁有許多角色的共享世界以及持續數週的故事。

代價是成本,因此測量成本很有幫助。假設一個聊天包含 30,000 token 的歷史記錄,且模型每次回覆生成 300 token。一輪對話的成本為 30,000 個輸入 token,每 1M token 價格為 $0.15,即 $0.0045,加上 300 個輸出 token,每 1M token 價格為 $0.50,即 $0.00015。每輪對話總計 $0.00465,100 輪則為 $0.465。長期的遊戲時間成本遠低於一美元。定價頁面列出了費率以及較大儲值額度的獎勵等級。

Python 中的有效託管設定

端點是 OpenAI 相容的,因此官方的 openai 套件無需更改即可運作,除了 base URL 與金鑰。模型 ID 為 uncensored。首先從 API 金鑰頁面取得金鑰;新帳戶可以點擊一次領取 $0.50 的試用額度,無需付款詳情。

此腳本保持滾動歷史、串流輸出回覆,並修剪舊回合以保持提示詞較小。系統提示詞是您值得花時間的部分:它設定場景、規則與風格。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.nsfwaiapi.com/v1",
    api_key=os.environ["NSFWAIAPI_KEY"],
)

SYSTEM = '''You are the narrator and all non-player characters in an adult fiction roleplay.
Setting: a rain-soaked port city, late autumn, gaslight and smuggler politics.
Rules:
- Write in third person, past tense, 2 to 4 short paragraphs per reply.
- Never write the player's actions, words or thoughts. Stop where the player decides.
- Keep each character's voice and goals consistent. Track who is present in the scene.
- All characters are adults. Do not write sexual content involving minors under any circumstances.
- Stay in the story. No disclaimers or out-of-character commentary unless the player asks with (OOC).'''

history = [{"role": "system", "content": SYSTEM}]
MAX_TURNS = 40  # keep the last 40 messages besides the system prompt

def say(user_text):
    history.append({"role": "user", "content": user_text})
    trimmed = [history[0]] + history[1:][-MAX_TURNS:]
    stream = client.chat.completions.create(
        model="uncensored",
        messages=trimmed,
        temperature=0.9,
        top_p=0.95,
        frequency_penalty=0.3,
        max_tokens=600,
        stream=True,
    )
    reply = ""
    for chunk in stream:
        if chunk.choices and chunk.choices[0].delta.content:
            piece = chunk.choices[0].delta.content
            reply += piece
            print(piece, end="", flush=True)
    print()
    history.append({"role": "assistant", "content": reply})

say("I push open the door of the Gull and Anchor and look for the harbor master.")

由於視窗為 100,000 token,你可以在修剪變得重要之前大幅調高 MAX_TURNS。修剪仍是一個好習慣:較短的提示詞成本較低,並讓模型專注於近期事件。

SillyTavern 等應用程式的客戶端設定

大多數角色扮演前端都有用於 OpenAI 相容或自訂聊天完成來源的連線畫面。例如,SillyTavern 讓您新增 OpenAI 相容的端點。欄位在各處都相同:

  • 基底或端點 URL: https://api.nsfwaiapi.com/v1。某些應用程式需要以 /chat/completions 結尾的完整路徑;如果應用程式要求基底 URL,請停在 /v1。
  • API 金鑰: 您的金鑰,以 Bearer 權杖傳送。
  • 模型: uncensored。如果應用程式可以擷取模型列表,它可以呼叫 GET /v1/models。
  • 串流輸出:開啟。回覆在撰寫時就會出現,如果你不喜歡方向,應用程式可以提前停止。

對於採樣,溫度約 0.8 到 1.0 適合敘事文本,top_p 接近 0.95。少量的頻率或存在懲罰會減少長對話傾向收集的重複短語。僅在您看到重複時才提高懲罰,因為高值會使行文奇怪地迴避某些內容。停止序列會隨請求傳送,因此將玩家名稱後跟冒號作為停止字串有助於防止模型試圖為您說話。將應用程式的上下文大小設定為您願意付費的任何值;您不需要填滿所有 100,000 個 token。

如果你運行多個聊天分頁或為朋友運行機器人,請注意並行請求的限制。完整金鑰允許 8 個並行請求和每分鐘 300 個請求,試用金鑰則允許 2 個和每分鐘 60 個。串流輸出的回覆會佔用其槽位直到串流結束,因此卡住的分頁可能會耗盡槽位。文件列出了限制和回應標頭,包括 X-Balance-USD,它顯示你剩餘的信用額度。

保持長篇故事健康的小常式

長期的角色扮演會以可預測的方式出錯,而一些習慣可以防止大部分問題。每 20 或 30 輪寫一篇短篇故事摘要,並將其保持在提示詞的頂部,位於系統訊息之後。手動更新它或要求模型產生它,然後檢查名稱、地點和承諾是否保留。將絕不能遺忘的事實(例如關係和未解決的情節線)釘選在系統提示詞本身中。

如果回覆走向你不喜歡的方向,請重新產生它,而不是在聊天中與它爭論。爭論會污染歷史,並教導模型該場景是關於爭論的。當你想引導時,在括號中加入一行清晰的內容,例如關於下一個場景情緒的備註,並讓下一則回覆帶入它。保持角色名稱一致,並給予每個非玩家角色一行聲音備註,因為模型會模糊化聽起來相似的角色。

此模型誠實的限制

這是一個開放權重模型,由獨立提供者執行,並針對合法成人用途無內容拒絕進行調整。它不是任何模型供應商的官方 API,也不是跨多個模型的路由器。您無法在模型之間進行選擇,也不應期望它在每項任務上都與最佳封閉模型匹敵。

它僅生成文字。沒有您角色的圖像、沒有語音,也沒有用於設定書搜尋的嵌入,因此如果您想要肖像或語音,您需要為每個功能新增獨立服務。也沒有微調。品質也將取決於您的提示詞:模糊的系統提示詞會給出模糊的小說,而具有範例對話的良好角色設定檔比任何採樣調整都更有效。

有一條規則固定不變。涉及未成年人的性內容是不允許的,嘗試產生它的設定將不會獲得支援。保持角色為成年人,並保持你的使用合法。對於成人小說、伴侶應用程式和角色聊天,較少的拒絕和長視窗的組合是有用的部分。

問答

用於角色扮演時,本機 LLM 比託管 API 更好嗎?

兩者並非在所有情況下都勝出。本機端提供離線隱私與無按 token 計費的成本,而託管端則提供更長的上下文與無硬體限制。許多人會同時使用兩者。

我可以使用 SillyTavern 搭配此 API 嗎?

是的。SillyTavern 和類似應用程式接受 OpenAI 相容的端點。輸入 https://api.nsfwaiapi.com/v1 作為 URL、你的金鑰和模型 ID uncensored。

角色扮演工作階段可以使用多少上下文?

上下文視窗為 100,000 個 token,將提示詞與回覆合併計算。長對話成本較高,因為歷史記錄會在每個回合中傳送。

它會為我的角色產生圖像或語音嗎?

不會。該服務僅限文字,不支援圖像、音訊或影片生成,也不提供嵌入功能。

只需填寫一份表單即可取得金鑰

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

取得 API 金鑰

NsfwAiApi用於 NSFW 文字產生的無審查 LLM API