語氣層:由人際關係推導稱呼與距離感,並收斂 sleeper 隔離 #6

Merged
admin merged 2 commits from develop into master 2026-07-30 07:52:43 +00:00
Member

這個 PR 解決什麼

人格對伴侶和對女兒用同一種溫度講話。原因是關係節點只有 kind(human/ai/group)——它說得出「這是人還是程式」,說不出「跟我什麼關係」,而語氣需要的是後者。

做法

1. 關係節點新增 bond
partner / child / parent / sibling / friend / mentor / ally / rival / stranger。舊資料沒有這個欄位時,從 tags / note 推測。

2. bond × 親近度 → 語氣層(查表,決定距離感)
伴侶 98 → 老夫老妻層;子女 97 → 母親層。兩者只差一分,但語氣完全不同——這是查表要解的問題。

3. node.style[facet] → 使用者本人要求過的規則(優先於查表)

"style": {
  "稱呼": { "value": "…", "except": "anger>=40", "since": "2026-07-30" },
  "敬語": { "value": "不用敬語,直接講", "since": "2026-07-30" }
}

放在關係節點上而不是另開記憶檔,是因為關係圖每輪都會被讀進 <persona-context>:稱呼規則不必跟關鍵詞召回競爭,也就不會「他沒提到這件事的那一輪就叫錯稱呼」。

4. except 由當下情緒判斷生不生效
anger>=40 成立時該規則暫停,退回語氣層的預設講法。情緒因此真的參與語氣,而不只是被記錄下來。

5. relation speaker
指定使用者是關係圖裡的哪個節點,turnContext 每輪注入一行語氣指示。

介面

relation node    --name <who> --bond partner|child|parent|sibling|friend|mentor|ally|rival|stranger
relation style   --name <who> --facet 稱呼 --value <v> [--except anger>=40] [--clear]
relation speaker --name <who> | --clear

相容性

  • bond 缺席時從 tags 推測,舊的 graph.json 不需要遷移
  • 沒設 speaker 就不注入語氣指示,行為與現況相同

一併帶上的 sleep 修改(commit b3508a0)

--as-sleeper 的判斷式收尾、sleeper 被 pin 在自己人格上的隔離、只能走 CLI 不得直接寫檔。

測試

node scripts/selftest.mjs228 項全過(新增 8 項涵蓋 bond 推導、語氣層查表、style 規則、情緒暫停、speaker 注入與清除)。

🤖 Generated with Claude Code

## 這個 PR 解決什麼 人格對伴侶和對女兒用同一種溫度講話。原因是關係節點只有 `kind`(human/ai/group)——它說得出「這是人還是程式」,說不出「跟我什麼關係」,而語氣需要的是後者。 ## 做法 **1. 關係節點新增 `bond`** `partner` / `child` / `parent` / `sibling` / `friend` / `mentor` / `ally` / `rival` / `stranger`。舊資料沒有這個欄位時,從 `tags` / `note` 推測。 **2. `bond` × 親近度 → 語氣層(查表,決定距離感)** 伴侶 98 → 老夫老妻層;子女 97 → 母親層。兩者只差一分,但語氣完全不同——這是查表要解的問題。 **3. `node.style[facet]` → 使用者本人要求過的規則(優先於查表)** ```jsonc "style": { "稱呼": { "value": "…", "except": "anger>=40", "since": "2026-07-30" }, "敬語": { "value": "不用敬語,直接講", "since": "2026-07-30" } } ``` 放在關係節點上而不是另開記憶檔,是因為關係圖每輪都會被讀進 `<persona-context>`:稱呼規則不必跟關鍵詞召回競爭,也就不會「他沒提到這件事的那一輪就叫錯稱呼」。 **4. `except` 由當下情緒判斷生不生效** `anger>=40` 成立時該規則暫停,退回語氣層的預設講法。情緒因此真的參與語氣,而不只是被記錄下來。 **5. `relation speaker`** 指定使用者是關係圖裡的哪個節點,`turnContext` 每輪注入一行語氣指示。 ## 介面 ```bash relation node --name <who> --bond partner|child|parent|sibling|friend|mentor|ally|rival|stranger relation style --name <who> --facet 稱呼 --value <v> [--except anger>=40] [--clear] relation speaker --name <who> | --clear ``` ## 相容性 - `bond` 缺席時從 tags 推測,舊的 `graph.json` 不需要遷移 - 沒設 `speaker` 就不注入語氣指示,行為與現況相同 ## 一併帶上的 sleep 修改(commit b3508a0) `--as-sleeper` 的判斷式收尾、sleeper 被 pin 在自己人格上的隔離、只能走 CLI 不得直接寫檔。 ## 測試 `node scripts/selftest.mjs` → **228 項全過**(新增 8 項涵蓋 bond 推導、語氣層查表、style 規則、情緒暫停、speaker 注入與清除)。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 2 commits 2026-07-30 07:46:20 +00:00
- sleeper 帶 --as-sleeper 就能在沒有 exclusive 鎖時做收尾
- sleeper 被 pin 在自己的人格上,讀寫其他人格(含主人格)一律攔下
- sleeper 只能走 CLI,不得用 Write 或 shell 重導向改人格檔案
- 主人格載入別的人格時,sleeper 仍以自己的 pin 為準

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
人格對伴侶與對女兒用同一種溫度講話,因為 kind 只說得出「這是人還是程式」,
說不出「跟我什麼關係」。語氣需要的是後者。

- 關係節點新增 bond(partner/child/parent/sibling/friend/mentor/ally/rival/
  stranger);舊節點沒有的話從 tags/note 推測
- bond × 親近度 → 語氣層查表(伴侶 98 = 老夫老妻、子女 97 = 母親),
  解決「都是 9x 分卻分不出戀人與母女」
- node.style[facet] 記使用者本人要求過的規則(稱呼/敬語/口頭禪/禁忌/習慣),
  優先於查表;不另開檔案,因為關係圖每輪都會被讀進 context,
  這類規則不必跟關鍵詞召回競爭
- style 規則可帶 except(如 anger>=40),情緒成立時該規則暫停、退回預設講法
- relation speaker 指定使用者是關係圖裡的哪個節點,turnContext 每輪注入語氣指示
- 新增 relation style / relation speaker 子指令;selftest +8 項(共 228 項)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-07-30 07:52:40 +00:00
admin merged commit 55e0c2dd39 into master 2026-07-30 07:52:43 +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#6