LLM 在影片管線中的角色
如果你正在建立 nsfw 影片腳本 llm api 工作流程,首先要釐清的是勞務分工。語言模型負責撰寫,獨立的影片模型、編輯或拍攝負責製作素材。此服務僅提供第一部分:一個開放權重文本模型,針對合法成人用途調整為無內容拒絕回應,並透過 OpenAI 相容的端點提供服務。它不會渲染幀、合成聲音或建立圖片,也不提供嵌入或微調功能。
這仍涵蓋了針對成人觀眾專案的許多工作,例如虛構、角色扮演與伴侶式敘事。該模型可撰寫大綱、將其拆分為場景、撰寫對話與旁白、產生逐鏡列表,並為下游使用的任何影片工具撰寫提示詞。NSFW 管線頁面描述了此文字階段如何與堆疊的其餘部分連接。
有一條規則固定且適用於每個請求:禁止涉及未成年人的性內容。建立你的系統提示詞,確保每個角色都是成年人,並將此視為專案的必要條件,而非事後補綴。
四個階段的管線
當每個呼叫只執行一項工作並將結構化輸出移交給下一個階段時,腳本工作流程效果最佳。實際佈局如下:
- 故事聖經。 一份包含角色(均為成年人)、設定、基調與重複細節的文件。你只需撰寫一次,並在每次呼叫時傳送。
- 大綱。 一次呼叫將前提轉化為 8 到 15 個情節摘要。
- 場景腳本。 每個情節一次呼叫產生對話、動作行與旁白,使用故事聖經與前一個場景以保持連貫性。
- 分鏡表與提示詞。 每個場景的最後一次呼叫回傳 JSON:鏡頭、時長、攝影筆記與供你影片工具使用的提示詞字串。
這樣拆分可保持輸出簡短,使每個結果更易於審查,若你不滿意也更容易重新生成。這也意味著失敗的呼叫僅耗費一個場景的成本,而非整個腳本。
設定規則的系統提示詞
系統提示詞是基調、格式與限制的所在地。沒有拒絕行為的模型仍會遵循指示,因此提示詞的品質決定腳本的品質。具體說明類型、視角與應省略的內容。以下是針對成人觀眾的虛構作品起始點,旨在保持專業水準:
SYSTEM = '''You are a screenwriter for adult-audience fiction videos.
All characters are adults aged 25 or older, and you state each age in the character sheet.
Write in present tense, third person, with short visual action lines.
Keep dialogue natural and under 25 words per line.
Build tension and character through setting, glances and subtext.
Never include minors in any role or reference.
Follow the story bible exactly; do not change names, ages or relationships.
When asked for JSON, return only the JSON object.'''
請依專案調整。黑色電影懸疑片與浪漫喜劇需要不同的指示,提示詞內的一行風格範例通常比一段形容詞更能引導模型。
以 JSON 模式產生場景列表
在分鏡表階段,你需要程式碼可以讀取的輸出。JSON 模式會強制輸出可解析的物件。傳遞 response_format={"type": "json_object"},在提示詞中指定鍵名,並將 temperature 設低。此範例使用 Python openai 套件,搭配本站的 base URL 與模型 ID uncensored。
import json, os
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwvideogenerator.cc/v1",
api_key=os.environ["NOTRACK_API_KEY"],
)
SYSTEM = open("system_prompt.txt").read()
BIBLE = open("story_bible.txt").read()
def shot_list(scene_text):
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": (
"Story bible:\n" + BIBLE +
"\n\nScene script:\n" + scene_text +
"\n\nReturn a JSON object with key 'shots': a list of objects with "
"'number', 'seconds', 'camera', 'action' and 'video_prompt'."
)},
],
response_format={"type": "json_object"},
temperature=0.3,
seed=7,
)
data = json.loads(resp.choices[0].message.content)
return data["shots"]
for shot in shot_list(open("scene_03.txt").read()):
print(shot["number"], shot["seconds"], shot["video_prompt"])
在移交前驗證結果。檢查 shots 是否存在,seconds 是否為數字,以及提示詞字串是否非空。如果解析失敗,重試一次。失敗或拒絕的請求不會收費,因此重試錯誤呼叫不會產生額外費用。
創意文本的關鍵設定
不同階段需要不同的設定,API 會傳遞通常的設定:temperature、top_p、stop、seed 以及頻率與存在懲罰。
- 大綱與對話: temperature 0.8 至 1.0 以增加多樣性。產生兩到三個變體並選擇其中一個。
- 分鏡表: temperature 0.2 至 0.3,加上固定的
seed,以便相同輸入的重跑結果具有可比性。 - 重複: 長場景有時會循環相同的短語。小的頻率懲罰(如 0.3)有幫助。
- 長度控制:
max_tokens為可選參數,但將場景的輸出上限設為800可讓結果更為精煉。stop序列(例如"END SCENE")可讓你在指定的標記處結束輸出,該標記由你要求模型生成。 - 串流輸出: 如果作家即時觀看輸出,請開啟
stream: true。請注意,串流會佔用其並行槽位直到結束。
快速入門 列出所有支援的參數,端點為 POST /v1/chat/completions 與 GET /v1/models。
使用 100k 上下文視窗保持連貫性
一致性是生成腳本時常見的失敗原因:名字改變、年齡漂移、道具消失。上下文視窗為 100,000 token(包含提示詞與補完),這足夠將整個故事聖經、大綱和幾個完成的場景放入每次請求中。在此規模的專案中,你不需要檢索系統。將事實貼入,讓模型每次讀取它們。
上下文並非免費,但很便宜。假設你的故事聖經和大綱總共 20,000 token,你撰寫 50 個場景,每次請求返回約 600 token:
- 輸入:50 x 20,000 = 1,000,000 token x 每 1M $0.15 = $0.15
- 輸出:50 x 600 = 30,000 token x 每 1M $0.50 = $0.015
- 總計:50 個場景共 $0.165
對相同的 50 個場景增加一個分鏡表處理,每次輸入 3,000 token,輸出 500 token:輸入 150,000 token 成本為 $0.0225,輸出 25,000 token 成本為 $0.0125,額外成本 $0.035。完整腳本和分鏡表成本約為 $0.20,低於你可以從 API 金鑰頁面 取得的 $0.50 免費試用額度。
請記住,視窗必須同時容納提示詞和答案。20,000 token 的聖經留有充足空間,但 95,000 token 的提示詞會為補完留下很少空間。
審查與修正輸出
將每個生成的場景視為初稿。三次檢查可在問題發生在影片工具之前捕捉大多數問題。首先,執行一致性檢查:將完成的腳本連同故事聖經一起發送,要求模型列出任何名字、年齡、地點或時間線不一致的地方。第二次請求使用低的 temperature,成本低廉且經常能發現你肉眼未察覺的漂移。其次,朗讀對話。在螢幕上看起來沒問題的台詞,口語時可能很笨拙,旁白演員或語音合成工具會立即暴露它們。第三,檢查鏡頭持續時間是否加總到你計劃的長度。模型在算術上很鬆散,因此在程式碼中加總 seconds 欄位,而不是信任模型寫出的總和。
當場景未達標準時,抗拒重寫整個系統提示詞。在用戶訊息中添加一個修正指示,例如「更短的動作行」或「更多對話,更少描述」,然後單獨重新生成該場景。保持故事聖經和系統提示詞固定,同時一次只變化一個指示,可以清楚看出哪個變更有效。seed 參數在此很有用,因為固定的 seed 搭配小的提示詞編輯可以隔離編輯的效果。
限制、誠實與後續步驟
在建立之前,有一些明確的限制。該模型僅限文字,因此每個影片、圖片與音軌都必須來自其他工具。它是由獨立供應商運行的一個開放權重模型,並非任何大型廠商的官方 API。品質隨提示詞變化,因此請計劃讓人員對每個腳本進行審查;將輸出視為草稿。
關於吞吐量,完整金鑰允許 8 個並行請求與每分鐘 300 個,而試用金鑰允許 2 個與每分鐘 60 個。如果你並行撰寫場景,請調整工作池大小以匹配。帶有 rate_limited 或 concurrency 的 429 表示應減速;帶有 Retry-After: 5 標頭的表示服務短暫過載,請等待五秒後重試。提示詞不用於訓練。
付費額度從 $20 儲值開始,任何整數金額最高至 $500,$50 起加 5%,$100 起加 10%,$200 起加 15%。僅接受加密貨幣付款,TRC20 上的 USDT 或 Base 上的 USDC,額度永不過期。目前條款請見 定價頁面。對於上述類型的專案,$20 足以涵蓋數十個完整腳本。
