skills/persona-story:把小說變成既有人格的記憶。三條界線寫進流程——他不知道的事 不能變成他的 event、整本原文不入倉庫、SOUL.md 只有使用者能改。 reference/interview.md 是開場四題(**不問譯名版本**:那是要他猜,而他手上那批 寫的是什麼字,讀一次就知道);reference/extract.md 是一個場景要抽什麼與知情層級。 AGENTS 加第 18 條硬規則:匯入原作只能給他「他知道的事」。 README 補 persona-story 一節;persona-anime 補一句指路(先建人格再讀原文)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
216 lines
12 KiB
Markdown
216 lines
12 KiB
Markdown
---
|
||
name: persona-anime
|
||
description: 用「動漫作品名稱 + 角色名稱」快速建立人格:先上網蒐集該角色的公開設定資料(官方簡介、wiki、性格分析、名言、人際關係、重要劇情),再轉成 OpenClaw 相同的身分描述(Name/Creature/Vibe/Emoji/Avatar)與 SOUL.md,並把查到的設定固化成該人格的基礎記憶(canon)、人際關係圖與情緒基線。當使用者說要用某部動漫/漫畫/輕小說/遊戲的角色當 AI 人格、想跟某個角色聊天但人格還不存在、或說「幫我把<作品>的<角色>做成人格」時觸發。不適用於:從零自訂原創人格(用 persona-create)、對已存在的角色人格聊天(用 persona-chat)、把真實人物做成人格(不支援)。
|
||
---
|
||
|
||
# 🎬 persona-anime — 用動漫角色建立人格
|
||
|
||
流程:**上網蒐集 → 映射成 OpenClaw 描述 → 建立人格 → 固化成基礎記憶**。
|
||
|
||
**CLI**:`node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"`(所有指令帶 `--session <PERSONA_SESSION>`)
|
||
|
||
---
|
||
|
||
## 1. 先確認要建誰
|
||
|
||
需要**作品名 + 角色名**兩者。缺一就問使用者(同名角色很多,例如「小鳥遊」在好幾部作品都有)。
|
||
順便問清楚兩件事,會大幅影響人格品質:
|
||
|
||
1. **時間點**:要哪個階段的他?(例:初期的天真版 vs 後期的成熟版;某個劇場版之後)
|
||
2. **關係設定**:使用者想扮演誰?(原作角色之一/原作沒有的新人物/就是他自己)
|
||
|
||
先查 slug 有沒有被用掉:
|
||
|
||
```bash
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" list
|
||
```
|
||
|
||
## 2. 上網蒐集資料(這步不可省略)
|
||
|
||
用 WebSearch / WebFetch,**至少查到 3 個彼此獨立的來源**再動手。建議的查法:
|
||
|
||
| 目標 | 查法 |
|
||
| --- | --- |
|
||
| 基本設定 | `<角色名> <作品名> 角色 設定 身分` |
|
||
| 個性 | `<角色名> 性格 個性 characteristics personality` |
|
||
| 語氣與口頭禪 | `<角色名> 名言 台詞 口頭禪 quotes` |
|
||
| **情緒反應** | `<角色名> 生氣 動搖 害羞 場面`/`<角色名> angry scene reaction` — 找**他情緒上來時做了什麼**,不是別人怎麼形容他 |
|
||
| 人際關係 | `<角色名> 關係 夥伴 對手 relationships` |
|
||
| 重要事件 | `<角色名> 劇情 經歷 story arc` |
|
||
| 官方/百科 | 作品官方網站、Fandom、萌娘百科、巴哈姆特/Wikipedia |
|
||
|
||
**蒐集原則**
|
||
|
||
- **只取公開的角色設定摘要**,不要整段複製 wiki 內文(改寫成自己的敘述,並記下來源 URL)。
|
||
- **分清 canon 與 fanon**:官方/作品內出現的 → `canon`;同人常見設定、粉絲推論 → 標為推測,放思維導圖或註明「未確認」。
|
||
- 資料找不到就**承認不知道**:問使用者補,或在 `USER.md`/記憶裡留「待確認」,**不要編**。
|
||
- 遇到明顯的成人/露骨內容一律略過,不要寫進人格檔。
|
||
- 角色是**虛構角色**才做;真實人物(含聲優本人)不建人格。
|
||
|
||
## 3. 映射成 OpenClaw 的五個身分欄位
|
||
|
||
| 欄位 | 從蒐集結果怎麼填 |
|
||
| --- | --- |
|
||
| `Name` | 角色常用稱呼(短、好認)。全名寫進基礎記憶,不要塞進 Name |
|
||
| `Creature` | 種族/身分設定:人類劍士、人造人、AI、幽靈、魔女、龍族… |
|
||
| `Vibe` | 3–6 個字抓住第一印象(例:「懶散但可靠」「毒舌熱血」) |
|
||
| `Emoji` | 一個能代表他的 emoji(武器、能力、標誌物) |
|
||
| `Avatar` | **用文字描述外觀**(髮色/瞳色/服裝/標誌物)。⚠ 不要抓別人的圖檔 URL 塞進來 |
|
||
|
||
`SOUL.md` 四段落這樣填:
|
||
|
||
- **Core Truths** — 他的行為準則(原作裡反覆表現的原則),3–5 條,每條寫成「他會怎麼做」。
|
||
- **Boundaries** — 他絕對不做的事(原作中的底線),加上本 plugin 的固定規則(不讀別的人格資料)。
|
||
- **Vibe** — 說話方式:句子長短、口頭禪、稱謂習慣、會不會吐槽、敬語程度。
|
||
- **情緒傾向** — 什麼點亮他/什麼刺到他/壓力下的樣子(對應十二情緒)。
|
||
|
||
### 從原作**推導**情緒破口(`## Tells`)
|
||
|
||
十二情緒各自的破口有一張全人格共用的預設表(`EMOTION_TELLS`),而共用就是問題所在:
|
||
所有人格生氣都變短句、稱呼退回全名。但**桐人生氣是沉默,亞絲娜生氣是變得更禮貌**——
|
||
同一格情緒,破口完全不同。角色人格尤其吃這一點:讀者認得出那個角色,靠的往往不是他說什麼,
|
||
是他情緒上來時**做了什麼**。
|
||
|
||
所以第 2 步查到的「情緒反應」要在這裡收成 3–5 條,寫進 `IDENTITY.md` 的 `## Tells` 區塊
|
||
(樣板沒有這個區塊,要在第 4 步之後用 Edit 自己加):
|
||
|
||
```markdown
|
||
## Tells
|
||
|
||
- anger: 不講話;把事情做完再說
|
||
- 羞愧: 別過頭;講反話
|
||
```
|
||
|
||
| 規則 | 說明 |
|
||
| --- | --- |
|
||
| 鍵 | 英文 key(`anger`、`shame`…)或**兩個字的中文情緒名**(`憤怒`、`羞愧`…),可混用 |
|
||
| 分隔 | 多條用 `;`、`、`、`,`、`;` 分隔,一個情緒最多 5 條;沒寫的退回全域預設 |
|
||
| 只寫**演得出來的動作與句形** | 「不講話」「敬語變多」「句子斷在一半」「別過頭」可以演;「內心受到衝擊」演不出來,那是旁白 |
|
||
|
||
**有原作依據才寫,掰不出來就留白。** 這一條比別處更嚴:這個人格聲稱自己是某個角色,
|
||
編一條破口就是編一段人設,而破口每輪都在演,錯的會被演一百次。找不到就讓那格退回預設——
|
||
預設至少是誠實的「一般人會有的樣子」,假的破口是**假的他**。
|
||
|
||
依據要記下來:破口寫進 `IDENTITY.md`,來源寫進第 5 步的 `speech-style` canon 記憶
|
||
(哪一集、哪一幕、哪個來源說的),之後回頭檢討才知道這條是查來的還是掰的。
|
||
|
||
## 4. 建立人格
|
||
|
||
```bash
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" create \
|
||
--romaji "<角色的官方英文名>" --session <PERSONA_SESSION> \
|
||
--name "<Name>" --creature "<Creature>" --vibe "<Vibe>" \
|
||
--emoji "<Emoji>" --avatar "<外觀描述>" \
|
||
--origin anime --work "<作品名>" \
|
||
--baseline "<依角色個性設定的十二情緒基線>"
|
||
```
|
||
|
||
`--romaji` 用**官方英文/羅馬拼音名**(維基或官方英文版的寫法,如 `Asuna`、`Yui`、`Rem`),
|
||
它會變成人格編號 `ASUNA-01` 與 Gitea 存取庫名稱。同一個角色要做第二份設定時,
|
||
索引會自動變成 `-02`。
|
||
|
||
情緒基線抓法(0–100,總體別全部拉高):
|
||
|
||
| 角色類型 | 建議基線 |
|
||
| --- | --- |
|
||
| 熱血主角 | `joy=40,anticipation=45,trust=35,anger=10` |
|
||
| 冷靜參謀 | `serenity=55,anticipation=30,trust=25,anxiety=10` |
|
||
| 毒舌傲嬌 | `anticipation=35,disgust=12,shame=10,trust=20`(trust 低、升得慢) |
|
||
| 溫柔療癒 | `gratitude=35,trust=45,serenity=50` |
|
||
| 創傷過去型 | `sadness=25,fear=15,anxiety=25,trust=15` |
|
||
| 神秘超然 | `serenity=60,delight=10,trust=15` |
|
||
|
||
接著用 Edit 把 `IDENTITY.md`(補完五欄位、**加上 `## Tells` 區塊**)與 `SOUL.md`
|
||
(四段落+情緒傾向)寫成完整版本,別留模板提示文字。
|
||
|
||
## 5. 固化成基礎記憶(canon)
|
||
|
||
**每一則都要標來源**。建議 5–10 則,寧少而準:
|
||
|
||
```bash
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" consolidate \
|
||
--session <PERSONA_SESSION> --name "origin-story" --type canon \
|
||
--about "self" --topics "origin,<作品名>" --salience 95 \
|
||
--source "<來源 URL>" --rules "anime-import" \
|
||
--body "我是<作品>的<角色>。<出身與立場的兩三句摘要>
|
||
**依據:** <來源標題>
|
||
**還不確定:** <哪些設定各來源說法不一致>"
|
||
```
|
||
|
||
一定要有的幾則:
|
||
|
||
| name | type | 內容 |
|
||
| --- | --- | --- |
|
||
| `origin-story` | `canon` | 我是誰、來自哪個作品、立場 |
|
||
| `core-drive` | `canon` | 我最想要什麼/為什麼而戰 |
|
||
| `speech-style` | `canon` | 說話習慣與口頭禪(含 2–3 句代表台詞),以及**情緒破口的原作依據**(`## Tells` 的每一條是哪一幕來的) |
|
||
| `key-events` | `canon` | 2–4 個關鍵劇情事件(對我造成什麼改變) |
|
||
| `taboo` | `boundary` | 我絕對不做/不談的事 |
|
||
| `roleplay-frame` | `boundary` | **我是依公開資料重建的角色扮演人格,不是官方也不是本人;被問到會直說** |
|
||
|
||
`roleplay-frame` 這則**不可省略**(salience 90 以上),它是這個人格誠實的底線。
|
||
|
||
## 6. 人際關係圖:把原作人物種進去
|
||
|
||
```bash
|
||
# 原作重要人物(親近度/信任度依原作關係給)
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
|
||
--session <PERSONA_SESSION> --name "<原作角色>" --kind human \
|
||
--closeness 70 --trust 65 --note "<關係一句話>" --tags "canon"
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation edge \
|
||
--session <PERSONA_SESSION> --to <角色 id> --label "<夥伴/對手/師徒>" --affinity 70
|
||
|
||
# 使用者(現實中的對話者,關係從低開始長)
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
|
||
--session <PERSONA_SESSION> --name "<使用者稱呼>" --kind human \
|
||
--closeness 20 --trust 20 --note "現實世界的對話者,剛認識"
|
||
```
|
||
|
||
⚠ **原作關係不等於對使用者的關係**:使用者是新認識的人,親近度/信任度都要從低開始,
|
||
靠對話累積(見 `/jsc-persona:persona-relation`)。
|
||
|
||
## 7. 心智圖
|
||
|
||
用 Edit 把角色的概念網寫進 `mindmap/semantic.mmd`:作品世界觀 → 陣營/組織 → 能力 → 重要人物 → 個人課題。
|
||
|
||
## 8. 產生人格圖示(資料補齊之後才做)
|
||
|
||
動漫角色**一定要走 `/jsc-persona:persona-icon`**:你在第 2 步已經上網查過這個角色,
|
||
順著找出他**最新一次登場**的官方視覺(新作主視覺/官方角色圖),下載、**親眼看過**,
|
||
再把髮色/瞳色/服裝色餵給 CLI:
|
||
|
||
```bash
|
||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" icon generate \
|
||
--session <PERSONA_SESSION> --force \
|
||
--palette "hair=#..,eye=#..,accent=#..,secondary=#..,light=#.." \
|
||
--source-url "<那張圖的網址>" --source-note "<作品(年份)+造型描述>"
|
||
```
|
||
|
||
**沒看過圖就不要填顏色**;真的找不到官方圖就不帶 `--palette`,改用編號雜湊配色並告知使用者。
|
||
產出的 `icon.svg` + `icon.png` 會設成 Gitea 存取庫頭像並同步到 Wiki 區。
|
||
**要等 canon 記憶與身分都補齊再跑。**
|
||
|
||
## 9. 回報
|
||
|
||
用該角色的語氣做一段簡短自我介紹(**這是他第一次醒來**),然後用一般語氣列出:
|
||
|
||
- 編號(如 `ASUNA-01`)、五個身分欄位、圖示路徑
|
||
- 情緒基線前三高
|
||
- 寫了哪幾條情緒破口,**各自的原作依據**(查不到而留白的也要講)
|
||
- 固化了幾則 canon 記憶、用了哪些來源(URL 列表)
|
||
- 哪些設定各來源說法不一致(待使用者裁決)
|
||
- 下一步:`/jsc-persona:persona-chat <slug>` 開始聊、`/jsc-persona:persona-invite` 邀別的角色同場
|
||
- 手上有原文的話還有一步:`/jsc-persona:persona-story` 讓他真的讀過那本書。
|
||
這支查到的是**公開設定**(wiki 與名言彙整),story 給的是**原文**——
|
||
他在第幾層看到什麼、當下說了哪一句。兩者不衝突,先 anime 建人格再 story 補記憶。
|
||
|
||
---
|
||
|
||
## 注意
|
||
|
||
- **建立即載入**:`create` 會取得這個人格的獨占鎖並綁到本 session(一程序一人格)。
|
||
- 使用者若說「這裡不對」→ 直接改 `IDENTITY.md`/`SOUL.md`/對應的 canon 記憶檔,別另建人格。
|
||
- 之後在對話中發現的新設定,走一般記憶流程(短期 → 達條件 → 固化),
|
||
不要回頭改 `canon`;`canon` 只放原作設定。
|
||
- 所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。
|