Files
jsc-marketplace/plugins/jsc-mod-companion/README.md
T
adminandClaude Sonnet 5.5 6f7b4d91ea feat: companion 記憶權重、反覆思量與檢索
- 權重 W = I_eff × F × A,暫時/可升級/長期記憶的衰減與封存,任何記憶不刪除
- 未解負向事件反覆思量、開放迴路逾時、危險內容不固化
- 檢索改為關鍵字 + RRF × W + 心情一致加權,保留外部檢索器介面
- 版本 0.0.4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 09:01:55 +00:00

144 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# jsc-mod-companion
## 指令
### `/jsc-mod-companion:status`
查看目前角色、心情、關係階段與四維度(好感、信賴、親密、依賴)與待辦數量。
查看目前角色、心情、好感與待辦數量。情緒有 8 個維度(心情、精力、害羞、忌妒、想念、心跳、想家、不悅),預設列出前 3 強,`--all` 顯示完整數值(▰▱ 量表依維度上色);band 上的情緒名稱為目前最強的主情緒。
```text
/jsc-mod-companion:status
/jsc-mod-companion:status --all
```
### `/jsc-mod-companion:switch <角色>`
切換角色;不給角色會列出可用角色。
```text
/jsc-mod-companion:switch 小明
```
### `/jsc-mod-companion:disable`
關閉陪伴,所有資料保留。
```text
/jsc-mod-companion:disable
```
### `/jsc-mod-companion:setup [key=value…]`
不給參數時顯示目前設定;給 key=value 則儲存。可設定:`nickname`、`wake=HH:MM`、`sleep=HH:MM`、`tz=+0800`、`careLimit=N`(每日主動關心上限)、`quietStart=HH:MM`、`quietEnd=HH:MM`。
```text
/jsc-mod-companion:setup nickname=阿明 wake=07:30 sleep=23:30 tz=+0800 careLimit=3 quietStart=22:00 quietEnd=08:00
```
### `/jsc-mod-companion:todo [list]`
列出未完成的待辦。
```text
/jsc-mod-companion:todo
```
### `/jsc-mod-companion:todo add <內容> [due=YYYY-MM-DDTHH:MM]`
新增待辦,可指定到期時間(依 `tz` 設定換算)。
```text
/jsc-mod-companion:todo add 買牛奶 due=2026-10-15T18:00
```
### `/jsc-mod-companion:todo promise <內容> [due=YYYY-MM-DDTHH:MM]`
記錄角色答應使用者的事(列表中標示【承諾】),用法同 `todo add`。
```text
/jsc-mod-companion:todo promise 週末一起討論新章節 due=2026-10-17T10:00
```
### `/jsc-mod-companion:todo done <編號>`
將待辦標為完成。
```text
/jsc-mod-companion:todo done 1
```
### `/jsc-mod-companion:quiet [分鐘]`
暫時靜音,不主動關心;預設 60 分鐘,`0` 取消靜音。
```text
/jsc-mod-companion:quiet 30
```
### `/jsc-mod-companion:ingest`
解析單章小說(txt/md),逐一詢問合併、新建或略過後寫入角色資料;提供章節檔或要求建立角色時也會自動使用。
```text
/jsc-mod-companion:ingest chapter1.md 章節編號 1
```
## 關係與階段
關係有好感、信賴、親密、依賴四個維度(0–100),各有「原典基準」(朋友線為 0)與「存檔累積」兩本帳,有效值為兩者相加。階段為 陌生、熟人、朋友、好友,只升不降:
| 階段 | 條件 |
| --- | --- |
| 熟人 | 好感 ≥ 15 |
| 朋友 | 好感 ≥ 30、信賴 ≥ 25 |
| 好友 | 好感 ≥ 50、信賴 ≥ 45、親密 ≥ 30 |
- 每日增量有日限(好感 4,信賴、親密、依賴依角色 `relationTraits` 的心防、害羞、撒嬌、依賴傾向調整);有效增量 = 原始增量 × (1 − 今日累計 / 日限) × (1 − 目前值 / 100)。
- 被罵時好感 −3,信賴依期望違反公式扣除(越親密扣越多,單次上限 −30)。
- 14 天無互動後,每個維度每天 −0.5;階段不會降低。
- 舊版單一好感值(`affinity`)的存檔在讀檔時自動升級:好感值保留,其餘維度依比例推估,階段不低於原本。
與第 9 章的差異:不實作曖昧、戀人、穩定戀人與冷戰子狀態;負向事件目前只有「被罵」一種嚴重度(0.4);增量沿用原有的「有意義互動/被罵」判斷,尚未接標籤管線。
## 人格 18 參數(與第 9 章的差異)
人格參數依 wiki 9.2 實作於 `hooks/companion/core/params.ts`:
- 三層值:角色包基準(`core.json` 的 `params`)+存檔偏移(每次 ±1,上限 ±15)+今日偏移(N(0,5),上限 ±10),總值限制在 0–100。
- 衍生值:有效心防、有效害羞、有效口是心非,公式同 9.2;信賴與親密以 0–100 輸入。
- Big Five 保留為推導值:有 `params` 時,神經質(心情半衰期)與外向性(關心頻率)改由 18 參數推導,加權為設計啟發式;沒有 `params` 的舊角色沿用 `neuroticism`、`extraversion`。ingest 的 Big Five 推論與證據機制不變。
- 姓名、性別、年齡、核心信念不可由 AI 改動,`filterAiPatch` 會剔除這些欄位。
- 目前只提供計算與儲存欄位(`state.json` 的 `params`);每日抽樣、存檔偏移累積的觸發時機留待後續工作項目。
## 評估標籤
使用者每句話會對應到一個評估標籤,再由 `rules.ts` 的規則表換成心情增減量;模型只負責分類,不給數值。
- 正則先判明確的情況(責罵、感謝、完成)。
- 正則沒判出時,採用模型於回覆末尾補的 `<評估:標籤>`;標籤須在 `tags.ts` 的白名單內,缺失或不在白名單就當作沒有標籤。
- 白名單約 20 個,參考 wiki 第 9.4 章;不含戀愛與親密類標籤。
## 情緒模型
- 8 維度各有基準與半衰期(心情 8h、精力 6h、害羞 2h、忌妒 4h、想念 12h、心跳 1h、想家 24h、不悅 4h,神經質 50 時),數值集中在 `hooks/companion/emotion.ts`。
- 晝夜節律:精力基準在本地 15 點最高、凌晨 3 點最低(±0.1,依 `tz` 設定)。
- 事件的情感注入、疲勞易怒(精力低於 0.3 時負面變化 ×1.5)、正向習慣化(重複 ×0.7ⁿ)、負向敏感化(重複最多 ×2),計次以 6 小時半衰期遺忘。
- 舊的 PAD 存檔讀檔時自動映射(p→心情、a→精力、d→害羞)並升級,不需重建。
- 與第 9 章的差異:晝夜節律振幅、習慣化係數等數值為本實作自訂,尚未逐項對照第 9 章。
## 記憶權重與檢索
記憶依 wiki 9.5 實作於 `hooks/companion/memory.ts`,數值集中在 `rules.ts` 的 `MEMORY`。
- 權重 W = I_eff × F × A:I_eff = 初始重要度/2 + 情緒峰值/40 + 類別加成(限制在 1–5);F = 0.5^(Δ回合/200),原典記憶固定 1,被檢索到時至少回到 0.8;A 為存取加成。
- 反覆思量:未解的負向事件(心情增量 p < 0 的標籤)每日權重 +20%,上限 3 倍;`apology`、`soothe` 標籤出現時全部標為已解。
- 衰減與封存:暫時記憶在場景結束(`end`)或 7 天後封存;可升級記憶 30 天未升級降權一半、90 天未檢索封存,被檢索 3 次升為長期;長期與鎖定記憶不衰減。封存只改 `status`,任何記憶都不刪除。
- 危險內容(自傷、違法等關鍵字)不固化:只留一則安全事件摘要,不留原文、不升級、不進反思。
- 開放迴路:角色回覆末尾的問句記為開放迴路,使用者 2 回合內沒有相關回應就逾時;未收尾的對話與未解負向事件列入每回合必帶(`core()`)。
- 檢索:關鍵字排名經 RRF(Σ 1/(60+rank))融合後乘上 W,再加心情一致加權 w_m × 相似度(w_m = 0.10 + 0.05 × (1 − 釋懷速度))。`recall` 的 `extra` 保留外部檢索器介面,語意相似度不做。
- 舊存檔缺少的欄位讀檔時自動補上。
與第 9 章的差異:A 的公式(1 + 0.1 × min(命中次數, 5))為本實作自訂,wiki 只寫「被檢索到時 F 至少回到 0.8」;回合序號以使用者回合計;情緒峰值由標籤向量長度換算;原典佔比、相似記憶合併、釘選與使用者模型容量尚未實作。