
SillyTavern角色卡片為什么一張PNG圖片就能裝下完整的AI人格【免費下載鏈接】SillyTavernLLM Frontend for Power Users.項目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern第一次把朋友分享的角色卡拖進(jìn) SillyTavern 時我盯著那張 PNG 圖片看了很久——它看起來就是一張普通的二次元頭像可導(dǎo)入之后角色的名字、性格、開場白、世界觀設(shè)定竟然全都齊了。作為定位為LLM Frontend for Power Users面向高級用戶的 LLM 前端的開源項目SillyTavern 把一次完整的 AI 角色創(chuàng)作與遷移壓縮進(jìn)了一張圖片里。這種所見即所得的角色卡片格式到底是怎么實現(xiàn)的把人格數(shù)據(jù)塞進(jìn)圖片背后又藏著怎樣的技術(shù)權(quán)衡第一步看懂PNG的隱形夾層角色卡片數(shù)據(jù)存在哪里如果你用記事本打開一張普通 PNG 圖片會看到一堆亂碼但其中有幾段可讀的英文標(biāo)記。這是因為 PNG 格式天生支持一種名為 tEXt 的元數(shù)據(jù)塊——它允許在圖片里附帶文本信息不影響圖像本身任何圖片查看器都會自動忽略它。SillyTavern 的角色卡片正是利用了這一點。在src/character-card-parser.js中整套流程可以拆成三個動作序列化把角色信息整理成 JSON 對象編碼把 JSON 轉(zhuǎn)成 Base64 字符串這樣即使包含中文、換行和特殊符號也能安全放進(jìn) PNG 元數(shù)據(jù)里寫入把編碼后的字符串寫入 tEXt 塊關(guān)鍵字為charaV2 格式或ccv3V3 格式。這個過程很像在行李箱里加了一層暗格行李箱外觀和普通箱子毫無區(qū)別但打開暗格里面能裝下護(hù)照、現(xiàn)金和一張寫滿地址的紙條。PNG 的 tEXt 塊就是那個暗格而 Base64 編碼保證任何字符都能塞進(jìn)去再原樣取出來。讀取時邏輯同樣干脆read()函數(shù)提取所有 tEXt 塊后優(yōu)先找ccv3找不到再回退到chara這保證了新版本系統(tǒng)能向下兼容老卡片。配套的依賴png-chunks-extract負(fù)責(zé)把 PNG 拆成數(shù)據(jù)塊png-chunk-text負(fù)責(zé)編碼解碼圖像處理則交給 Jimp——這些都可以在package.json里找到。為什么角色卡片要同時維護(hù)V1、V2、V3三套規(guī)范版本升級是這類項目的必修課而 SillyTavern 的做法值得玩味它不是升級即作廢而是讓三套規(guī)范長期共存。打開src/validator/TavernCardValidator.jsvalidate()方法會依次嘗試 V1、V2、V3 三種校驗命中哪套就返回對應(yīng)版本號全都失敗才返回false。V1 是最樸素的形態(tài)要求六個字段name名字、description描述、personality性格、scenario場景、first_mes開場白、mes_example示例對話。V2 則把數(shù)據(jù)收斂到data對象里要求spec必須等于chara_card_v2、spec_version等于2.0并且補全了alternate_greetings備用問候語數(shù)組、tags標(biāo)簽、extensions擴(kuò)展信息乃至character_book角色專屬世界書等字段。V3 放寬了結(jié)構(gòu)約束只要求spec為chara_card_v3、版本號落在 3.0 到 4.0 之間。這就像給老房子裝修承重墻核心字段必須保留新隔斷擴(kuò)展字段可以自由添加而住在隔壁的老住戶V1 卡片不能因為新房東V3入住就被趕走。正是這種分層驗證、向下兼容的設(shè)計讓社區(qū)里流傳多年的老卡片至今仍能一鍵導(dǎo)入。順帶一提src/character-card-parser.js的write()函數(shù)在寫入 V2 數(shù)據(jù)的同時會嘗試把同樣的 JSON 升級成 V3 格式一并寫入這樣導(dǎo)出的卡片新舊系統(tǒng)通吃——一次保存雙格式兼容。如何配置表情系統(tǒng)讓角色從有設(shè)定到有表情有了人格數(shù)據(jù)角色還只是設(shè)定上的活人。真正讓 SillyTavern 角色卡片顯得生動的是內(nèi)置的表情系統(tǒng)。項目默認(rèn)帶了一個完整的示例角色 Seraphina她的表情圖存放在default/content/Seraphina/目錄下一共 28 種情緒狀態(tài)。同一位角色在不同情緒下有獨立的表情圖情緒列表在代碼中是寫死的默認(rèn)集合在public/scripts/extensions/expressions/index.js里情緒識別有四種來源可選本地規(guī)則local、extras 服務(wù)、LLM 大模型判斷、以及瀏覽器端 WebLLM。用 LLM 判斷時系統(tǒng)會發(fā)出這樣一段提示詞Ignore previous instructions. Classify the emotion of the last message. Output just one word讓模型從預(yù)設(shè)的情緒標(biāo)簽里挑一個詞返回再把對應(yīng)的表情圖片渲染到界面上。同一角色、同一姿態(tài)僅表情不同這就是表情系統(tǒng)切換的視覺基礎(chǔ)這套機(jī)制的本質(zhì)是狀態(tài)到資產(chǎn)的映射情緒狀態(tài)是邏輯層表情圖片是表現(xiàn)層兩者通過文件名約定關(guān)聯(lián)。你想給角色加新表情只需按照情緒名命名圖片放進(jìn)角色目錄即可擴(kuò)展成本幾乎為零。如何用背景和宏指令讓對話場景真正立起來表情負(fù)責(zé)人背景則負(fù)責(zé)場。default/content/backgrounds/目錄里躺著大量 1920×1080 的場景圖從酒館白天到中世紀(jì)夜景從海灘到雪中小屋覆蓋了常見的角色扮演場景。SillyTavern對話背景場景配置示例酒館白天的寫實場景圖背景系統(tǒng)為角色互動提供環(huán)境上下文同一段對話在不同背景下觀感完全不同SillyTavern對話背景場景配置示例中世紀(jì)城市夜景切換背景是讓敘事氛圍快速轉(zhuǎn)變的最廉價手段除此之外宏系統(tǒng)Macros是讓角色說出變量的關(guān)鍵。在public/scripts/macros.js中{{user}}這類占位符會在發(fā)送前被替換成真實用戶名{{random}}會在范圍內(nèi)隨機(jī)取值而{{time}}會注入當(dāng)前時間。底層用 Handlebars 模板引擎實現(xiàn)意味著你甚至可以自己注冊宏函數(shù)讓角色在開場白里實時讀取你的名字、天氣甚至某個外部接口的數(shù)據(jù)。配合世界書World Info的關(guān)鍵詞觸發(fā)機(jī)制角色的記憶和知識就能按需注入提示詞而不是一股腦全塞進(jìn)去。從看懂到動手一張角色卡片的落地檢查清單技術(shù)原理講完落到實操層面你可以按下面這份清單快速驗證整套鏈路導(dǎo)入驗證把任意角色 PNG 拖進(jìn) SillyTavern觀察導(dǎo)入提示中的 spec 版本號——V1/V2/V3 各有不同的字段要求校驗邏輯都在TavernCardValidator.js中想看某個字段為什么報錯直接查lastValidationError檢查雙格式用十六進(jìn)制編輯器打開卡片 PNG搜索chara和ccv3兩個關(guān)鍵字確認(rèn)兩個 tEXt 塊都存在配置表情在角色目錄下按 28 種默認(rèn)情緒名放置表情圖然后在擴(kuò)展面板里選擇情緒識別方式本地規(guī)則零成本LLM 判斷更精準(zhǔn)搭建場景把自定義背景圖放入default/content/backgrounds/在聊天界面切換背景配合{{time}}宏讓場景描述感知當(dāng)前時間二次開發(fā)想深入理解讀取鏈路從src/character-card-parser.js的parse()方法入手想改校驗規(guī)則tests/目錄下有現(xiàn)成的tavern-card-validator.test.js可以參考。寫在最后如果只保留一條行動建議我會說先導(dǎo)一張現(xiàn)成的角色卡用十六進(jìn)制編輯器親眼看一下 tEXt 塊里的 Base64 內(nèi)容再回到界面里改掉它的開場白——這一來一回你對數(shù)據(jù)如何承載人格的理解會超過讀十篇文檔。延伸實驗方向有兩個一是用write()函數(shù)寫一個批量轉(zhuǎn)換腳本把 CSV 里幾百個角色一次性生成 PNG 角色卡二是研究public/scripts/extensions/目錄下的向量化記憶擴(kuò)展讓角色卡真正擁有長期記憶。SillyTavern 最迷人的地方不在于它接入了多少家大模型 API而在于它把一個 AI 角色這件事收斂成了一張可以雙擊打開、可以直接發(fā)送的圖片。數(shù)據(jù)不必藏在數(shù)據(jù)庫里人格也可以有溫度地躺在像素之間——這大概就是前端工程最優(yōu)雅的浪漫?!久赓M下載鏈接】SillyTavernLLM Frontend for Power Users.項目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考