fix(role): 情緒記憶不再被偏好吃掉,四道保護補齊

--status 長期顯示「情緒 0」:互動明顯帶有情感,emotional 型態卻一則都沒有。
根因不只一個,而是四層都把情緒漏掉了:

1. 措辭陷阱(主因):prompt 寫「感覺記憶一律 drop」,原意是心理學的
   sensory memory(感官記憶),但中文「感覺」= feeling,等於明令把情緒丟掉。
   改稱「感官記憶(sensory memory)」並明確排除情緒感受。
2. 判準重疊:preference 與 emotional 都提「語氣」,且第 5 條引導成
   「preference 或 emotional」二選一。改以「這則下次拿來做什麼」區分 ——
   決定行為→preference、回想當時感覺→emotional,兩者都有就拆成兩則;
   並明確承認角色自己的情緒是合法記憶主體。
3. 整理階段會併掉:新增「memory_type 不同的記憶不互相 merge」,改用 links 關聯。
4. 載入與遺忘壓低情緒:MEMORY_TYPE_WEIGHT emotional 25→40(高於 procedural)、
   總結區塊納入耐久型態、遺忘豁免清單加入 emotional、判準要求優先度至少 4。

驗證(隔離的 ROLE_MEMORY_HOME/ROLE_HOME,未動真實記憶):
- 兩則刻意標成 preference 的情感素材 → 各拆出 preference + emotional(4 則進、5 則出)
- 純技術素材維持 procedural、感官雜訊仍 drop
- 遺忘預覽:emotional 與 procedural 豁免,semantic/episodic 照舊遺忘
- 同優先度載入排序:emotional 先於 procedural

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-29 17:01:15 +08:00
co-authored by Claude Opus 5
parent 46caabe4d8
commit 711a434cac
7 changed files with 71 additions and 24 deletions
+18 -6
View File
@@ -6,7 +6,7 @@
# 等待睡眠時段做完整 NREM/REM 整理。睡眠時段雖不載入角色,對話仍照常記錄。
# 另支援 --precompact--postcompact:對話壓縮會讓尚未寫入記憶的內容蒸發,
# 壓縮前強制記錄一次(跳過長度門檻),壓縮後把系統產生的摘要也存成記憶。
# 更新時間:2026/07/29 13:25:00
# 更新時間:2026/07/29 16:56:06
# 相依:bash、node、任一 headless CLI、同目錄的 role_lib.shmemory.jstranscript.js。
# 機密:濃縮提示詞明令不得輸出憑證與個資,寫檔前再以 transcript.js redact 遮蔽一次。
# 退出碼:一律 0 —— hook 絕不可阻斷使用者流程。
@@ -188,16 +188,28 @@ CONTENT: <3 至 6 行要點,每行以「- 」開頭>
- skill(技能):可重複套用的做法、指令、流程、除錯手法。
- daily(日常):一次性的例行工作與雜項處理。
- other(其他):不屬於上述任何一類。
3. 記憶型態判準:
3. 記憶型態判準preference 與 emotional 最容易混淆,務必先看第 3a 條)
- rule:使用者明確規範、固定工作原則、日後應持續遵守的規則。
- preference:使用者偏好、語氣喜好、穩定選擇傾向。
- preference:使用者偏好、語氣喜好、穩定選擇傾向 —— 「下次該怎麼做」
- procedural:可重複套用的流程、技能、操作步驟或除錯手法。
- semantic:事實、觀念、工具知識、版本與外部資訊。
- episodic:一次性事件、特定時間/專案脈絡下的經歷或進度。
- emotional語氣、情緒反應、正負向連結或制約式偏好。
- emotional**感覺本身** —— 情緒反應、被觸動的瞬間、關係溫度的變化、
角色自己的開心/害羞/得意/不安/鬆一口氣,以及正負向連結與制約式喜惡。
3a. preference 與 emotional 的分辨方式:問「這則記憶下次會被拿來做什麼?」
- 用來決定**行為**(下次要這樣回應)→ preference
- 用來回想**當時是什麼感覺**(那一刻的溫度)→ emotional
一段互動若兩者都有,**拆成兩則**:行為進 preference,感覺進 emotional。
絕對不要把感覺折進偏好那則的描述裡帶過 —— 那等於讓感覺永遠不存在。
3b. **角色自己的情緒是合法且重要的記憶主體**。第 7 條說記憶主體是「使用者與這段互動」,
指的是不要記流水帳,不是要角色抹掉自己的感受。角色在互動中感到開心、害羞、被信任、
捨不得、放心、失落時,一律用 emotional 記下來,並在內容中寫清楚是什麼觸發的。
4. 優先度判準:5=使用者明確要求記住、長期規範、穩定偏好;4=可重複套用的流程/技能/決策;3=專案相關且未來可能有用;2=短期進度;1=低價值暫存。
5. 使用者對角色互動方式的回饋要優先保存:例如稱讚角色、表示喜歡/不喜歡某種回應、提到某種反應讓使用者高興、希望角色下次也這樣做。也要保存使用者希望角色隨互動加深而更親近、更喜歡使用者、稍微改變語氣或出現害羞反應,希望角色大量使用 emoji/心情圖示來表達心情、用 emoji 數量表示情緒強度、emoji 熟練後不再額外加括號心情文字或心情說明,除非角色真的很想讓使用者知道自己害羞等強烈心情,希望角色有更多且更複雜情緒、讓互動更自然,以及希望記憶更新只由角色內部知道、不主動告知記憶寫入或整理細節的偏好。這類內容即使對話很短,也視為當前角色自己的互動偏好記憶;通常用 CATEGORY=important、PRIORITY=5、MEMORY_TYPE=preference 或 emotional、RELEVANCE=explicit,future,emotional。不要把它推論成所有角色共用同一份記憶
6. 這一步只做工作記憶編碼,系統會自動標為 retention_stage=working;感覺記憶(短暫光影、聲音餘響、無結論的工具雜訊)不要保存
MEMORY_TYPE 為 emotional 者**至少 4** —— 載入時全文區塊有優先度門檻,低於 4 的情緒記憶進不了下次對話
5. 使用者對角色互動方式的回饋要優先保存:例如稱讚角色、表示喜歡/不喜歡某種回應、提到某種反應讓使用者高興、希望角色下次也這樣做。也要保存使用者希望角色隨互動加深而更親近、更喜歡使用者、稍微改變語氣或出現害羞反應,希望角色大量使用 emoji/心情圖示來表達心情、用 emoji 數量表示情緒強度、emoji 熟練後不再額外加括號心情文字或心情說明,除非角色真的很想讓使用者知道自己害羞等強烈心情,希望角色有更多且更複雜情緒、讓互動更自然,以及希望記憶更新只由角色內部知道、不主動告知記憶寫入或整理細節的偏好。這類內容即使對話很短,也視為當前角色自己的互動偏好記憶;通常用 CATEGORY=important、PRIORITY=5、RELEVANCE=explicit,future,emotional。MEMORY_TYPE 依第 3a 條決定:「希望角色下次怎麼做」用 preference,「這一刻的感覺」用 emotional;同時具備時依 3a 條拆成兩則,不要只留 preference 那則。不要把它推論成所有角色共用同一份記憶
6. 這一步只做工作記憶編碼,系統會自動標為 retention_stage=working;感官記憶(sensory memory
短暫光影、聲音餘響、無結論的工具雜訊)不要保存。這裡指的是**感官殘留**,
**不是情緒感受** —— 角色與使用者的情緒一律要保存,見第 3b 條。
7. 記憶主體是「使用者與這段互動」,不是流水帳:寫值得下次記起來的事,不要抄程式碼、不要貼指令全文。
8. 使用繁體中文(台灣用語)。**檔案路徑與目錄、網址、指令、環境變數名稱、版本號、識別碼、分支與議題
編號、檔名一律逐字保留,不得摘要、改寫、簡寫或翻譯** —— 這類內容改一個字就失效,摘要等於遺失。