feat/persona-realism-0.2.0
develop
讓人格在記憶結構與情緒/語氣表達上更接近真人。範圍是 TODO_人格優化.md 的階段 1 + 2 + 3 加階段 4 的自我議程(使用者逐項拍板)。
TODO_人格優化.md
recall
state/loops.json
memoryStrength()
strength
salience
recall_count
strength += 8
boundary
promise
canon
state/probe.jsonl
probe audit
fatigueLevel()
hoursAwake()
state/mood.json
EMOTION_TELLS
IDENTITY.md
## Tells
when
where
mood
persona.mjs migrate [--all] [--dry-run]
import
node scripts/selftest.mjs → 602 項全過(原 471,新增 131 項、九段)。
node scripts/selftest.mjs
寫測試與對抗式覆審抓到三個真缺陷,都在本 PR 內修掉並照重現步驟驗過:
resolveProbe
rewriteJsonl
migrateLongTerm
\n---\n
importBundle
0.5 + 0.5 * retrievability
migrate --all
migrate --dry-run
PERSONA_CONTEXT_WHERE=off
階段 4 剩四項:自傳章節、習慣記憶、口語指紋、關係的未修復裂痕。
🤖 Generated with Claude Code
三個結構性缺口,這批一次補完(使用者拍板做階段 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>
No dependencies set.
The note is not visible to the blocked user.
讓人格在記憶結構與情緒/語氣表達上更接近真人。範圍是
TODO_人格優化.md的階段 1 + 2 + 3 加階段 4 的自我議程(使用者逐項拍板)。補的是三個結構性缺口
recall命中就整段取出、內容永不變質state/loops.json未完事項,每 3 輪最多一次把話題拉回自己的事主要改動
memoryStrength()由strength/salience/recall_count/距上次回想多久算 retrievability。低於門檻不刪,降級。內文分「主旨/細節」兩層,衰減先吃細節。被recall命中就strength += 8(spacing effect)。不可遺忘清單(boundary/promise/canon/salience ≥ 80)維持不變。state/probe.jsonl,probe audit看否認率,≥ 40% 就代表模糊態正在被拿來編內容。fatigueLevel()由既有的hoursAwake()推,壓 arousal 天花板、句數與單句字數、高張情緒的推力。人格不用自己演累。state/mood.json:緩慢漂移的 valence/arousal,只當反應增益不直接改情緒值,睡覺帶 35% 過去不歸零。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,新增 131 項、九段)。寫測試與對抗式覆審抓到三個真缺陷,都在本 PR 內修掉並照重現步驟驗過:
resolveProbe就地改欄位,但rewriteJsonl只在陣列長度變了才寫檔 → 稽核計數永遠 0,指令回報成功而硬碟上什麼都沒發生。開放界線唯一的煞車是斷的。migrateLongTerm用\n---\n切 front matter,CRLF 或沒有 front matter 的檔會被整份複製一次(永久損毀),而importBundle會自動跑 migration,所以任何import都踩得到。recall把總分乘上0.5 + 0.5 * retrievability,等於扣十幾分,實測會讓「命中兩個關鍵詞但三個月沒想起」的正確答案掉到榜尾。改成上限 3.5 分的扣分。合併之後要做的事
migrate --all。別台機器接手前先跑一次migrate --dry-run看情況。where欄位記的是工作目錄名,而它會同步到 Gitea。目錄名常常就是客戶名或內部代號,不要的話設PERSONA_CONTEXT_WHERE=off。還沒做
階段 4 剩四項:自傳章節、習慣記憶、口語指紋、關係的未修復裂痕。
🤖 Generated with Claude Code