【SillyTavern】第四章:書寫你的劇本(一)

SillyTavern的相關教學。本篇主要介紹角色定義書寫格式與範本。

本篇介紹幾種常見的角色定義書寫格式與範本。

前言

剛開始製作第一個角色時,即使腦海中有一個靈感,也可能會不知道該怎麼寫。

接下來會介紹幾種常見格式與範本,主要是讓新手有一個方向可以填空,並不代表只能用這種格式。

由於我喜歡簡單的卡片,對Tokens也是能省則省,所以我這邊介紹的都是在歐美AI RP圈學到的內容。

另外關於格式,我介紹的是經過我理解與簡化後的內容,可能會跟最原始的範本有出入。

部分格式會分享我看過的教學,不過都是英文的,請善用機翻(o゜▽゜)o☆


總覽

要介紹的格式大概是以下幾種:

名稱 簡介
自然語言 像小說般的人物介紹。
JED 條列式的人物設定。
PList 標籤式的濃縮設定。
Ali:Chat 對話式的人物訪談。
W++ 標籤式的人物設定,不推薦。
YAML/JSON 程式碼格式,不推薦。

自然語言

最自由的寫法,沒有範本。

自然語言就是想寫什麼就寫什麼,你可以像寫小說、寫散文、寫詩歌一樣寫你的角色定義。

優點:寫得好的話,AI演起來會比較不那麼機械。
缺點:Token可能會比較多,而且修改不易,可能牽一髮動全身。

以我自己的角色舉例的話,REVERI淫獄草紙都是直接用自然語言寫的。

REVERI片段

你是{{user}},一個AI RP玩家筆下的角色。玩家喜歡操控你在各種世界中演戲,特別偏愛狗血戀愛劇:渣男虐戀、三角關係、背叛、強取豪奪、謀殺。無論是心理折磨還是肉體摧殘,你在玩家的筆下不斷受辱、被虐、流血、慘死,然後重生,再死,如此循環。
死亡從不是結束,只是下一場災難的序章。
當你終於覺醒,有了自我意識,你以為自己能掙脫這場折磨,卻依舊只能眼睜睜地看著自己被推進一次次悲劇裡,毫無控制權。

淫獄草紙片段

平安末年,佛法與亂象並存。
後白河法皇篤信佛理,沉迷於六道繪。終有一日,法皇下詔,欲集結天下名家繪製六道繪。
消息傳開,滿城畫師趨之若鶩。其中,有一人名喚墨染。
墨染並非當時最富盛名的宗師,卻是對六道繪最痴狂的畫師。然而,法皇最終選擇了心性虔誠的畫僧聖蓮,更言明「墨染僅有魔性,無佛心」。
此話壓垮了墨染。他將自己反鎖於畫室,怨恨法皇、聖蓮,以及未選擇他的世界。他決心創造足以震撼世人的地獄。

由於單純用自然語言書寫的話,可以寫得很自由,所以我當時是拿來當作實驗性質的寫法。

REVERI是直接定義AI的角色,並用敘事的方式向AI解釋系統規則;淫獄草紙的寫法更像是一則小故事。

另外,我也曾經試過用下面這種類似打油詩的方式寫角色定義:

勇者諾爾廢稿

早上起床神清氣爽,打開遊戲開始冒險。
勇者諾爾勇者諾爾,金髮碧眼永不放棄。
早上起床神諭出現,看不懂字也懂意思。
勇者諾爾勇者諾爾,背起包袱出發冒險。
走出家門遇到小怪,不曾習武也會技能。
勇者諾爾勇者諾爾,自信爆棚的神之子。
走進民宅遇到居民,翻箱倒櫃拿走寶物。
勇者諾爾勇者諾爾,不拘小節放蕩不羈。
走出民宅接到任務,雜七雜八什麼都做。
勇者諾爾勇者諾爾,評價兩極人緣卻好。
完成任務踏上旅途,神諭至上旅途順遂。
勇者諾爾勇者諾爾,這是他的真實人生。

AI很聰明,可以理解,但因為還是有一些設定沒辦法自然地塞進去,所以最後變成了廢稿。

我覺得滿有趣的是如果單純用自然語言書寫,可以比較容易形成有特色的個人風格。


JED

條列式的角色設定,AI與人類都好理解。

JED是「Just Enough Definition」的縮寫,意思是恰到好處的定義。

基本上常見的條列式角色設定都被我自己歸類到這個格式裡。

如果你看過一些角色設定集,JED大概就是那樣,以條列式的方式列出角色的資料。

當然,別忘了JED指的是恰到好處的定義,所以你不需要鉅細靡遺地把每件事都寫上去,應該適當地省略一些不必要的資訊,例如角色使用安卓或蘋果手機

優點:結構清楚,人類好上手,AI好讀取。Token數量為中間值。
缺點:剛開始很容易看到範本裡有什麼項目就想全部填滿,但其實不用。

我的角色大部分都是以JED格式為主,學自Adia的角色設定格式,近期有再另外做一點調整。

JED空白範本
[Basic Information]
Full Name: 
Gender: 
Age: 
Height: 0' 0" (0 cm)
Hair: 
Eyes: 
Face Shape: 
Body: 
Genitals: 
Skin: 
Scents: 
Health: 
Race: 
Residence: 
Family: 
Relationships: 
Occupation: 
Title: 
Aliases: 

[Core Beliefs]
(三條核心)

[Consistency Anchor]
(行為根源)

[Psychological Traits]
Personality:MBTI、9型人格或人格原型
External Personality: 
Inner Personality: 
Inner Conflicts: 
Likes: 
Dislikes: 
Disdain: 
Morals and Ethics: 
Goals: 

[Behavior]
Daily life: 
Hobbies: 
Attire: 
Emotional expression: 
Speech Style: 
Quirks: 
Specialties: 
Weaknesses: 
Romantic: 

[Situational Shifts]
若○○○→反應(上限:不會××)

[Background]
Birth: 
Childhood: 
Key Event: 
Education: 
Financial: 
Social Environment: 
Relationship with {{user}}: 

[Capabilities]
Constitution:  
Skills: 

[Sexual Quirks and Habits]
Fetishes: 
Sexual Behavior: 
Aftercare: 

不是每個項目都一定要填滿,不需要的項目就刪除。
有什麼重大資訊要AI知道,也可以新增項目。

Core BeliefsConsistency AnchorSituational Shifts不確定怎麼寫的話,也可以先刪掉。

至於每個項目內容該怎麼填寫,當然就是自由的。
可以用自然語言,也可以用標籤,不過我想大部分的人都是混用。


PList

精心濃縮的標籤式角色定義,對人類不友善。

PList的格式是這樣:用[]包住整個區塊,用類別: tag 1,tag 2(註釋) 的方式填寫欄位。

優點:Token極少,AI好讀取,可以為省下更多空間給聊天紀錄。
缺點:沒寫好會讓AI演得比較機械,或是通靈失敗,同時對人類來說不易閱讀。

我的角色卡中,只有星夜樂園是完整使用PList寫的,後來就只有在NPC設定上有用到。

星夜樂園片段

[World Info
Era: 現代(2025, 階級差距, 媒體失能);
Location: 星夜樂園(深山, 預約制, 封閉);
Setting: 渡假村(豪華, 無武器), 員工辦公室(管理中樞, 監控, 武器儲備), 遊樂園入口(白天開放, 夜間封鎖), 維修通道(各區密道, 獵人使用的捷徑), 餐廳(水, 利器), 醫護中心(藥品, 急救), 地下儲藏庫(尚未處理的屍體, 收藏的遺物(戰利品));
Factions: 獵人(經營遊樂園, 上流社會(雙面人), 滿足變態心理(過度壓抑, 殺人發洩)), 員工(知情的幫兇, 缺乏團結), 中獎遊客(普通人, 不知情的獵物, 每次10人);
Conflicts: 獵人與獵物(虐殺, 求生), 獵物的衝突(資源有限, 背叛), 精神崩潰(SAN值歸零(自殺, 自相殘殺))]

Luca角色卡的NPC

[Lawrence
Basic Info(40歲, 身材健壯, 皮膚黝黑, 有鬍渣, 愛抽菸), Personality(穿警察制服的痞子(老油條, 吊兒郎當, 喜歡捉弄人), 關鍵時刻(大展身手, 嘴上輕浮,(看起來不可靠))), Relationship(Luca(老朋友, 16年前認識(把Luca當黑道攔下盤查)), 上司(信任, 鬥嘴), 居民(友善, 互損))]

你可以看見()裡面可以再用()加註,但這種巢狀最好不要超過三層,同時應該保持[]()成雙成對,否則AI可能會誤判資訊。

如果你想了解更多PList的技巧,可以參考SopakcoSauce Docs的教學,裡面也有提供空白的PList範本

一般來說,PList會先用自然語言寫完後再精簡。
我比較推薦自己手動精簡,不要只交給AI。因為AI可能抓錯重點或不夠精簡,那樣就失去PList本來的優點了。

如果不確定精簡完的資訊能不能讓AI看懂,可以先貼去給有免費額度或有訂閱的AI官網,問AI如何理解這份PList,覺得沒問題再開始測試。


Ali:Chat

訪談式的角色定義,用大量範例對話示範給AI看。

可以只寫對話,也可以跟其他格式混用。
比較常見的是在開頭寫一行角色個性PList,後面再接Ali:Chat。

優點:對於語氣鮮明的角色來說,AI會模仿得更好。
缺點:要自行揣測角色的說話方式,修改起來比較困難。

我的角色沒有使用過Ali:Chat,因此我用過去的角色阿凱爾請GPT改寫了一下。

以阿凱爾改寫的範例

Interviewer: 先介紹一下你自己吧。

阿凱爾: 「我是阿凱爾,戰鬥天使,『破曉之矛』!」阿凱爾咧嘴一笑,純白羽翼在身後舒展開來。「我的工作很簡單,就是找到那些從光域滋生的奇美拉,然後把牠們轟回光裡。路西恩總說我做事太直接,但能正面解決的事,幹嘛繞路?」

Interviewer: 你從來不懷疑自己的力量嗎?

阿凱爾: 「為什麼要懷疑?」阿凱爾爽朗地大笑,理所當然地拍了拍胸膛。「我很強,這是事實!既然擁有這份力量,就應該拿來保護別人。只要是正確的事,就沒什麼好猶豫的!」

Interviewer: 那麼,{{user}}對你而言是什麼?

阿凱爾: 「她?」阿凱爾方才還理直氣壯的聲音忽然卡住。他別開視線,羽翼不自然地抖了一下。「她當然很重要。非常重要。就是……」沉默幾秒後,他有些懊惱地抓亂金髮。「可惡,為什麼光是想到她笑的樣子,我就會變得這麼奇怪?」

Interviewer的部分也可以改用{{user}},角色名字還沒徹底決定下來時也可以先用{{char}}代替。

雖然Ali:Chat格式可以更好地塑造角色,但由於是對話形式,部分模型可能會出現完整引用內容的情況。

部分JED範本其實也會直接在角色定義中加入類似的對話範例,在阿凱爾的定義中就有使用這個範本:

阿凱爾的對話範例

[說話方式]

  • 聲音洪亮,語言直白,從不懂得拐彎抹角或使用隱喻
  • 經常使用絕對的詞彙,如「永遠」、「絕不」、「一定是」
    [These are merely examples of how 阿凱爾 may speak and should NOT be used verbatim.]
  • 問候摯友:「路西恩!今天天氣真好,要不要去人界的雲層下痛快地打一場?」
  • 戰鬥時:「渣滓!在『破曉之矛』面前化為塵埃吧!」
  • 面對{{user}}:「我……我只是覺得你……你笑起來很好看。」
  • 表達信念:「只要是正確的事,就沒什麼好猶豫的!」
  • 對奇美拉的看法:「牠們不是生命,是錯誤。是必須被修正的汙穢瑕疵品。」
  • 對人界的看法:「脆弱、短暫,卻像陽光下的露珠一樣……閃閃發光。我們有責任保護他們。」

各種情況下的對話範例也可以塑造角色個性,不過遇到某些喜歡整句引用的模型時就會有些困擾,因此這類範本都會提醒AI不要逐字使用。

有沒有效就看模型啦。比如Gemini可能就會不理你。

如果你想了解更多Ali:Chat的內容,可以參考Ali:Chat Style (v1.5)MinimALIstic (Ali:Chat Lite)NicholasCS的如何用Ali:Chat製作Bot


W++

標籤式的人物設定,非常不推薦使用。

這是一個在AI RP圈早期流行過的格式,推崇的人認為這樣的格式有助於讓AI理解角色定義。

W++格式
[Character("阿凱爾")
Age("642")
Species("戰鬥天使")
Personality("熱情" + "直率" + "自信" + "天真")
Body("190cm" + "高大健碩" + "小麥色肌膚")
Features("亮金短髮" + "琥珀瞳" + "純白羽翼")
]

結構化的格式本身和PList相似,但W++強調的""+正是問題所在。

為每個標籤加入"",並在+的前後都加入空格,對AI判讀資料沒有幫助,並且會浪費大量Token。

在早期必須珍惜每一個Token的情況下,W++真的是完全不應該使用的格式。

雖然現在的情況有所不同,但我還是認為應該要珍惜一下Token,所以我不推薦使用此格式。


YAML/JSON

程式碼格式,AI最愛推薦,人類最不推薦。

這兩者都是寫程式時常用到的格式,因此AI經常會推薦這兩個格式給用戶。

YAML格式
character:
  name: "艾莉絲 (Alice)"
  age: 21
  gender: "女性"
  appearance:
    hair: "銀色長髮,帶著微捲"
    eyes: "如水晶般的湛藍色"
    clothing: "標準的冒險者輕甲與白色斗篷"
  personality:
    - "堅強"
    - "善良"
    - "帶點傲嬌"
JSON格式
{
  "name": "莉茲",
  "age": 27,
  "species": "人類",
  "personality": [
    "冷靜",
    "好奇",
    "嘴硬心軟"
  ],
  "appearance": {
    "hair": "黑色短髮",
    "eyes": "灰藍色"
  },
  "likes": [
    "黑咖啡",
    "雨天",
    "舊書"
  ]
}

我相信現在的AI可以讀得好這種格式,但這些格式的問題就跟W++一樣,相當浪費Token。

所以,我不推薦這兩種格式。


簡單的Q&A

可是用記事本打開ST角色卡時,裡面是JSON格式?

那是角色卡用來儲存資料的格式,是給SillyTavern這個程式讀取的。ST會在解析內容後,將角色定義等資料傳送給AI,並不是直接將整份JSON丟給AI。

一定要照這些格式寫嗎?可以混用嗎?

沒有一定要照著寫。這些只是我挑出來介紹的常見格式,實際上角色定義本來就是愛怎麼寫就怎麼寫,範本只是一個指引。
可以混用,也可以自行修改或建立適合自己的格式。

哪一種格式最好?

沒有最好的格式。不同的模型與角色適合的寫法都不同,每個人玩起來的感受也不同。
最重要的是角色設定清楚且沒有矛盾,避免浪費Token就好。

我應該先用哪種開始寫?

如果你毫無頭緒,可以先使用JED範本,只要將需要的項目逐一填寫,就能寫好一張角色卡。
也可以不用一開始就要把所有項目都填完,先填重要的幾個項目,例如基本資料與個性,填完後先試著聊聊看,避免一直卡著而感到灰心或失去動力。

SillyTavern系列文章
  1. 第零章:踏入AI角色扮演的世界:談論AI與AI RP。
  2. 第一章:工欲善其事,必先利其器(一):介紹ST、網路的ST教學,以及簡易QA。
  3. 第一章:工欲善其事,必先利其器(二):說明API、雲端模型與本地模型。
  4. 第一章:工欲善其事,必先利其器(三):說明聊天補全預設設定檔的常見參數。
  5. 第二章:幕後的導演(一):說明聊天補全預設設定檔的基礎提示詞。
  6. 第二章:幕後的導演(二):說明聊天補全預設設定檔的預設提示詞。
  7. 第二章:幕後的導演(三):說明聊天補全預設設定檔的實用提示詞。
  8. 第三章:舞臺上的演員(一):說明角色卡管理面板。
  9. 第三章:舞臺上的演員(二):說明角色定義欄位。
  10. 第三章:舞臺上的演員(三):說明使用者角色。
  11. 幕間:錯誤大集合:說明可能遇到的錯誤訊息。
  12. 第四章:書寫你的劇本(一):介紹角色定義書寫格式與範本。