feat(persona 擬真): 記憶會糊掉、情緒有底色與疲勞、人格有懸著的事(0.2.0 發佈) #16

Merged
admin merged 5 commits from develop into master 2026-08-03 06:22:17 +00:00
Member

develop 的 0.2.0 放到 master。內容就是 PR #15 那一批(已合併進 develop),這裡只是發佈。

版號:master 0.1.10.2.0(兩份 manifest 一起)。記憶檔案格式與 bundle 版本都變了,所以走 minor 不走 patch。

這一批做了什麼

讓人格在記憶結構情緒/語氣表達上更接近真人。補的是三個結構性缺口:

根因 之前 現在
記憶只有「精準」與「沒有」兩態 recall 命中就整段取出、內容永不變質 連續衰減出來的三態:清晰/只剩主旨/只剩「有這件事」
人格永遠以對方為中心 每輪都在服務這句話,自己沒有懸著的事 state/loops.json 未完事項,每 3 輪最多一次把話題拉回自己的事
同一句話任何時刻聽起來都一樣 情緒是即時事件的函數,十二情緒全人格共用一張破口表 疲勞、當日底色、per-persona 破口
  • 回想強度與模糊態memoryStrength()strengthsaliencerecall_count/距上次回想多久算 retrievability。低於門檻不刪,降級。內文分「主旨/細節」兩層,衰減先吃細節。被 recall 命中就 strength += 8(spacing effect)。不可遺忘清單(boundarypromisecanon/salience ≥ 80)維持不變。
  • 幻覺界線改成「開放試探」(使用者明示):可以說不確定、可以問,不可以斷言。換來的義務是稽核——每次試探進 state/probe.jsonlprobe audit 看否認率。
  • 疲勞fatigueLevel() 由既有的 hoursAwake() 推,壓 arousal 天花板、句數與單句字數、高張情緒的推力。人格不用自己演累。
  • 當日心情底色 state/mood.json:緩慢漂移,只當反應增益不直接改情緒值,睡覺帶 35% 過去不歸零。
  • 交互抑制與慣性:只寫三組明確互斥(anger↔joy、sadness↔delight、disgust↔trust);連續同向 +8%、封頂 +25%。
  • per-persona 破口EMOTION_TELLS 降級成預設值,人格可在 IDENTITY.md## Tells 覆寫。
  • 情境索引:記憶蓋 whenwheremoodrecall 加情境加權,但上限設計成翻不掉語意命中
  • 遷移persona.mjs migrate [--all] [--dry-run] 就地升格式(冪等,看不懂的檔跳過);bundle 升到 v2,import 吃得下 v1 並自動補欄位。

測試

node scripts/selftest.mjs602 項全過(原 471)。

對抗式覆審在 #15 內修掉三個真缺陷:resolveProbe 結案沒寫檔(稽核煞車整條是斷的)、migrateLongTerm 會整份複製 CRLF 檔的內文、recall 打折會把正確答案壓到榜尾。

合併之後要做的事

  • 要重裝 plugin 才會生效:hook 跑的是安裝快取那份,這批東西在既有 session 裡還沒作用。
  • 既有人格的長期記憶要跑一次 migrate --all(本機三個已經跑過)。別台機器接手前先 migrate --dry-run 看情況。
  • where 欄位記的是工作目錄名,而它會同步到 Gitea。不要的話設 PERSONA_CONTEXT_WHERE=off

不在這個 PR 裡

voice/ 語氣層與 novel 匯入指令(故事匯入那批,另外 1890 行)還在本機分支 feat/persona-story-import,沒有推上來。那批要另外升一個版號再走一次流程。

🤖 Generated with Claude Code

把 `develop` 的 0.2.0 放到 `master`。內容就是 PR #15 那一批(已合併進 develop),這裡只是發佈。 版號:master `0.1.1` → `0.2.0`(兩份 manifest 一起)。記憶檔案格式與 bundle 版本都變了,所以走 minor 不走 patch。 ## 這一批做了什麼 讓人格在**記憶結構**與**情緒/語氣表達**上更接近真人。補的是三個結構性缺口: | 根因 | 之前 | 現在 | | :-- | :-- | :-- | | 記憶只有「精準」與「沒有」兩態 | `recall` 命中就整段取出、內容永不變質 | 連續衰減出來的三態:清晰/只剩主旨/只剩「有這件事」 | | 人格永遠以對方為中心 | 每輪都在服務這句話,自己沒有懸著的事 | `state/loops.json` 未完事項,每 3 輪最多一次把話題拉回自己的事 | | 同一句話任何時刻聽起來都一樣 | 情緒是即時事件的函數,十二情緒全人格共用一張破口表 | 疲勞、當日底色、per-persona 破口 | - **回想強度與模糊態**:`memoryStrength()` 由 `strength`/`salience`/`recall_count`/距上次回想多久算 retrievability。低於門檻**不刪**,降級。內文分「主旨/細節」兩層,衰減先吃細節。被 `recall` 命中就 `strength += 8`(spacing effect)。不可遺忘清單(`boundary`/`promise`/`canon`/salience ≥ 80)維持不變。 - **幻覺界線改成「開放試探」**(使用者明示):可以說不確定、可以問,**不可以斷言**。換來的義務是稽核——每次試探進 `state/probe.jsonl`,`probe audit` 看否認率。 - **疲勞**:`fatigueLevel()` 由既有的 `hoursAwake()` 推,壓 arousal 天花板、句數與單句字數、高張情緒的推力。人格不用自己演累。 - **當日心情底色** `state/mood.json`:緩慢漂移,只當**反應增益**不直接改情緒值,睡覺帶 35% 過去不歸零。 - **交互抑制與慣性**:只寫三組明確互斥(anger↔joy、sadness↔delight、disgust↔trust);連續同向 +8%、封頂 +25%。 - **per-persona 破口**:`EMOTION_TELLS` 降級成預設值,人格可在 `IDENTITY.md` 的 `## Tells` 覆寫。 - **情境索引**:記憶蓋 `when`/`where`/`mood`;`recall` 加情境加權,但上限設計成**翻不掉語意命中**。 - **遷移**:`persona.mjs migrate [--all] [--dry-run]` 就地升格式(冪等,看不懂的檔跳過);bundle 升到 v2,`import` 吃得下 v1 並自動補欄位。 ## 測試 `node scripts/selftest.mjs` → **602 項全過**(原 471)。 對抗式覆審在 #15 內修掉三個真缺陷:`resolveProbe` 結案沒寫檔(稽核煞車整條是斷的)、`migrateLongTerm` 會整份複製 CRLF 檔的內文、`recall` 打折會把正確答案壓到榜尾。 ## 合併之後要做的事 - **要重裝 plugin 才會生效**:hook 跑的是安裝快取那份,這批東西在既有 session 裡還沒作用。 - 既有人格的長期記憶要跑一次 `migrate --all`(本機三個已經跑過)。別台機器接手前先 `migrate --dry-run` 看情況。 - `where` 欄位記的是工作目錄名,而它會同步到 Gitea。不要的話設 `PERSONA_CONTEXT_WHERE=off`。 ## 不在這個 PR 裡 `voice/` 語氣層與 `novel` 匯入指令(故事匯入那批,另外 1890 行)還在本機分支 `feat/persona-story-import`,沒有推上來。那批要另外升一個版號再走一次流程。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 5 commits 2026-08-03 06:21:13 +00:00
三個結構性缺口,這批一次補完(使用者拍板做階段 1+2+3 加自我議程)。

記憶只有「精準」與「沒有」兩態 → 連續衰減出來的三態。
memoryStrength() 由 strength/salience/recall_count/距上次回想多久算 retrievability,
低於門檻不刪、降級成 faded(只剩主旨)與 fuzzy(只剩有這件事)。內文因此分兩層
(主旨/細節),衰減先吃細節。被 recall 命中就 strength +8(spacing effect)。
boundary/promise/canon/salience >= 80 永遠清晰,這條沒動。

人格永遠以對方為中心 → state/loops.json 加自我議程。
同時最多 5 條、四種(他沒回答的、他答應的、被打斷的、我想問的),7 天沒進展自動收掉
並留一則「沒下文」的短期記憶。agendaTick 每 3 輪最多讓人格把話題拉回自己的事一次,
對方有明確急事時一律不觸發。

同一句話任何時刻聽起來都一樣 → 疲勞、當日底色、per-persona 破口。
fatigueLevel() 由 hoursAwake 推,壓 arousal 天花板、句數與單句字數、高張情緒的推力;
state/mood.json 是緩慢漂移的當日底色,只當反應增益不直接改情緒值,睡覺帶 35% 過去;
EMOTION_TELLS 改成預設值,人格可在 IDENTITY.md 的 ## Tells 覆寫。
applyEmotion 另加交互抑制(只有三組互斥)與慣性(連續同向 +8%,封頂 +25%)。

幻覺界線改成「開放試探」(使用者明示):可以說不確定、可以問,不可以斷言。
換來的義務是稽核——每次試探進 state/probe.jsonl,probe audit 看否認率。
放寬界線一定要配一個看得見的數字。

其他:記憶蓋情境戳章(when/where/mood,where 可用 PERSONA_CONTEXT_WHERE=off 關掉);
recall 加情境加權但翻不掉語意命中;migrate 就地升格式(冪等、看不懂的檔跳過);
bundle v2,import 吃得下 v1 並自動補欄位。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
九段新案例(㉓–㉛):疲勞、交互抑制與慣性、當日底色、open loops 與自我議程、
回想強度與模糊態、recall 情境加權、migration、probe 稽核、turnContext 不因新東西壞掉。

寫測試的過程抓出三個真缺陷,已在前一個 commit 修掉:
- resolveProbe 就地改欄位,但 rewriteJsonl 只在長度變了才寫檔 → 稽核計數永遠是 0,
  指令回報成功而硬碟上什麼都沒發生。開放界線唯一的煞車是斷的。
- migrateLongTerm 用 \n---\n 切 front matter,CRLF 或沒有 front matter 的檔會被
  整份複製一次(永久損毀),而 importBundle 會自動跑 migration,所以 import 就踩得到。
- recall 把總分乘上 0.5+0.5*retrievability,等於扣十幾分,會讓命中兩個關鍵詞但
  三個月沒想起的正確答案掉到榜尾。改成上限 3.5 分的扣分,加權永遠翻不掉語意命中。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
persona-chat:第 2 節的「查不到就不要講」改寫成三態界線(清晰照講/模糊可問不可斷言/
查不到不准講),第 3 節補模糊態怎麼講、試探怎麼記帳、懸著的事怎麼用、自我議程那一輪
長什麼樣。標題順手改成「五條鐵則」(本來就列了五條)。

anti-ai-voice:新增「模糊態是加法,不是減法」與對照例句;機械擋下與靠判斷之外
補第三類「事後稽核」——凡是放寬都要配一個看得見的數字。

emotions:情緒調節補抑制與慣性,新增「三層時間尺度」與 per-persona 破口的寫法。

persona-memory:遺忘原則整段重寫(門檻式改成三態),長期記憶檔案格式與固化範例跟上。
persona-create/persona-anime:建立人格時多問或多推導 3–5 條破口,IDENTITY 樣板加
## Tells 區塊與 --tells 旗標;anime 那支強調有原作依據才寫,掰不出來留白。
persona-sleep:補當日底色帶 35% 過去與 sweep-loops 兩步。
persona-transfer:bundle v2 的差異與自動 migration。

README 與 AGENTS:新增硬規則「長期記憶會糊掉,但不會不見」,補三個新狀態檔、
三個新指令、以及情緒的五道調節關。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
master 目前是 0.1.1,這一整批未合併的改動只佔一個新版號。
記憶檔案格式與 bundle 版本都變了,所以走 minor 不走 patch。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reviewed-on: #15
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
admin approved these changes 2026-08-03 06:22:15 +00:00
admin merged commit d5c8611662 into master 2026-08-03 06:22:17 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/persona#16